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