簡體   English   中英

有沒有辦法使用 h.264 編解碼器恢復實時 h264 播放(客戶端重新加入)?

[英]Is there any way to resume live h264 playback (client rejoin) using the h.264 codec?

目前,我在使用 MediaSource API 恢復實時 h264 播放時遇到了一些問題。 我的服務器端代碼將保留來自 FFmpeg 的第一個數據包,然后將其發送給客戶端。 但是,這很好用,但會引發一個問題。

當我重新啟動 stream 並將其分派給客戶端時,它按預期進行,這是我期望客戶端斷開連接然后必須重新連接到 stream 時的結果,是上述結果

但是,如果我要重新加入 stream,我會得到這個結果

此外,上圖中的 FFMpeg 數據正在發送到客戶端,只是由於某種原因沒有渲染它。

這是我的 function 用於播放我從服務器獲取的音頻/視頻幀。

private _playFrame(type: 0 | 1) {
    const src = type === 0 ? this.audioSource : this.videoSource;
    if (!src || src.updating) return;
    const queue = type === 0 ? this.audioFrameQueue : this.videoFrameQueue;
    src.appendBuffer(queue.shift());
    if (this.video.src && this.video.paused) this.video.play().then(() => null);
}

Fragmented.mp4 數據流——用於實時播放的類型——在壓縮媒體本身之前有一個描述其媒體的序言。

包含媒體元數據的序言是一大塊數據——mp4 術語中的“原子”——名為'moov' 它的子原子之一'avcC'包含用於 H.264 視頻流的所謂編解碼器專用數據。 如果您要求解碼器處理 H.264 而不向其提供編解碼器專用數據,則它無法解釋 H.264 並因此跳過它。 任何解碼器都是如此,包括嵌入在瀏覽器或桌面媒體播放器包中的解碼器。

'moov'序言可能在 ffmpeg 的第一個數據包中(盡管您需要使用mp4dump之類的工具檢查該數據以確定)。

因此,要加入直播 stream,觀眾必須先接收序幕數據,然后再接收直播數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM