使用 ffmpeg av_codec_video_2 解码原始缓冲区
decode raw buffer with ffmpeg av_codec_video_2
我正在尝试用 C 编写一个 webrtc 应用程序的解码器。我收到一个 RTP 流,我解析每个数据包,重新排序,并将有效负载放入 AVPacket 中,如此处所述(FFmpeg decode raw buffer with avcodec_decode_video2).
link 中没有描述重新排序部分,但我很确定这部分没问题。
问题是,我不知道如何为解码器提供有关分辨率的信息,pix_fmt 等。我是否需要创建一个 AVstream*
并用我从 rtp header?
是否有人有一段 运行 代码可以解码 VP8 数据包,而无需使用 rtp_dec 等进行解包?
在这个link中,似乎没有更多的信息发送给解码器,是否可以在不知道分辨率和没有任何header的情况下解码?
您不需要将 "resolution, pix_fmt etc." 信息提供给解码器,因为解码器会从输入的 AV 数据包中获取这些信息。
编码器需要诸如分辨率、pix_fmt 等信息来生成压缩的 byte/bit-stream。并且,编码器将此(分辨率,pix_fmt 等)信息嵌入到生成的比特流中。一旦解码器以正确的顺序接收到比特流,它就会在继续解压缩之前导出分辨率,pix_fmt 信息。
可能是您提供给解码器的数据包顺序导致了您的情况。
我正在尝试用 C 编写一个 webrtc 应用程序的解码器。我收到一个 RTP 流,我解析每个数据包,重新排序,并将有效负载放入 AVPacket 中,如此处所述(FFmpeg decode raw buffer with avcodec_decode_video2). link 中没有描述重新排序部分,但我很确定这部分没问题。
问题是,我不知道如何为解码器提供有关分辨率的信息,pix_fmt 等。我是否需要创建一个 AVstream*
并用我从 rtp header?
是否有人有一段 运行 代码可以解码 VP8 数据包,而无需使用 rtp_dec 等进行解包?
在这个link中,似乎没有更多的信息发送给解码器,是否可以在不知道分辨率和没有任何header的情况下解码?
您不需要将 "resolution, pix_fmt etc." 信息提供给解码器,因为解码器会从输入的 AV 数据包中获取这些信息。
编码器需要诸如分辨率、pix_fmt 等信息来生成压缩的 byte/bit-stream。并且,编码器将此(分辨率,pix_fmt 等)信息嵌入到生成的比特流中。一旦解码器以正确的顺序接收到比特流,它就会在继续解压缩之前导出分辨率,pix_fmt 信息。
可能是您提供给解码器的数据包顺序导致了您的情况。