民间,
我想知道是否有人可以向我解释视频解码的输出究竟是什么。假设它是MP4容器中的H.264流。
通过在屏幕上显示内容,我猜解码器可以提供两种不同类型的输出:
还有时间戳问题。
您能否请教我或指出解码器生成的内容以及视频客户端如何使用此信息在屏幕上显示内容的正确链接?
我打算下载VideoLAN源并对其进行检查,但有些解释会有所帮助。
提前感谢您的帮助。
此致 彼得
答案 0 :(得分:5)
以上都不是。
通常输出将是仅包含颜色数据的字节流。 X,Y位置由视频的尺寸暗示。
换句话说,前三个字节可能将颜色值编码为(0,0),第二个三字节编码值为(0,1),依此类推。某些格式可能使用四个字节组,或者甚至是多个不添加到一个字节的位 - 例如,如果每个颜色分量使用5位,并且您有三个颜色分量,则每个像素为15位。为了提高效率,可以将其填充到16位(正好是两个字节),因为这样可以使CPU更好地处理数据。
如果您处理的视频数量与视频广泛一样多,那么您已到达该行的末尾。当您处理的视频数量与行数一样多时,您已达到该帧的结尾。
至于那些字节的解释,这取决于编解码器使用的颜色空间。常见颜色空间为YUV,RGB和HSL/HSV。
它在很大程度上取决于使用的编解码器以及它支持的输入格式;输出格式通常仅限于可接受输入的格式集。
时间戳数据有点复杂,因为它可以在视频流本身或容器中编码。至少,流需要帧速率;由此,可以通过计算已经解码了多少帧来确定每帧的时间。其他方法,如AVI采用的方法,是在文件末尾的每第N帧(或仅关键帧)包括字节偏移,以实现快速搜索。 (否则,您需要将每个帧解码到您正在寻找的时间戳,以确定该帧在文件中的位置。)
如果您正在考虑音频数据,请注意,对于大多数编解码器和容器,音频和视频流是独立的,彼此之间一无所知。在编码期间,将两个流写入容器格式的软件执行称为 muxing 的过程。它将以N秒的块的形式写出数据,在流之间交替。这允许正在读取流的人获得N秒的视频,然后是N秒的音频,然后是另外N秒的视频,依此类推。 (也可能包含多个音频流 - 这种技术经常用于将视频,英语和西班牙语音轨混合到一个包含三个流的文件中。)实际上,即使是字幕也可以与其他字段进行复用流。
答案 1 :(得分:0)
cdhowie得到了大部分内容。 当涉及到时间戳时,MPEG4容器包含每个帧的表,告诉视频客户端何时显示每个帧。您应该查看MPEG4的规范。你通常不得不支付这个费用,但我绝对可以从地方下载。