确定 H.264 帧的持续时间

Posted

技术标签:

【中文标题】确定 H.264 帧的持续时间【英文标题】:Determine the duration of H.264 frame 【发布时间】:2017-04-21 08:44:42 【问题描述】:

单个 RTMP 视频消息通常带有一个 H.264 帧和时间戳增量。通常时间戳增量表示单个视频帧的持续时间,例如。 25FPS 视频为 40 毫秒。这允许通过计算流中 RTMP 视频增量的总和来计算流的持续时间。

但是,对于某些编码器(例如 Wirecast),有时 RTMP 视频消息仅包含一个 H.264 帧,但时间戳增量是单个视频帧持续时间的倍数(例如 120 毫秒、160 毫秒等)。

这是否意味着在某些情况下,单个 H.264 帧可以代表多个视频帧?哪个 H.264 帧元信息(字段)代表了这一点?如何区分所选帧的时间戳增量应该与单个视频帧的持续时间不同?我想正确计算单个 H.264 帧的演示时间戳。

【问题讨论】:

【参考方案1】:

这些可能是丢帧。对于 RTMP,您应该始终假设可变帧速率(无论 onMetadata 怎么说)

【讨论】:

谢谢!这说得通。是否有可能用一些人工 H.264 帧(例如,带有指示丢失帧的更高时间戳的克隆帧,或通过生成填充数据帧)来填补空白(丢帧)?这将是一种保持恒定帧速率的方法。 这是可能的,但工作量很大。 (基本上重写比特流)最好花时间修复播放器以正确播放可变帧速率流。

以上是关于确定 H.264 帧的持续时间的主要内容,如果未能解决你的问题,请参考以下文章

如何从 H.264 帧和音频帧的集合创建 mp4 文件?

python小工具------将H264/H265码流文件转为一帧一帧的JPEG文件

python小工具------将H264/H265码流文件转为一帧一帧的JPEG文件

H 264简单介绍

android 和 IOS 上加载啥 h.264 格式?

使用 Broadway.js 解码原始 h.264