我正在经历集成在FFMPEG中的HEVC解码器。我实际上是想了解它的流程和工作。
通过流程,我指的是代码中读取输入.bin文件的各种参数的部分。就像它在哪里读取分辨率一样,它在哪里决定它需要播放的fps,输出显示格式是yuv420p等。
最初我怀疑是位于/libavformat/hevcdec.c
的hevc的解复用器在此文件中输入文件读取是否正常工作。存在探测功能,其用于在解码输入仓流时检测要选择哪个解码器。我们还有一个FF_DEF_RAWVIDEO_DEMUXER
。是否在此函数中从输入文件中读取分辨率和其他参数?
其次我怀疑的是位于/libavcodec/hevc_parser.c
的hevc解析器,但在这里我认为它只是解析帧数据,即找到帧结束。那么,我的这个假设是对的吗?
任何建议或任何预测都会对我有所帮助。请提供宝贵的建议。提前谢谢。
答案 0 :(得分:1)
为了更具体地了解解码器中发生的情况,最好使用HEVC / H.265标准(http://www.itu.int/rec/T-REC-H.265)开始学习。它包含了查找分辨率,fps等位置所需的所有信息。
如果您想从FFMPEG获取更多详细信息,请参阅以下提示:
/libavcodec/hevc_parser.c
包含H.265附件B解析器,它将字节流转换为一系列NAL单元。每个NAL单元都有自己的格式,应根据其NAL单元类型进行解析。ff_hevc_decode_nal_sps
中有一个函数/libavcodec/hevc_ps.c
,它从比特流中提取SPS参数。注意:我在谈论FFMPEG版本2.5.3。其他版本的代码结构可能不同。