Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过rtp流发送Android h264捕获_Android_Voip_H.264_Asterisk_Rtp - Fatal编程技术网

通过rtp流发送Android h264捕获

通过rtp流发送Android h264捕获,android,voip,h.264,asterisk,rtp,Android,Voip,H.264,Asterisk,Rtp,我正在为android编写一个rtp视频流,它从android本地套接字读取h264编码数据并打包。问题是,我做到了,但我在客户端(Voip)中不断得到黑框 通信方式如下:Android->Asterisk->Jitsi(Osx)(反之亦然) 有几件事我还不明白: 1) Android的mediarecorder给了我一个原始的h264流,我怎么知道NAL基于该流何时开始/结束?它没有任何0x000001模式,但它有一个0x0000(我假设它是一个分隔符) 编辑: 添加更多信息。这是输入缓冲区的

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

通信方式如下:Android->Asterisk->Jitsi(Osx)(反之亦然)

有几件事我还不明白:

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

编辑:

添加更多信息。这是输入缓冲区的2(,)次不同读取(按顺序)。如果我没有弄错,那么应该使用前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]

下面是来自asterisk的流的捕获(它来自Android)。安卓设备是带有安卓ICS的华硕Transform Prime

我正在发送sdp中的打包模式(
1
)和配置文件级别id(
42801e
),我也尝试发送sprops(sps:
Z0KAHpWgUHxA
,psp:
aM48gA==
)参数,但没有任何更改

干杯。

1)没有“android h264流格式”。如果使用RTP作为传输协议,则应遵循打包。RTP有效负载格式的启动代码不存在。RTP数据包中包含的内容完全取决于数据包化模式,该模式指定NAL单元是否可以聚合、分段等。有关更多信息,请阅读上的RFC部分。打包模式通常通过SDP进行通信

2) 时间戳是RTP报头的一部分。NAL单元的长度同样取决于打包模式


3) 你说有记号是什么意思?您的意思是设置了RTP标记位吗?如果是这样,这必须再次遵循RFC中规定的规则。

Android发送一个必须解析的原始h264流(AFAIU),但我如何知道NAL应该从哪里开始/结束?这就是我的观点,我想我遗漏了一些东西。你确定它没有使用RTP吗?好吧,它没有使用RTP。我也没有找到任何文件说明这一点。