我正在嘗試將實時 MediaStream(最終從相機)從 peerA 投射到 peerB,我希望 peerB 實時接收實時流,然后以額外的延遲重播。不幸的是,不能簡單地暫停流并繼續(xù)播放,因為它會跳轉(zhuǎn)到實時時刻。所以我發(fā)現(xiàn)我可以使用 MediaRecorder + SourceBuffer 重新觀看直播。記錄流并將緩沖區(qū)附加到 MSE (SourceBuffer) 并在 5 秒后播放。這適用于本地設備(流)。但是當我嘗試在接收器上使用 Media Recorder 時,MediaStream (from pc.onaddstream) 看起來像是獲取了一些數(shù)據(jù),并且能夠?qū)⒕彌_區(qū)附加到 sourceBuffer。但是它不會重播。有時我只得到一幀。const [pc1, pc2] = localPeerConnectionLoop()const canvasStream = canvas.captureStream(200)videoA.srcObject = canvasStreamvideoA.play()// Note: using two MediaRecorder at the same time seem problematic// But this one works// stream2mediaSorce(canvasStream, videoB)// setTimeout(videoB.play.bind(videoB), 5000)pc1.addTransceiver(canvasStream.getTracks()[0], { streams: [ canvasStream ]})pc2.onaddstream = (evt) => { videoC.srcObject = evt.stream videoC.play() // Note: using two MediaRecorder at the same time seem problematic // THIS DOSE NOT WORK stream2mediaSorce(evt.stream, videoD) setTimeout(() => videoD.play(), 2000)}/** * Turn a MediaStream into a SourceBuffer * * @param {MediaStream} stream Live Stream to record * @param {HTMLVideoElement} videoElm Video element to play the recorded video in * @return {undefined} */function stream2mediaSorce (stream, videoElm) { const RECORDER_MIME_TYPE = 'video/webm;codecs=vp9' const recorder = new MediaRecorder(stream, { mimeType : RECORDER_MIME_TYPE }) const mediaSource = new MediaSource() videoElm.src = URL.createObjectURL(mediaSource) mediaSource.onsourceopen = (e) => { sourceBuffer = mediaSource.addSourceBuffer(RECORDER_MIME_TYPE);你知道為什么它不能播放視頻嗎?我已經(jīng)創(chuàng)建了一個包含所有必要代碼的小提琴來嘗試它,javascript 選項卡與上面的代碼相同,(html 大多無關(guān)緊要,不需要更改)有些人試圖減少延遲,但我實際上想將其增加到大約 10 秒以重新觀看您在高爾夫揮桿中做錯的事情或其他事情,如果可能,完全避免使用 MediaRecorder編輯: 我在一些 RTC 擴展中發(fā)現(xiàn)了一個叫做“播放延遲”的東西允許發(fā)送者控制從捕獲到渲染時間的最小和最大延遲https://webrtc.org/experiments/rtp-hdrext/playout-delay/我怎樣才能使用它?對我有幫助嗎?
更改 WebRTC 流中的播放延遲
溫溫醬
2021-06-14 10:40:08