发送 h264 数据进行帧解码时,常见的方法似乎是首先对原始数据调用 libav 库中的 av_parser_parse2 。
我寻找文档,但除了一些示例代码之外我找不到任何东西。它是否对数据包进行分组,以便生成的数据以 NAL header 开始,以便可以将其视为帧?
以下是使用 av_parser_parse2 的示例代码的链接:
如果有人可以向我解释这些库的详细信息或链接我的资源以更好地理解,我将不胜感激。
谢谢。
最佳答案
正如您所猜测的,H.264 的 av_parser_parse2() 消耗输入数据,查找 NAL 起始代码 0x000001 并检查 NAL 单元类型,查找帧起始并输出输入数据,但是具有不同的框架。
也就是说,它消耗输入数据,通过将所有连续数据放入大缓冲区来忽略其成帧,然后仅从 H.264 字节流恢复成帧,这是可能的,因为起始代码和 NAL 单元类型。它不会增加或减少提供给它的数据量。如果你取出 30k,那么你就放入了 30k。但也许你是用大约 1500 字节的小块(即你收到的网络数据包的有效负载)来完成的。
顺便说一句,当函数声明没有很好地记录时,最好查看 the implementation .
仅仅恢复帧并不足以称之为解析。但是 ffmpeg 中的 H.264 解析器还从 H.264 流中收集更多信息,例如。是否是隔行扫描,果然名不虚传。
但是它不会解码 H.264 流的图像数据。
关于c - FFmpeg:av_parser_parse2 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50992787/