如何深入学习解封装?

毫无疑问,通过调试源码是最好的学习的方式!

1.查看协议

要学习封装的具体细节,首先,我们得知道规则,不然看源码实现也是很难明白为什么要这样的?。我们也许是看MP4、AVI或者RTMP、HLS等流媒体,本人比较建议拿分析工具对应着看每个字节或bit所表示的内容,直接看官方网点分析协议很是费劲的。

在我看来,这些协议不用记,也记不住。知道怎么分析出其所表示的意思即可。

2.搭建调试环境

参考FFmpeg原理——FFmpeg调试环境搭建

我这里是在Mac上用Clion演示分析。

3.在调试中学习解封装

调用API实现解封装很简单,但是想要深入学习却是一件枯槁艰难的事情。

3.1.未打开文件时,尝试探索匹配封装格式

img_4.png

在这里,你可以看read_probe对应的协议所匹配的逻辑。

3.2.打开文件时,再次尝试探索匹配封装格式

img_5.png

3.3.根据不同的封装协议,在该协议内,每次读取一个AVPacket

img_1.png

可具体看对应的协议,具体读取AVPacket的逻辑,根据协议,进行解封装操作。如:根据flv协议读取出每一个AVPacket,然后解析出音频、视频、解码器等信息。

3.4.把读取的AVPacket保存到FFFormatContext->packet_buffer链表中

img_2.png

3.5.当我们调用av_read_frame读取AVPacket时,这时候是从packet_buffer中获取

img_6.png

Copyright © xhunmon 2022 all right reserved,powered by GitbookUpdate: 2023-04-25 11:34:33

results matching ""

    No results matching ""