最近遇到一個問題我在使用的 WebRTC 聲音跟影像會分開沒辦法合併再一起
聲音與影像分開發生的原因
可以參考一下我原本的方法,我會把 track event 的 stream 放入 element,使用這個方法如果 track 跳兩次就會發生我前面說的聲音跟影像沒辦法合併再一起的問題
pc.ontrack = function(event) {
var el = document.createElement(event.track.kind)
el.srcObject = event.streams[0]
el.autoplay = true
el.controls = true
document.getElementById('video').appendChild(el)
}
解決聲音與影像分開的問題
找了很久終於發現要要使用 MediaStream 建立一個 Stream 把 Audio 與 Video 丟入 Track 把它合併再一起
建立 MediaStream
建立 MediaStream 之後把 event.track 使用 addTrack 的方法加入
inboundStream = new MediaStream(); inboundStream.addTrack(event.track);
標準的方法可以參考 MDN 在 RTCPeerConnection.addTrack() 的處理方法
let inboundStream = null;
pc.ontrack = ev => {
if (ev.streams && ev.streams[0]) {
videoElem.srcObject = ev.streams[0];
} else {
if (!inboundStream) {
inboundStream = new MediaStream();
videoElem.srcObject = inboundStream;
}
inboundStream.addTrack(ev.track);
}
}
以上就是處理 WebRTC 在聲音影像分開的方法