如何解决PeerJS:远程视频轨道处于“静音”状态
我正在尝试使用 peerjs 创建点对点视频聊天。
经过多次尝试,在以下情况下,两个对等方设法从另一个对等方接收视频:
桌面 Chrome --> 桌面 Chrome
桌面 Chrome --> 安卓 Chrome
桌面 Chrome --> 桌面 Safari
桌面 Chrome --> IOS Safari
Android Chrome --> 桌面 Chrome
安卓浏览器 --> 安卓浏览器
Android Chrome --> 桌面 Safari
Android Chrome --> IOS Safari
桌面 Safari --> 桌面 Chrome
但是,对于以下其他情况,接听电话的一方没有收到来电者的视频,或者双方都没有收到对方的视频:
桌面版 Safari --> Android Chrome
桌面 Safari --> IOS Safari
桌面 Safari --> 桌面 Safari
IOS Safari --> 桌面 Chrome
IOS Safari --> Android Chrome
IOS Safari --> 桌面Safari
IOS Safari --> IOS Safari。
远程视频的“静音”状态为“真”。
这是我目前的代码(我仍在努力寻找解决方案):
Caller.js
splitChunks: {
chunks(chunk) {
return chunk.name !== 'background';
},},
Answerer.js
const peer = new Peer(idPeer,{
config: {'iceServers': [
{urls:'stun:stun1.l.google.com:19302'},{urls:'stun:stun2.l.google.com:19302'},{urls:'stun:stun3.l.google.com:19302'},{urls:'stun:stun4.l.google.com:19302'},]},debug : 3
});
peer.on('connection',function(conn) {
clearInterval(intervalOpen);
console.log(conn)
conn.on('open',function() {
demarrerAppel()
conn.on('data',function(data) {
var newData = JSON.parse(data)
if(newData.type && newData.type == 2){
var cpt = 0;
function setDescription() {
if(call.peerConnection.iceGatheringState === "complete"){
call.peerConnection.setRemoteDescription(newData.desc).then(function(){
call.peerConnection.createAnswer({mandatory: { OfferToReceiveAudio: true,OfferToReceiveVideo: true }}).then(function(answer){
console.log(answer)
setTimeout(function(){
call.peerConnection.setLocalDescription(answer).then(function(){
var obj = {
type: "answer",desc : call.peerConnection.localDescription
}
conn.send(JSON.stringify(obj));
})
},2000);
});
});
}
else{
if(cpt < 75){
setTimeout(setDescription,200);
cpt++;
}
}
}
setDescription();
}
if(newData.options){
if(newData.options.video){
$('#video-disabled').hide();
}
else{
$('#video-disabled').css('display','flex');
}
if(newData.options.audio){
$('#audio-disabled').hide();
}
else{
$('#audio-disabled').css('display','flex');
}
}
});
conn.on('error',function(err) {
console.log(err)
});
});
});
peer.on('error',function(err){
console.log(err.type);
})
function demarrerAppel(){
optionsPartageVideo = {
video: {
width: { ideal: 1921 },height: { ideal: 1081 }
},audio: {
echoCancellation: true,noiseSuppression: true,sampleRate: 44100
}
};
navigator.mediaDevices.getUserMedia(optionsPartageVideo).then(function(stream) {
videoPrestataire = stream;
var options = {
'constraints': {
'mandatory': {
'OfferToReceiveAudio': true,'OfferToReceiveVideo': true
},offerToReceiveAudio: 1,offerToReceiveVideo: 1,}
}
call = peer.call($('#peerIdAnswerer').val(),stream,options);
video_caller.muted = true;
video_caller.srcObject = stream;
video_caller.onloadedMetadata = function(e) {
video_caller.play();
};
call.on('stream',function(remoteStream) {
video_answerer.muted = true;
video_answerer.srcObject = remoteStream;
video_answerer.onloadedMetadata = function(e) {
video_answerer.play();
};
});
call.on('close',function() {
});
}).catch(function(err) {
console.log('Failed to get local stream',err);
});
}
我能做什么或我应该改变什么?感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。