【问题标题】:android rtp (nal) header for streaming H264用于流式传输 H264 的 android rtp (nal) 标头
【发布时间】:2011-11-04 11:24:18
【问题描述】:

我正在尝试编写一个应用程序来像 SipDroid 一样流式传输视频,但 SipDroid 只能使用 H263 编解码器流式传输视频。 我想用 H264 编解码器流式传输视频,所以我必须写一个 nal 标头。

我从这里得到了一些信息:http://www.networkdictionary.com/rfc/rfc3984.php?page=0%2C0 我决定使用分段单元进行流式传输(5.8. Fragmentation Units (FUs)(第 8 页))。

我试图创建一个这样的最终标题:

nal header http://www.networkdictionary.com/images/rfc3984f14.gif

指标具有以下值:

indicator http://www.networkdictionary.com/images/rfc3984-3.gif

F = 0, NRI = 2, Type = 28;

和标题:

header http://www.networkdictionary.com/images/rfc3984-4.gif

S=0 (1 at first packet), E = 0 (1 at last packet), R = 0, Type = 1;

数据包的值在客户端和服务器端设置正确。但我无法从这些数据包中读取任何视频流。

服务器是一个简单的 java 服务器,它接收数据并将其写入文件。 我也尝试在 vlc 播放器上显示流,但它也不起作用。

有人知道问题出在哪里,或者在服务器端获取视频流缺少什么吗?

编辑:

好的,我想我已经解决了这个问题。我试图从(vlc 播放器)rtp 流中获取标头值。在此流中,数据包格式取决于帧大小。是对于 1 个数据包足够小的帧大小,因此必须将数据包声明为具有以下值的单个 nal 数据包: NAL 标头:f 0,nri 2,类型 1。如果帧大小大于数据包大小,则数据包拆分,格式看起来就像我在我的问题中发布的那样。

【问题讨论】:

    标签: android stream video-streaming h.264 rtp


    【解决方案1】:

    请注意,RFC 3984 已被 RFC 6184 取代,但这并不影响这个问题。

    理论上你可以有一个 S=1 和 E=1 的 FU 数据包,但这是浪费比特。一个兼容的解码器应该能正确解码它,但我怀疑它是一个测试用例。

    还要确保您在 SDP 的 fmtp 中使用 packetization-mode=1 或接收器不应正确解码(尽管有些可能无论如何)。 FU-A 在默认模式 0 下不可用。

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 2011-08-20
      • 2010-12-13
      • 2011-10-08
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多