收到视频流但未在WebRTC中播放

时间:2015-01-13 08:49:53

标签: sockets webrtc

我正在尝试使用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。

由于

1 个答案:

答案 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。因此,即使信号看起来很好,也不会看到任何媒体流动。