2012-06-29 14 views
6

Necesito ayuda con decodein rtsp transmisión de video. Lo consigo de la cámara IP AXIS. Yo uso la biblioteca ffmpeg para eso. Es necesario crear AVCodecContext por separado, no desde AVFormatContext-> streams [...] -> codec;Descodificar h264 rtsp con ffmpeg y separado AVCodecContext

Así que creo AVCodec, AVCOdecContext e intento iniciarlos.

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

Luego, en bucle principal de la aplicación, me sale tramas de datos y tratar de decodificar:

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

Y aquí recibo muchos mensajes en la consola:

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

¿Puede consejos algo, ¿cómo iniciar AVCodecContext o alguna otra cosa para hacerlo correctamente?

Respuesta

4

Necesita realizar más trabajo. si desea decodificar la transmisión h.264 necesita pasar el decodificador los datos "sps pps". Estos datos se pueden encontrar en la secuencia de rtp en sí see

o en la negociación rtsp en el SDP. después de alimentar correctamente el descodificador con estos datos, la descodificación debería funcionar.

+0

Bien, pero donde las diferencias. Cuando obtengo mi AVCodecContext de AVFormatContext-> streams [...] -> codec y hago operaciones absolutamente similares, se decodifica sin errores. Bt es necesario para mí usar codeccontext separado (puede decodificarse después de obtener datos del archivo guardado en un disco, cuando no puedo formatear el contexto) – mmmaaak

+0

¿Has intentado comparar los 2 objetos contextuales? – Horonchik

+0

Sí, hay más de 20 diferencias entre ellos. Intenté establecer todos los campos diferentes en mi contexto, excepto AVCOdecContext-> priv_data y otros campos de puntero; no funciona. – mmmaaak

Cuestiones relacionadas