其他分享
首页 > 其他分享> > 通过rtp流发送Android h264捕获

通过rtp流发送Android h264捕获

作者:互联网

我正在为Android写一个rtp视频流,它从Android本地套接字读取h264编码数据并将其打包.问题是我做到了但是我一直在客户端获得黑框(Voip).

沟通如下:Android – >星号 – > Jitsi(Osx)(和反向)

还有一些我还没有理解的东西:

1)Android的mediarecorder给了我一个原始的h264流,我怎么知道NAL何时基于该流开始/结束?它没有任何0x000001模式,但它确实有一个0x0000(我假设它是一个分隔符)

编辑:

添加更多信息.这些是输入缓冲区的2(first,second)个不同读取(按顺序).如果我做对了,前4个字节应该用于获得NALU长度而第5个字节(索引4)是NALU头.

我将这里复制字节的值以备将来使用:

1) 0 0 12 114 101 -72 4 25 -15 -1 -121 -53 .....

   length = (114&0xFF) + (12&0xFF)*256 + (0&0xFF)
   length -> 3186

   forbidden = 101 & 0x80
   forbidden -> 0

   nri = 101 & 0x60
   nri -> 96

   nal_unit_type = 101 & 0x1F
   nal_unit_type -> 5


2) 0 0 1 -93 97 -32 32 103 -14 93 -1 .... 

   length = (-93&0xFF) + (1&0xFF)*256 + (0&0xFF)
   length -> 419

   forbidden = 97 & 0x80
   forbidden -> 0

   nri = 97 & 0x60
   nri -> 96

   nal_unit_type = 97 & 0x1F
   nal_unit_type -> 1

这个对吗?

2)如何从该流中获取NALu时间戳及其长度?

3)由于某种原因,数据包被标记(即使我取消设置标记). (如果你检查pcap文件)[修复:我没有为每个数据包使用相同的SSCR]

这是来自星号的流的pcap捕获(来自Android). Android设备是带有Android ICS的Asus Transform Prime.

我在sdp中发送packetization-mode(1)和profile-level-id(42801e),我也尝试发送sprops(sps:Z0KAHpWgUHxA,psp:aM48gA ==)参数,但没有任何改变.

干杯.

解决方法:

1)没有“android h264流格式”.如果RTP用作传输协议,则分组化应遵循RFC6184. RTP有效载荷格式不存在起始码. RTP数据包中包含的内容完全取决于分组模式,该模式指定NAL单元是否可以聚合,分段等.有关详细信息,请阅读packetization modes的RFC部分.分组模式通常通过SDP进行通信.

2)时间戳是RTP头的一部分. NAL单元的长度再次取决于分组化模式.

3)标记是什么意思?你的意思是RTP标记位已设置?如果是这样,这又必须遵循RFC中规定的规则.

标签:asterisk,android,voip,h-264,rtp
来源: https://codeday.me/bug/20191008/1871356.html