答案SDP中缺少什么(从网络浏览器到安卓设备)



我已经自定义了Apprtc项目。 我可以从用户呼叫,其他用户也可以应答呼叫或拒绝呼叫

当我从安卓到网络浏览器时,我无法在安卓设备中看到网络浏览器的视频源,但我只能在网络浏览器中看到安卓的视频源。

网页浏览器版本:Chrome 58(桌面版) 安卓版:棉花糖

提供SDP:(来自安卓)

v=0 o=- 7916385280226465055 2 英寸 IP4 127.0.0.1

s=-

t=0 0

a=组:捆绑音频视频

a=msid-semantic: WMS ARDAMS___

m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 102 0 8 105 13 126

c=IN IP4 0.0.0.0

a=rtcp:9 in IP4

0.0.0.0a=ice-ufrag:xKDP

a=ice-pwd:/hAtH4MAzGA/If6Fn+sT6Okj

a=ICE-选项:重新提名

A=指纹:SHA-256 35

:5A:08:8D:FA:18:41:B9:A6:E2:B4:9A:A7:EE:1E:61:CA:38:BC:5B:98:9F:D1:3E:1F:51:79:C8:F3:63:00:F8A=设置:ActPass

A=中音:音频

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

a=森德雷克

a=RTCP-复用器

a=RTPMAP:111 作品/48000/2

a=RTCP-FB:111 Transport-CC

a=FMTP:111 minptime=10;useinbandfec=1

a=rtpmap:103 ISAC/16000

a=rtpmap:9 G722/8000

a=rtpmap:102 ILBC/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=RTPMAP:105 CN/16000

a=RTPMAP:13 CN/8000

a=RTPMAP:126 电话事件/8000

a=ssrc:1281015102 cname:wYjcft96aVDGkQzC

a=ssrc:1281015102 msid:ARDAMS___ ARDAMSa0

a=ssrc:1281015102 mslabel:ARDAMS___

a=ssrc:1281015102 label:ARDAMSa0

m=视频 9 UDP/TLS/RTP/SAVPF 100 101 116 117 96 97 98

c=IN IP4 0.0.0.0

a=rtcp:9 in IP4

0.0.0.0a=ice-ufrag:xKDP

a=ice-pwd:/hAtH4MAzGA/If6Fn+sT6Okj

a=ICE-选项:重新提名

a=指纹:SHA-256 35

:5A:08:8D:FA:18:41:B9:A6:E2:B4:9A:A7:EE:1E:61:CA:38:BC:5B:98:9F:D1:3E:1F:51:79:C8:F3:63:00:F8A=设置:ActPass

A=中:视频

A=extmap:2 urn:ietf:params:rtp-hdrext:toffset

a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time

A=extmap:4 urn:3GPP:视频方向

a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

a=分机:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay

a=森德雷克

a=RTCP-复用器

a=RTCP-rsize

a=rtpmap:100 VP8/90000

a=RTCP-FB:100 CCM FIR

a=rtcp-fb:100 nack

a=rtcp-fb:100 nack pli

a=RTCP-FB:100 GOOG-remb

a=RTCP-FB:100 运输-CC

a=rtpmap:101 VP9/90000

a=RTCP-FB:101 CCM FIR

a=rtcp-fb:101 nack

a=rtcp-fb:101 nack pli

a=RTCP-FB:101 GOOG-remb

a=RTCP-FB:101 运输-CC

a=RTPMAP:116 红色/90000

a=RTPMAP:117 ULPFEC/90000

a=RTPMAP:96 RTX/90000

a=FMTP:96 apt=100

a=RTPMAP:97 RTX/90000

a=FMTP:97 apt=101

a=RTPMAP:98 RTX/90000

a=FMTP:98 apt=116

a=ssrc-group:FID 2034101263 3486873766

a=ssrc:2034101263 cname:wYjcft96aVDGkQzC

a=ssrc:2034101263 msid:ARDAMS___ ARDAMSv0

a=ssrc:2034101263 mslabel:ARDAMS___

a=ssrc:2034101263 label:ARDAMSv0

a=ssrc:3486873766 cname:wYjcft96aVDGkQzC

a=ssrc:3486873766 msid:ARDAMS___ ARDAMSv0

a=ssrc:3486873766 mslabel:ARDAMS___

a=ssrc:3486873766 label:ARDAMSv0

回答 SDP:(从网络浏览器)

v=0

