繁体   English   中英

用于传输H264的android rtp(nal)标头

[英]android rtp (nal) header for streaming H264

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

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

我试图像这样创建一个nal标题:

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

具有以下指标值:

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

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

和标题:

标题为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.如果帧大小大于数据包大小,则数据包得到拆分,格式看起来像我在我的问题中发布。

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

从理论上讲,你可以得到一个S = 1且E = 1的FU数据包,但这是浪费的比特。 一个兼容的解码器应该正确解码它,但它是一个我怀疑运行良好的测试用例。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM