提问人:Tobic 提问时间:10/17/2023 更新时间:10/19/2023 访问量:93
为什么在 webRtc 中为连接 FF->Edge 或 Chrome 生成“mute”事件,而不是在 FF->FF 连接中生成
Why 'mute' event is generated in webRtc for connection FF->Edge or Chrome and isn't generated in FF->FF connection
问:
我已经实现了 peer1(开始连接)和 peer2 之间的 webRtc 连接。
Peer1 - 是 Firefox v.112。
如果 peer2 = Firefox 也一样,则没有问题。
如果 peer2 = Ms Edge v.118 或 Chrome v.117,那么我观察到 2 种情况:
如果我没有在第 (*) 行中设置断点 - 请参阅下面的代码,则 peer2 获取事件:
(audio)、
(video) -- 没关系,
(视频) !!视频和音频无法播放(显示播放器)。
我不明白事件的原因是什么!
所以,问题是 - 浏览器在没有断点的情况下无法正常播放视频/音频。unmute
unmute
mute
mute
如果我在第 (*) 行中设置断点,则 peer2 会获取上述事件,但 (!) 除外,并且浏览器可以正常播放音频和视频。
在我看来,我的断点造成了消除问题的延迟。为什么它有帮助 - 我不知道。mute
问题:案例1的事件原因是什么?
您有什么建议来检查、跟踪等以消除问题?mute
代码为:
navigator.mediaDevices.getUserMedia(constraints).then(
function Resolve_GetUserMedia(stream) {
// add track to peerConnection to send it to peer
let streamToAdd = mediaControl.stream;
let tracksArray = streamToAdd.getTracks();
let msgText = "(1) Adding tracks of the stream _" + streamToAdd.id + "_ " +
"Activity = " + streamToAdd.active + " Total = " + tracksArray.length;
appendMessageText(msgText, "msg_log");
for (let i = 0; i < tracksArray.length; i++) {
let track = tracksArray[i];
// try to add track
let ok_add_1track = false;
try {
// "par_webRtc.peerConnection" is a peerConnection
par_webRtc.peerConnection.addTrack(track, streamToAdd);
ok_add_1track = true;
}
catch(err) {
if (err.code === DOMException.INVALID_ACCESS_ERR) {
// track already sent - no error
ok_add_1track = true; // (*) BREAKPOINT HERE SOLVES THE PROBLEM
}
else {
// other code are "true" errors
errorsCount++;
}
}
if (ok_add_1track) {
// track added successfully
console.log("OK_Status of adding <" + track.kind + "> = " + "OK");
}
else {
console.warn("ERR_Status of adding <" + track.kind + "> = " + "ERROR");
}
if (track.kind === "audio") {
// remember status of track adding
connection.noAudio = !ok_add_1track;
}
else if (track.kind === "video") {
// remember status of track adding
connection.noVideo = !ok_add_1track;
}
let sig_state = (par_webRtc.peerConnection === undefined) ?
"NO PEER CONN!!!" :
par_webRtc.peerConnection.signalingState;
let msgText = "Resolve_RemoteDescriptionSet !!!>> " +
"We sent track to remote.peerConnection : kind=" + track.kind +
" label=" + track.label +
" muted=" + track.muted.toString() +
" id=" + track.id +
" State = " + sig_state;
console.log("WebRTC - " + msgText);
appendMessageText(msgText, "msg_log");
}
} // function Resolve_GetUserMedia(stream)
答:
由于 Microsoft Edge 和 Google Chrome 都使用基于 Chromium 项目的渲染引擎,因此会导致 FF->Edge 或 Chrome 连接生成“静默”事件。您可以在此处发送反馈:https://bugs.chromium.org/p/chromium/issues/list。
有关“静音”事件的更多信息,可以参考:https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/mute_event。
评论