o=莫兹拉...THIS_IS_SDPARTA-52.0.2 6548308332703463210 0 英寸 IP4 0.0.0.0

s=-

t=0 0

a=指纹:SHA-256 E6:0F:6A:A6:35:E0:B3:8E:7A:0E:2E:20:A9:AB:0B:CA:1C:6D:33:6C:B6:D1:E4:2D:39:87:1E:93:4E:ED:BB:CF

a=组:捆绑音频视频

a=冰选项:涓流

a=msid-semantic:WMS *

m=audio 9 UDP/TLS/RTP/SAVPF 111 126

c=IN IP4 0.0.0.0

a=仅接收

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

a=FMTP:111 最大播放回放速率=48000;立体声=1;useinbandfec=1

a=FMTP:126 0-15

a=ice-pwd:8a4fad1c837809d3ee952922dbe2b927

a=冰-ufrag:ab799d79

A=中音:音频

a=RTCP-复用器

a=RTPMAP:111 作品/48000/2

A=RTPMAP:126 电话事件/8000/1

a=设置:活动

a=ssrc:2269112214 cname:{b1e7d024-d327-4788-a5b1-a1b8291b5c8d}

m=视频 9 UDP/TLS/RTP/SAVPF 100

c=IN IP4 0.0.0.0

a=仅接收

a=FMTP:100 max-fs=12288;最大-fr=60

a=ice-pwd:8a4fad1c837809d3ee952922dbe2b927

a=冰-ufrag:ab799d79

A=中:视频

a=rtcp-fb:100 nack

a=rtcp-fb:100 nack pli

a=RTCP-FB:100 CCM FIR

a=RTCP-FB:100 GOOG-remb

a=RTCP-复用器

a=rtpmap:100 VP8/90000

a=设置:活动

a=ssrc:1613714278 cname:{b1e7d024-d327-4788-a5b1-a1b8291b5c8d}

在变量 peerconnection.cc current_tracks 未填充:

void PeerConnection::UpdateRemoteStreamsList(
const cricket::StreamParamsVec& streams,
bool default_track_needed,
cricket::MediaType media_type,
StreamCollection* new_streams) {
TrackInfos* current_tracks = GetRemoteTracks(media_type);
// Find removed tracks. I.e., tracks where the track id or ssrc don't match
// the new StreamParam.
auto track_it = current_tracks->begin();
while (track_it != current_tracks->end()) {

您的浏览器SDP具有a=recvonly属性,这意味着本地流不会添加到您的对等连接中。如果您的浏览器正在向远程发送音频/视频轨道并希望接收远程流,那么它应该在 AnswerSDP 中a=sendrec

通过查看您的答案SDP,它没有携带任何流/轨道。
可疑的问题可能是,您在浏览器中创建答案之前没有添加流。
您可以通过打开chrome://webrtc-internals/来检查对等连接 API 调用

对等连接 API 调用应在浏览器/应答端如下所示

pc = new RTCPeerConnection({"iceServers": [{"urls": "stun:stun.l.google.com:19302"}]}, 
{"optional": [{"DtlsSrtpKeyAgreement": true}]
}); 
pc.setRemoteDescription(
new RTCSessionDescription(jsep),
function() {
console.log(' OFFER accepted ');
}, function(e) {
console.log(' OFFER Failed ', e);
});
pc.addStream(stream);
pc.createAnswer(function(answer) {
console.log('got answer', answer);
pc.setLocalDescription(answer, 
function() {
console.log('set local description sucesses ');
}, function(e) {
console.log('set local description failed ', e);
});
// Send the answer to other user endpoint
}, function() {
console.log('Error: Unable to create answer');
}, {
'mandatory': {
'OfferToReceiveAudio': true, 
'OfferToReceiveVideo': true, 
}
});
}

因此,您的答案SDP应包含a=sendonly行而不是a=recvonly行。

扩展其他答案:只有在确保本地流已被获取并添加到RTCPeerConnection之后,您才应该发送连接信号。

navigator.mediaDevices.getUserMedia({
audio: false, // request access to local microphone
video: true  // request access to local camera
}).then(function (local_stream) {
// display preview from the local camera & microphone using local <video> MediaElement
var media_element = document.getElementById('local_video');
media_element.srcObject = local_stream;
media_element.play();
// add local camera stream to peer_connection ready to be sent to the remote peer
peer_connection.addStream(local_stream);
signal_init();
}).catch(console.log);

其中signal_init是信令/连接回调。

相关内容

  • 没有找到相关文章

最新更新