8

h.264 硬件压缩卡从捕获的视频中处理 NALU。

我正在尝试将 NALU 包装到 FLV 中,我几乎成功了。

我不知道如何为每个 NALU 填写 FLV 中的 Composition Time 字段。

根据 FLV 规范,http ://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf,E.4.3.1。

CompositionTime 合成时间偏移

有关合成时间的解释,请参见 ISO 14496-12, 8.15.3。FLV 文件中的偏移量始终以毫秒为单位

然后查看ISO 14496-12,8.15.3第 24 和 26 页

提供解码时间和合成时间之间的偏移量。由于解码时间必须小于合成时间,因此偏移量表示为无符号数,因此 CT(n) = DT(n) + CTTS(n) 其中 CTTS(n)是样本 n 的(未压缩)表条目。

我如何知道每个NALU中的DT和CTTS?或者如何在没有DT和CTTS的情况下计算CT?

谢谢

4

2 回答 2

10

对于在 MPEG-2 传输中提供 I 帧、P 帧和 B 帧 NALU 的 MPEG-4 H.264 代码转换器,生成的分组基本流 (PES) 带有表示时间戳 (PTS) 和解码器时间戳(DTS) 时间单位为 1/90000 秒。

NALU 以 DTS 时间戳顺序以重复模式出现,例如

I P B B B P B B B ...  

预期的播放渲染在哪里

I B B B P B B B P ... 

(这种传输策略确保 B 帧桥接的两个帧在 B 帧被处理之前都在解码器中。)

对于 FLV,时间戳(FLV 规范 p.69)以毫秒为单位告知何时应将帧馈送到解码器,即

timestamp = DTS / 90.0

CompositionTime(FLV 规范第 72 页)告诉渲染器何时在显示设备上执行(“合成”)视频帧(以毫秒为单位)进入解码器后;因此它是

compositionTime = (PTS - DTS) / 90.0 

(因为 PTS >= DTS,这个增量永远不会是负数。)

于 2014-03-22T20:09:24.023 回答
2

我想我已经理解了 CTS。它仅适用于 B 帧。因为B帧可能依赖转发帧来解码,所以CTS表示这个B帧什么时候可以解码,通常是指所有依赖的帧都收到了。

于 2011-09-03T09:19:11.937 回答