2012-06-29 13 views
6

Ho bisogno di aiuto per la decodifica del flusso video rtsp. L'ho preso dalla telecamera IP AXIS. Io uso la libreria ffmpeg per questo. È necessario creare AVCodecContext separatamente, non da AVFormatContext-> streams [...] -> codec;Decodifica h264 rtsp con ffmpeg e separato AVCodecContext

Quindi creo AVCodec, AVCOdecContext e provo a iniziarli.

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); 

Poi, nel ciclo principale di applicazione, ottengo i dati cornici e cercare di decodificare:

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

E qui ricevo molti messaggi in console:

[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! 

Puoi consiglio qualcosa di me, come avviare AVCodecContext o qualcos'altro per farlo corretto?

risposta

4

È necessario eseguire un altro lavoro. se si vuole decodificare lo stream h.264 è necessario passare il decoder ai dati "sps pps". Questi dati possono essere trovati sul flusso rtp stesso see

o nella negoziazione rtsp nell'SDP. dopo aver inviato correttamente il decodificatore con questi dati, la decodifica dovrebbe funzionare.

+0

Ok, ma dove le differenze. Quando ottengo il mio AVCodecContext da AVFormatContext-> streams [...] -> codec, e faccio operazioni assolutamente simili, decodifica senza errori. Bt è necessario usare un codecontext separato (può essere decodificato dopo aver ottenuto i dati dall'archivio, salvato su un disco, quando non posso avere il formato contesto) – mmmaaak

+0

Hai provato a confrontare i 2 oggetti di contesto? – Horonchik

+0

Sì, ci sono più di 20 differenze tra di loro. Ho provato a impostare tutti i campi diversi nel mio contesto, tranne AVCOdecContext-> priv_data e altri campi del puntatore - non funziona. – mmmaaak

Problemi correlati