6

我需要一些有关解码 rtsp 视频流的帮助。我从 AXIS IP-camera 得到它。我为此使用 ffmpeg 库。需要单独创建 AVCodecContext,而不是从 AVFormatContext->streams[...]->codec;

所以我创建了 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 或其他东西来正确地做到这一点?

4

1 回答 1

4

你需要做更多的工作。如果要解码 h.264 流,则需要向解码器传递“sps pps”数据。可以在 rtp 流本身上找到此数据,请参阅

或在 SDP 中的 rtsp 协商中。在您成功地向解码器提供此数据后,解码应该可以工作。

于 2012-07-01T18:50:28.713 回答