使用ffmpeg和分隔的AVCodecContext解码h264 rtsp

时间:2012-06-29 12:11:14

标签: c++ ffmpeg h.264 rtsp

我在decodein rtsp视频流方面需要一些帮助。 我从AXIS IP-camera那里得到它。我使用ffmpeg库。 有必要单独创建AVCodecContext,而不是AVFormatContext-> streams [...] - >编解码器;

所以我创建AVCodec,AVCOdecContext并尝试初始化它们。

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

然后在应用程序的主循环中,我获取帧数据并尝试解码:

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

在这里,我在控制台中收到了很多消息:

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

你能告诉我一些事情吗,如何初始化AVCodecContext或其他什么来做正确的事?

1 个答案:

答案 0 :(得分:4)

你需要做更多的工作。 如果你想解码h.264流你需要传递解码器“sps pps”数据。 这些数据可以在rtp流本身see

上找到

或在SDP中进行谈判。 在您使用此数据成功提供解码器后,解码应该可以正常工作。