5

我想了解视频和音频解码的工作原理,特别是时间同步(如何获得 30fps 视频,如何将其与音频耦合等)。我不想知道所有细节,只想知道它的本质。我希望能够编写实际视频/音频解码器的高级简化。

你能给我指点吗?MPEG2 视频/音频解码器的实际 C/C++ 源代码将是理解我认为的那些事情的最快方法。

4

6 回答 6

6

从有效的编解码器中读取源代码似乎是正确的方法。我建议如下:

http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html

鉴于它在 mpeg.org 网站上被提及,我想说你会在这里找到你需要的东西。

在过去,我有一些时间来解码 mpeg 视频(虽然没有音频),而且原理很简单。包括一些纯图像,一些中间图像相对于最接近的主要图像进行描述,其余的使用最接近的主/中间图像进行描述。

一个时间段,一个图像。但我猜最近的编解码器要复杂得多!

编辑:同步

我不是同步音频和视频方面的专家,但这个问题似乎是使用同步层处理的(参见那里的定义)。

于 2009-02-23T10:21:08.713 回答
3

对于音频/视频同步,基本上,每个视频和音频帧都应该加上时间戳。时间戳通常称为 PTS(演示时间戳)。一旦视频/音频被解码器解码,音频/视频渲染器应该安排帧在正确的时间显示,以便音频/视频同步。

我想你可以参考MPEG2教程的“时序模型”一章了解详细信息。

于 2009-02-23T10:56:43.510 回答
2

您可以浏览ffmpeg的源代码(可通过 svn 获得)或其API 文档

于 2009-02-23T10:21:09.243 回答
1

根据您对 MPEG-2 格式的了解程度,您可能希望先阅读有关它的文章来获得广泛的概述。我的意思是这样的:

MPEG-2 标准初学者指南

MPEG-2 视频压缩

于 2009-02-23T10:36:28.193 回答
1

@帕特里克和尼尔斯

所以你说有时间戳,嘿......我猜这些只是视频部分。对于音频,我猜标题中有足够的信息(例如“每秒样本数”)。这些时间戳多久需要一次?我想音频和视频数据包的隔行扫描确保视频数据总是领先于音频数据或其他什么?

编辑:找到我需要的东西: http ://www.dranger.com/ffmpeg/tutorial01.html

于 2009-02-23T11:56:08.343 回答
1

地狱通,

音频数据的时间戳仍然是必需的,因为音频和视频帧可能不会在同一位置对齐。例如:

V:1000 1040 1080 1120 ... A:990 1013 1036(丢失)1082

您可能需要补偿第一个视频/音频帧之间的偏移。此外,如果可能存在丢包(在视频流期间),您需要视频/音频的时间戳以保持准确同步。

于 2009-02-23T15:53:50.130 回答