C++ – Decode h264 rtsp with ffmpeg and separated AVCodecContext

cffmpegh.264rtsp

I need some help with decodein rtsp stream of video.
I get it from AXIS IP-camera. I use ffmpeg library for it.
It is neccessary to create AVCodecContext separately, not from AVFormatContext->streams[…]->codec;

So i create AVCodec, AVCOdecContext and try to init them.

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

Then in main loop of application, i get frames data and try to decode:

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

And here I get lots of messages 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!

Can you advice me something, how to init AVCodecContext or something else to do it correct?

Best Answer

You need to perform some more work. if you want to decode h.264 stream you need to pass the decoder the "sps pps" data. This data can be found on the rtp stream itself see

or in th rtsp negotiation in the SDP. after you successfully feed the decoder with this data, the decoding should work.

Related Topic