2016-04-08 1 views
1

Je suis nouveau à l'affichage RTSP-Streams et Xuggler, donc je ne sais vraiment pas quoi faire.Affichage de RTSP-Stream en utilisant Xuggler: org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 34 60, bytestream (td)

Je suis en train d'afficher le Main-Stream de mon appareil photo-IP dans une fenêtre Java-Swing et obtenez ceci:

enter image description here

Je reçois aussi ces erreurs:

13: 21: 45.941 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 8 7, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 34 60, bytestream (td)
17: 47: 04.192 [principal] Erreur org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 8 36, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 68 62, bytestream (td)
17: 47: 04,192 [main] eRREUR org.ffmpeg - erreur [h264 @ 15AC7660] lors du décodage MB 118 38, bytestream (td)
17: 47: 04,192 [ principal] ERROR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 60 62, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] cabac décode de qscale diff échoué à 1 7
13: 21: 46.940 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 1 7, bytestream (td)
17: 47: 04.192 [principal] ERROR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 28 37, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 18 35, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 17 41, bytestream (td)
17: 47: 04.192 [ principal] ERROR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 53 32, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 31 29, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 21 29, bytestream (td)
17: 47: 0 4.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] bloc gauche indisponible pour le mode intra demandé à 0 35
13: 21: 49.902 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 0 35 , bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 17 21, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 46 10, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 109 28, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 60 10, bytestream (td)
17:47:04 .192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 11 14, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 101 9, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 76 9, bytestream (td)
17: 47: 04.192 [principal] ERROR org .ffmpeg - [h264 @ 15AC7660] erreur lors du décodage MB 86 11, bytestream (td)
17: 47: 04.192 [principal] ERREUR org.ffmpeg - [H264 @ 15AC7660] Erreur lors du décodage MB 60 24, bytestream (td)

Cela fait partie du code que j'utilise:

private IMediaListener mediaListener = new MediaListenerAdapter() { 

    @Override 
    public void onVideoPicture(IVideoPictureEvent event) { 
     try { 
      BufferedImage bi = event.getImage(); 
      if (bi != null) 
       updateWindow(bi); 
     } catch (Exception ex) { 
      LOG.error("Error getting Image from IVideoPictureEvent: " + ex); 
     } 
    } 
}; 

public DisplayWindow() { 
    display(); 
} 

private void display() { 
    IMediaReader mediaReader = ToolFactory 
      .makeReader("rtsp://user:[email protected]:554/Streaming/Channels/1"); 

    mediaReader 
      .setBufferedImageTypeToGenerate(BufferedImage.TYPE_3BYTE_BGR); 
    mediaReader.setQueryMetaData(false); 
    mediaReader.addListener(mediaListener); 

    openWindow(); 

    while (true) { 
     IError error = null; 
     if(mediaReader != null){ 
      error = mediaReader.readPacket(); 
      if(error != null){ 
       LOG.error("Error at mediaReader.readPacket(): " + error); 
      } 
     } 
    } 
} 

Affichage du sous-Stream (qui a résolution inférieure) fonctionne bien. J'utilise Xuggler 5.4 avec Maven.

Il y a probablement une solution simple à ce problème, mais j'ai cherché l'Internet entier et n'ai pas trouvé un, ainsi j'apprécierais n'importe quelle aide. Je vous remercie!

MISE À JOUR: Je serais également heureux de (gratuit!) Des alternatives à Xuggler.

+0

je aurais pu trouver une solution: mettre mediaReader.readPacket() dans un nouveau fil. Malheureusement, je ne peux pas le tester atm. – Wenonah

Répondre

1

J'ai corrigé cette erreur avec une caméra HIKVision en forçant le transport TCP. Pour forcer TCP, besoin de créer manuellement le IContainer et passer le paramètre dans un IMetaData:

IMetaData im = IMetaData.make(); 
    im.setValue("rtsp_transport", "tcp"); 

    IContainer streamContainer = IContainer.make();   
    int result = streamContainer.open("rtsp://user:[email protected]:554/Streaming/Channels/1", IContainer.Type.READ, null, true, false, im, null); 

    if (result < 0) { 
     // Error 
    } 

    IMediaReader mediaReader = ToolFactory.makeReader(streamContainer);