我想了解视频和音频解码的工作原理,特别是定时同步(如何获取30fps视频,如何将其与音频耦合等)。我不想知道所有细节,而只是本质。我希望能够写出实际的视频/音频解码器的高级简化。
您能给我指点吗? MPEG2视频/音频解码器的实际C / C ++源代码将是理解我认为的最快方法。
您可以浏览ffmpeg的源代码(可通过svn访问)或其API documentation。
从有效的编解码器中读取源代码似乎是正确的方法。我建议以下内容:
http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html
鉴于mpeg.org网站上已提及,我想您会在这里找到所需的东西。
过去我花了一些时间来解码mpeg视频(虽然没有音频),并且原理很简单。其中包括一些纯图像,相对于最接近的主要图像描述了一些中间图像,而使用最接近的主要/中间图像描述了其余的图像。
一个时隙,一张图像。但是我想最近的编解码器要复杂得多!
编辑:同步
我不是音频和视频同步专家,但是似乎可以通过使用同步层来解决此问题(有关定义,请参见there。
对于音频/视频同步,基本上,每个视频和音频帧都应加上时间戳。时间戳通常称为PTS(演示时间戳)。视频/音频逐个解码器解码后,音频/视频渲染器应安排在正确的时间显示该帧,以使音频/视频同步。
我认为您可以参考Timing Model的“ MPEG2 Tutorial”一章的详细信息。
取决于您对MPEG-2格式的了解程度,您可能需要先阅读有关它的文章来获得广泛的概述。我的意思是这样的:
@ Patric和Nils
所以您说有时间戳记,嘿嘿。。。这些只是我想的视频部分。对于音频,我猜标题中有足够的信息(例如“每秒采样数”)。这些时间戳需要多久一次?我认为音频和视频数据包的隔行扫描可确保视频数据始终领先于音频数据或其他东西?
地狱,
仍然需要音频数据的时间戳,因为音频和视频帧可能不在同一位置对齐。例如:
V:1000 1040 1080 1120 ...A:990 1013 1036(丢失)1082
您可能需要补偿第一个视频/音频帧之间的偏移。此外,如果可能有丢包(视频流期间),则需要同时包含视频/音频的时间戳以保持准确的同步。