【问题标题】:decode raw buffer with ffmpeg av_codec_video_2使用 ffmpeg av_codec_video_2 解码原始缓冲区
【发布时间】:2015-10-16 10:39:52
【问题描述】:

我正在尝试用 C 语言为 webrtc 应用程序编写解码器。我收到一个 RTP 流,我解析每个数据包,对它们重新排序,然后将有效负载放入 AVPacket 中,如此处所述 (FFmpeg decode raw buffer with avcodec_decode_video2)。 此链接中未描述重新排序部分,但我很确定这部分没问题。

问题是,我不知道如何为解码器提供有关分辨率、pix_fmt 等的信息。我需要创建一个AVstream* 并用我从 rtp 标头获取的所有信息填充它吗?

是否有人有一段运行代码可以在不使用 rtp_dec 等的情况下解码解包的 VP8 数据包?

在此链接中,似乎没有更多信息发送到解码器,它是否能够在不知道分辨率且没有任何标题的情况下进行解码?

【问题讨论】:

  • 也许我需要在调用 avcodec_decode_video2 之前向 Codec Context 提供分辨率、pix_fmt 等,以及来自 rtp 标头或 SDP 的数据,但我不知道如何正确执行。

标签: ffmpeg webrtc rtp libav vp8


【解决方案1】:

您不需要输入“分辨率、pix_fmt 等”。解码器的信息,因为这些信息是由解码器从输入 AVPackets 派生的。

编码器需要诸如分辨率、pix_fmt 等信息来生成压缩字节/比特流。并且,编码器将此(分辨率、pix_fmt 等)信息嵌入到生成的比特流中。一旦解码器以正确的顺序接收到比特流,它就会在继续解压缩之前得出分辨率、pix_fmt 信息。

可能是您提供给解码器的数据包顺序是您的原因。

【讨论】:

  • 很抱歉这个很晚的答案,我使用的是一个非常旧的 lib 版本。没有最近的 pb。
猜你喜欢
  • 2014-01-14
  • 2013-01-13
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多