视频编解码器的解码输出是什么?

Pet*_*ter 3 codec video-encoding

伙计们,

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

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

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

还有时间戳问题.

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

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

预先感谢您的帮助.

问候,彼得

cdh*_*wie 5

以上都不是.

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

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

当您处理的视频数量与视频宽度完全相同时,您已到达该行的末尾.当您处理的视频数量与行数完全相同时,您已到达该帧的末尾.

至于那些字节的解释,这取决于编解码器使用的颜色空间.常用颜色空间是YUV,RGBHSL/HSV.

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

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

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

  • @Peter 似乎有很多 CPU,但事实并非如此。在显卡驱动程序的帮助下,通过将帧缓冲区推送到显卡,通常在一次操作中绘制帧。还有一些显卡支持硬件视频解码,因此软件应用程序实际上会将*压缩*的视频流传送到 GPU,它会在芯片上对其进行解码,然后将其直接呈现到显示器上,几乎不需要 CPU 参与。即使没有这些优化,现代 CPU 也非常快,可以轻松处理此类任务。 (2认同)