[英]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.