我正在尝试使用WebRTC创建音频广播应用。为了使它与IE兼容我使用的是来自Attlasian的Teamsys插件。
在互联网上提供的大多数演示中,我在一个页面上看到过两个音频/视频控件。但我正在尝试两页应用程序。一个用于发送者,另一个用于接收者。
我正在使用XHR将流描述发送到另一个用户接收的数据库,并将其用作接收方端对等连接的本地描述。 这是代码:
发件人
function gotStream(stream) {
console.log('Received local stream');
// Call the polyfill wrapper to attach the media stream to this element.
localstream = stream;
audio1 = attachMediaStream(audio1, stream);
pc1.addStream(localstream);
console.log('Adding Local Stream to peer connection');
pc1.createOffer(gotDescription1, onCreateSessionDescriptionError);
}
function gotDescription1(desc) {
pc1.setLocalDescription(desc);
console.log('Offer from pc1 \n' + desc);
console.log('Offer from pc1 \n' + desc.sdp);
$.ajax({
type: "POST",
url: '../../home/saveaddress',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ SDP: desc }),
dataType: "json",
success: function (result) {
if (result) {
console.log('SDP Saved');
}
});
}
function iceCallback2(event) {
if (event.candidate) {
pc1.addIceCandidate(event.candidate,
onAddIceCandidateSuccess, onAddIceCandidateError);
console.log('Remote ICE candidate: \n ' + event.candidate.candidate);
}
}
在Receiver End
var pcConstraints = {
'optional': []
};
pc2 = new RTCPeerConnection(servers, pcConstraints);
console.log('Created remote peer connection object pc2');
pc2.onicecandidate = iceCallback1;
pc2.onaddstream = gotRemoteStream;
$.ajax({
type: "GET",
url: '../../home/getsavedaddress',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
if (result) {
gotDescription1(result);
}
},
error: function () {
}
});
function gotDescription1(desc) {
console.log('Offer from pc1 \n' + desc.sdp);
console.log('Offer from pc1 \n' + pc2);
pc2.setRemoteDescription(new RTCSessionDescription(desc));
pc2.createAnswer(gotDescription2, onCreateSessionDescriptionError,
sdpConstraints);
}
使用这个我从服务器获取SDP,vedio标签现在有一个源。但视频并没有显示任何东西。一条线索...... 我也在使用asp.net for site,我是否需要在这个项目中使用node js。
由于
答案 0 :(得分:1)
你的问题是缺乏信息,但我会就此发表意见。
你支持Trickle ICE吗?看来你可能发送的SDP太快了!
当你做
时pc1.setLocalDescription(desc);
ICE候选人开始根据您的代码中配置的TURN和STUN服务器(服务器参数)收集:
pc2 = new RTCPeerConnection(servers, pcConstraints);
尽管如此,它们尚未包含在您的SDP中。在localDescription对象中设置媒体端口之前可能需要几毫秒。您的第一个错误是您从gotDescription1而不是post setLocalDescription SDP发送“desc”对象。 SDP还没有合适的媒体端口。
在您的代码中,您无需等待即可立即发送SDP。我的猜测是SDP还没有完成,你不支持Trickle。因此,即使信号看起来很好,也不会看到任何媒体流动。