2012-06-29 15 views
6

Ich brauche etwas Hilfe mit decadein rtsp Video-Stream. Ich bekomme es von AXIS IP-Kamera. Ich benutze ffmpeg Bibliothek dafür. Es ist notwendig, AVCodecContext separat zu erstellen, nicht aus AVFormatContext-> Streams [...] -> Codec;Decode h264 rtsp mit ffmpeg und getrennt AVCodecContext

Also ich AVCodec, AVCOdecContext erstellen und versuchen, sie zu initiieren.

AVCodec *codec=avcodec_find_decoder(codec_id); 
if(!codec) 
{ 
    qDebug()<<"FFMPEG failed to create codec"<<codec_id; 
    return false; //--> 
} 

AVCodecContext *context=avcodec_alloc_context3(codec); 
if(!context) 
{ 
    qDebug()<<"FFMPEG failed to allocate codec context"; 
    return false; //--> 
} 
avcodec_open2(context, codec, NULL); 

Dann in Hauptschleife Anwendung, erhalten i-Datenrahmen und versuchen zu entschlüsseln:

_preallocatedFrame = avcodec_alloc_frame(); 
avcodec_decode_video2(_context, _preallocatedFrame, &got_picture, &_packet); 

Und hier habe ich viele Nachrichten in der Konsole erhalten:

[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 
[h264 @ 1f177720] non-existing PPS 0 referenced 
[h264 @ 1f177720] decode_slice_header error 
[h264 @ 1f177720] no frame! 

Können Sie Ratschläge mir etwas, wie AVCodecContext oder etwas anderes in Ordnung bringen, um es richtig zu machen?

Antwort

4

Sie müssen noch etwas mehr arbeiten. Wenn Sie den h.264-Stream dekodieren möchten, müssen Sie dem Decoder die "sps pps" -Daten übergeben. Diese Daten können auf dem rtp-Stream selbst see

oder in thtsp Verhandlung im SDP gefunden werden. Nachdem Sie den Decoder erfolgreich mit diesen Daten versorgt haben, sollte die Decodierung funktionieren.

+0

Ok, aber wo die Unterschiede. Wenn ich meinen AVCodecContext von AVFormatContext-> Streams [...] -> Codec bekomme und absolut ähnliche Operationen mache, dekodiert er ohne Fehler. Bt es ist notwendig, dass ich separated Codeccontext verwende (es kann entschlüsselt werden, nachdem Daten aus dem Archiv, gespeichert auf einer Festplatte, wenn ich Formatkontext nicht haben kann) – mmmaaak

+0

Haben Sie versucht, die 2 Kontextobjekte zu vergleichen? – Horonchik

+0

Ja, es gibt mehr als 20 Unterschiede zwischen ihnen. Ich habe versucht, alle verschiedenen Felder auf meinen Kontext zu setzen, außer AVCOdecContext-> priv_data und andere Zeigerfelder - es funktioniert nicht. – mmmaaak

Verwandte Themen