当前位置: 首页 > 知识库问答 >
问题:

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

吴城
2023-03-14

我需要一些解码器在rtsp视频流的帮助。我从AXIS IP摄像机那里得到的。我使用了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或其他一些东西来做正确的吗?

共有1个答案

申屠喜
2023-03-14

你需要做更多的工作。如果你想解码H.264流,你需要把“SPS PPS”数据传递给解码器。可以在rtp流本身上找到此数据(请参阅

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

 类似资料:
  • 我正在尝试解码ADTS容器中的AAC音频流,该音频流来自外部硬件H264编码器。 我分析了ADT,它告诉我我有一个2通道,44100 AAC主配置文件框架。我为ffmpeg解码器设置了额外的数据字节,并成功解码了帧?详情如下: (伪c代码) 设置解码器: 设置额外的数据字节: 然后解码帧: 解码帧: 现在,据我所知,32位原始格式的每个帧每个采样将有4个字节,每个通道将被交错(因此每4个字节是交替

  • 问题内容: 我对Python相对较新(我使用MATLAB的次数更多)。我本质上希望能够制作和保存动画。因此,我去检查了它的工作方式,发现了这一点:http : //jakevdp.github.io/blog/2012/08/18/matplotlib- animation-tutorial/ 我直接将代码复制/粘贴到IPython Notebook中。 我了解必须安装ffmpeg,我认为我已经安

  • 代码分离(Code Splitting) 够把代码分离到不同的 bundle 中,然后可以按需或并行加载。代码分离可以用于获取更小的 bundle,以及控制资源加载优先级,如果使用合理,会极大影响加载时间。 示例: import { createElement } from 'rax'; import useImport from 'rax-use-import'; export default

  • 本文向大家介绍使用ASP.NET中关于代码分离的实例分享,包括了使用ASP.NET中关于代码分离的实例分享的使用技巧和注意事项,需要的朋友参考一下 经常在开发项目的时候,会遇到这样的情况,我们希望当用户点击Button按钮时,系统能弹出一个窗口。例如下面的代码: 上面这段代码会弹出一个hello的对话框。这种方法就是在你的后台.cs文件向前台写一段javascript脚本,但是,我想大家看到这样的

  • 分离器 分离器是使得ffmpeg能从特定类型文件中读取多媒体流的组件元素。 当编译ffmepg时,所有支持的分离器都默认被包含,你可以通过编译配置脚本中的--list-demuxers列出所有支持的分离器。 你也可以通过配置--disable-demuxers禁用所有的分离器,如果要在此基础上允许单独的分离器可以选用--enable-demuxer=DEMUXER形式配置,也可以在默认情况下通过-

  • 我使用以下命令通过RTSP流到wowza服务器; ffmpeg-re-i 1464197749623.mkv-c:v copy-c:一个严格复制的实验-f rtsp rtsp://127.0.0.1:1935/live/mystream 很好用。 但是,我有一个情况,我只得到视频从mkv文件,但没有音频。我得到单独的音频文件在mkv格式。我如何在上面的ffmpeg命令中分别指定音频和视频源,以便它