3

我正在浏览集成在 FFMPEG 中的 HEVC 解码器。我实际上是在尝试了解它的流程和工作方式。

通过流,我的意思是代码中读取输入 .bin 文件的各种参数的部分。比如它在哪里读取分辨率,它在哪里决定它需要播放的 fps,输出显示格式是 yuv420p 等。

最初我怀疑是位于/libavformat/hevcdec.cIn this file 的 hevc 的 demuxer 执行输入文件读取工作。有一个探测函数,用于检测在解码输入 bin 流时选择哪个解码器。此外,我们有一个FF_DEF_RAWVIDEO_DEMUXER. 从输入文件中读取的分辨率和其他参数是否在此函数中?

其次,我怀疑hevc解析器位于:/libavcodec/hevc_parser.c但在这里我认为它只是解析帧数据,即找到帧尾。那么,我的这个假设对吗?

任何建议或任何预测都会对我很有帮助。请提出您宝贵的建议。提前致谢。

4

1 回答 1

1

要更具体地了解解码器中发生了什么,最好从 HEVC/H.265 标准 ( http://www.itu.int/rec/T-REC-H.265 ) 开始学习。它包含查找分辨率、fps 等位置所需的所有信息。

如果你想从 FFMPEG 获得更多细节,这里有一些提示:

  • /libavcodec/hevc_parser.c包含 H.265 Annex B 解析器,它将字节流转换为一系列 NAL 单元。每个 NAL 单元都有自己的格式,应根据其 NAL 单元类型进行解析。
  • 如果您正在寻找视频序列的基本属性,您可能会对 SPS(Sequence Parameter Set)解析感兴趣。其格式在标准的第 7.3.2.2.1 节中进行了描述,并且有一个函数可以从比特流ff_hevc_decode_nal_sps/libavcodec/hevc_ps.c提取 SPS 参数。

注意:我说的是 FFMPEG 版本 2.5.3。其他版本的代码结构可能不同。

于 2015-03-07T21:14:35.197 回答