我想了解视频和音频解码的工作原理,特别是时间同步(如何获得 30fps 视频,如何将其与音频耦合等)。我不想知道所有细节,只想知道它的本质。我希望能够编写实际视频/音频解码器的高级简化。
你能给我指点吗?MPEG2 视频/音频解码器的实际 C/C++ 源代码将是理解我认为的那些事情的最快方法。
从有效的编解码器中读取源代码似乎是正确的方法。我建议如下:
http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html
鉴于它在 mpeg.org 网站上被提及,我想说你会在这里找到你需要的东西。
在过去,我有一些时间来解码 mpeg 视频(虽然没有音频),而且原理很简单。包括一些纯图像,一些中间图像相对于最接近的主要图像进行描述,其余的使用最接近的主/中间图像进行描述。
一个时间段,一个图像。但我猜最近的编解码器要复杂得多!
编辑:同步
我不是同步音频和视频方面的专家,但这个问题似乎是使用同步层处理的(参见那里的定义)。
您可以浏览ffmpeg的源代码(可通过 svn 获得)或其API 文档。
@帕特里克和尼尔斯
所以你说有时间戳,嘿......我猜这些只是视频部分。对于音频,我猜标题中有足够的信息(例如“每秒样本数”)。这些时间戳多久需要一次?我想音频和视频数据包的隔行扫描确保视频数据总是领先于音频数据或其他什么?
编辑:找到我需要的东西: http ://www.dranger.com/ffmpeg/tutorial01.html
地狱通,
音频数据的时间戳仍然是必需的,因为音频和视频帧可能不会在同一位置对齐。例如:
V:1000 1040 1080 1120 ... A:990 1013 1036(丢失)1082
您可能需要补偿第一个视频/音频帧之间的偏移。此外,如果可能存在丢包(在视频流期间),您需要视频/音频的时间戳以保持准确同步。