【问题标题】:What is the decoded output of a video codec?视频编解码器的解码输出是什么?
【发布时间】:2011-08-17 22:51:04
【问题描述】:

伙计们,

我想知道是否有人可以向我解释视频解码的输出到底是什么。假设它是 MP4 容器中的 H.264 流。

从屏幕上显示的内容来看,我猜解码器可以提供两种不同类型的输出:

  1. 点 - 位置的 (x, y) 坐标和像素的 (R, G, B) 颜色
  2. 矩形的矩形 (x, y, w, h) 单位和要显示的 (R, G, B) 颜色

还有时间戳的问题。

能否请您赐教或指出正确的链接,了解解码器生成的内容以及视频客户端如何使用此信息在屏幕上显示内容?

我打算下载 VideoLAN 源并检查它,但一些解释会有所帮助。

提前感谢您的帮助。

问候, 彼得

【问题讨论】:

    标签: video-encoding codec


    【解决方案1】:

    以上都不是。

    通常输出将是只包含颜色数据的字节流。 X,Y 位置由视频的尺寸暗示。

    换句话说,前三个字节可能编码 (0, 0) 处的颜色值,后三个字节编码 (0, 1) 处的值,依此类推。某些格式可能使用四个字节组,甚至是加起来不等于一个字节的多个位 - 例如,如果您为每个颜色分量使用 5 位并且您有三个颜色分量,则每像素 15 位。这可能会被填充到 16 位(正好是两个字节)以提高效率,因为这将以 CPU 可以更好地处理数据的方式对齐数据。

    当您处理的值与视频宽度完全相同时,您已经到达该行的末尾。当您处理的行数与视频的高位完全相同时,您已经到达该帧的末尾。

    对于那些字节的解释,这取决于编解码器使用的色彩空间。常见的色彩空间有YUVRGBHSL/HSV

    这在很大程度上取决于使用的编解码器及其支持的输入格式;输出格式通常限于可接受的输入格式集。

    时间戳数据有点复杂,因为它可以在视频流本身或容器中编码。至少,流需要一个帧率;由此,每帧的时间可以通过计算已经解码的帧数来确定。其他方法,如 AVI 采用的方法,是在文件末尾为每第 N 帧(或仅关键帧)包含一个字节偏移量,以实现快速查找。 (否则,您需要将每一帧解码到您要查找的时间戳,以确定该帧在文件中的位置。)

    如果您也在考虑音频数据,请注意,对于大多数编解码器和容器,音频和视频流是独立的,彼此一无所知。在编码期间,将两个流写入容器格式的软件会执行一个称为 muxing 的过程。它将以 N 秒为单位写出数据,在流之间交替。这允许任何正在阅读流的人获得 N 秒的视频,然后是 N 秒的音频,然后是另一个 N 秒的视频,依此类推。 (也可能包含多个音频流——这种技术经常用于将视频、英语和西班牙语音轨混合到一个包含三个流的文件中。)事实上,即使是字幕也可以与另一个混合流。

    【讨论】:

    • cdhowie。非常感谢您的解释。我有一个后续问题。根据您的描述,视频客户端必须独立绘制每一帧。考虑到连续帧之间的变化非常小,这不会消耗太多 CPU/GPU 吗?是否留给视频客户端比较前一帧和下一帧,确定需要重绘的像素并在屏幕上绘制该部分?
    • @Peter 似乎有很多 CPU,但事实并非如此。通常在显卡驱动程序的帮助下将帧缓冲区推送到显卡,从而在一次操作中绘制帧。还有支持硬件视频解码的显卡,因此软件应用程序实际上会将压缩视频流传送到 GPU,然后它会在芯片上对其进行解码并直接将其渲染到显示器上,几乎不需要没有CPU参与。即使没有这些优化,现代 CPU 也非常快,可以轻松处理此类任务。
    【解决方案2】:

    cdhowie 得到了大部分。 当涉及到时间戳时,MPEG4 容器包含每个帧的表格,告诉视频客户端何时显示每个帧。您应该查看 MPEG4 的规范。我认为您通常需要为此付费,但绝对可以从其他地方下载。

    http://en.wikipedia.org/wiki/MPEG-4_Part_14

    【讨论】:

    • Adobe 的 F4V 视频文件格式是 MPEG4 的超集,可以从download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf免费下载规范
    • 詹姆斯。感谢你的帮助。一个后续问题。我看到视频客户端有两种方法可以进行处理。 1)始终查看时间表,“寻找”到当前时间的位置,并处理解码器输出。 2) 继续获取下一帧并继续处理,但只有当它意识到它在时间上落后时才查找时间表。视频客户端使用的一般方法是什么?
    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多