【发布时间】:2020-12-01 12:04:35
【问题描述】:
我正在尝试开发一个应用程序,用户可以在其中使用 WebRTC 技术相互进行视频通话并共享他们的屏幕。我已经成功使用视频通话或屏幕共享应用程序,现在我正在尝试使其能够在同一个 RTCPeerConnection 内的通话期间通过按钮单击在 getUserMedia 和 getDisplayMedia 之间切换,但它不起作用。
这就是我认为它可以工作的方式:
function onLogin(success) {
var configuration = { offerToReceiveAudio: true, offerToReceiveVideo: true, "iceServers" : [ { "url" : "stun:stun.1.google.com:19302" } ] };
myConnection = window.RTCPeerConnection ? new RTCPeerConnection(configuration, { optional: [] }) : new RTCPeerConnection(configuration, { optional: [] });
myConnection.onicecandidate = function (event) {
console.log("onicecandidate");
if (event.candidate) send({ type: "candidate", candidate: event.candidate });
};
myConnection.ontrack=function(e){
try{remoteVideo.src = window.webkitURL?window.webkitURL.createObjectURL(e.streams[0]):window.URL.createObjectURL(e.streams[0])}
catch(err){remoteVideo.srcObject=e.streams[0]}
}
myConnection.ondatachannel=openDataChannel
openDataChannel();
startAVStream();
//startSStream()
};
function startAVStream(enable){
if(sStream)sStream.getTracks().forEach( function (track) {
try{myConnection.removeTrack( track, sStream );}
catch(e){}
} );
navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(s => {
if(!avStream){
avStream = s;
avStream.getTracks().forEach( function (track) {
myConnection.addTrack( track, avStream );
} );
}
}, function (error) { console.log(error); });
}
function startSStream(enable){
if(avStream)avStream.getTracks().forEach( function (track) {
try{myConnection.removeTrack( track, avStream );}
catch(e){}
} );
navigator.mediaDevices.getDisplayMedia({ video: true }).then(s => {
if(!sStream){
sStream = s;
sStream.getTracks().forEach( function (track) {
myConnection.addTrack( track, sStream );
} );
}
}, function (error) { console.log(error); });
}
谁能告诉我如何在同一个 RTCPeerConnection 内的轨道之间切换,或者我应该创建 2 个单独的 RTCPeerConnection - 一个用于视频/音频流,另一个用于屏幕共享?
任何帮助表示赞赏!谢谢!
【问题讨论】:
标签: stream webrtc getusermedia