android - H.264 实时流,NAL 单位的时间戳?

标签 android flash streaming real-time h.264

我正在尝试构建一个实时流式传输 Android 手机捕获的视频和音频的系统。在android端使用MediaRecorder抓取视频和auido,然后直接推送到一个用python写的服务器上。客户应该使用他们的浏览器访问这个实时提要,所以我使用 flash 实现了系统的流媒体部分。现在视频和音频内容都出现在客户端,但问题是它们不同步。我确定这是由闪存中错误的时间戳值引起的(目前我将一帧视频的 ts 增加 60 毫秒,但显然这个值应该是可变的)。

音频在安卓手机上是编码成amr的,所以我很清楚amr的每一帧是20ms。但是,视频并非如此,它被编码为 H.264。要将它们同步在一起,我必须确切地知道 H.264 的每个帧持续多少毫秒,以便我可以在稍后使用 Flash 传送内容时为它们添加时间戳。我的问题是这种信息在 H.264 的 NAL 单元中可用吗?我试图在 H.264 标准中找到答案,但那里的信息实在太多了。

有人可以给我指出正确的方向吗?谢谢。

最佳答案

时间戳不在 NAL 单元中,但通常是 RTP 的一部分. RTP/RTCP 还负责媒体同步。

RTP payload format for H.264您可能也会感兴趣。

如果您不使用 RTP,您是否只是通过网络发送原始数据单元?

关于android - H.264 实时流,NAL 单位的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5947795/

相关文章:

http - 使用 NodeJS 流式传输 Http 响应

java - Android - 更新大量 TextView

java - 在我自己的 Android 应用程序中嵌入 openVpn 客户端

ruby-on-rails - Rails/Bootstrap - Flash 通知 :success is now red and not green?

javascript - jquery.flash 插件在 IE6 中不工作

video - FFMPEG 间歇性故障读取实时 RTMP 流

android - 使用自定义 Intent 操作仅在特定应用程序上下文中启动 Activity

Android Room,SQLite - 出乎意料,得到了 'COLUMN'

Flash AS3 EventDispatcher-以任何方式获取已注册监听器的列表?

c++ - 在写入高带宽数据流时如何最好地管理 Linux 的缓冲行为?