2

Android 将播放我从 rtp 服务器提供的音频和视频(AAC、h263),但是当我提供 AAC/H264 流时,我只得到音频而没有视频。

在工作场景中,Android 为两个轨道 id 发出 SETUP 命令,但 H264,android 从不为第二个 Video 轨道发出 SETUP 命令。

我的 SDP 文件是否正确?我认为 profile-id 和 sprops 是正确的,因为它们是直接从 H264 编码器的 sps 和 pps NAL 复制而来的。视频是baseline@2.1

Android 是否无法响应或识别第二首曲目?

如果我使用 live555 单独流式传输视频文件,它可以正常工作,并且我已经将它生成的 SDP 文件与我自己的文件进行了比较。

有任何想法吗?谢谢

H264/AAC SDP 文件:

v=0
o=xxx IN IP4 192.168.13.43
s=live.3gp
u=http:///
e=admin@
c=IN IP4 0.0.0.0
b=AS:187
t=0 0
a=control:rtsp://192.168.13.43:555/live.3gp
a=isma-compliance:1,1.0,1
a=range:npt=0-  2630.336000
m=audio 0 RTP/AVP 97
a=rtpmap:97 MP4A-LATM/44100/2
a=control:rtsp://192.168.13.43:555/live.3gp/trackID=1
a=fmtp:97 profile-level-id=41; cpresent=0; config=400024203fc0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=control:rtsp://192.168.13.43:555/live.3gp/trackID=2
a=cliprect:0,0,256,432
a=framesize:96 432-256
a=fmtp:96 packetization-mode=1; profile-level-id=42C015;sprop-parameter-   sets=Njc0MkMwMTVGNDBEODQzNjAyMjAwMDAwMDMwMDIwMDAwMDAzMDNDMUUzMDY1NA==,NjhDRTA0NzI=

由 live555 为在 Android 上显示的相同视频文件生成的 SDP 文件:

v=0
o=- 1303401850159891 1 IN IP4 192.168.13.58
s=H.264 Video, streamed by the LIVE555 Media Server
i=live.3g
t=0 0
a=tool:LIVE555 Streaming Media v2011.01.19
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Server
a=x-qt-text-inf:baseCasterCap.264
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:500
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42C015;sprop-parameter-sets=Z0LAFfQNhDYCIAAAAwAgAAADA8HjBlQ=,aM4Ecg==
a=control:track1
4

2 回答 2

1

sprop-parameter-sets 中不应有制表符或空格(可能是复制/粘贴错误)。

Android(或在那里使用的播放器)可能不支持打包模式1。需要0;1 是可选的。

a=framesize 和 a=cliprect - 它们不是标准的 H.264,但可能不是问题。

我假设端口 0 对您的使用来说是正常的(因为音频有效)?在 offer-answer 中,端口 0 将是被拒绝的流(在 answer 中;在 offer 中表示禁用的流)。

我已经看到实现(我在看你,Grandstream!)坚持在 H264 fmtp 的分号后使用空格(他们错了) - 你有一个混合物。

profile-level-id 中的“C0”是否正确?增加了约束;在没有限制的情况下尝试一下,看看会有什么反应。(您仍然可以发送比指示的 SDP 更受限制的流。)

于 2011-04-24T21:37:33.853 回答
1

感谢您的帮助 Jesup,非常感谢。

问题是 sprop 参数,当我为您复制并粘贴第二个 SDP 文件时,我注意到了。

我用来为我的测试进行 base64 计算的编码器是用于字符数据,而不是二进制数据。所以 65 被解释为字符 6 和字符 5,并被编码,而不是单个数字(我猜是 ascii 中的 A)。那有意义吗?我犯了一个愚蠢的错误。再次感谢伊恩

于 2011-04-25T23:49:11.167 回答