在chrome和firefox中,我們可以使用HTMLMediaElement.captureMediaStream()來擷取串流。但 Safari 不支援 HTMLMediaElement.captureMediaStream()。
視訊標籤的來源是分段接收的 hls 資料。
是否有其他方法在 Safari 中將媒體資料擷取為 MediaStream?
Safari 不支援直接 captureMediaStream 方法,至少目前如此,如您所見,但實現此目的的一種方法是使用基於瀏覽器 ffmpeg 的方法。
過去,在瀏覽器中執行 ffmpeg 對於大多數任務來說並不現實,因為它太大且太慢,但最近基於 WASM(Web 組件)的 ffmpeg 實作使其更易於存取。
您可以利用以下程式庫建立自己的基於 ffmpeg 的解決方案:
#您確實需要意識到 SharedArrayBuffer 支持的必要性:
上面提到的連結在這裡:https://caniuse.com/sharedarraybuffer
#我發現它對許多常見的 ffmpeg 任務效果很好,但它對較大的視訊檔案很敏感 - 我沒有嘗試過 HLS 到檔案轉換,因此您需要進行試驗才能看到它滿足您的需求。這裡有一個演示,您可以在其中測試您的用例:https://ffmpegwasm.netlify。應用程式/#demo
您要使用的 ffmpeg 命令取決於音頻,但很可能:
(有關詳細信息,請參閱此問題和答案:將 HLS (m3u8) 轉換為 MP4)
還有一些開源現成的解決方案可供您查看 - 例如:
Safari 不支援直接 captureMediaStream 方法,至少目前如此,如您所見,但實現此目的的一種方法是使用基於瀏覽器 ffmpeg 的方法。
過去,在瀏覽器中執行 ffmpeg 對於大多數任務來說並不現實,因為它太大且太慢,但最近基於 WASM(Web 組件)的 ffmpeg 實作使其更易於存取。
您可以利用以下程式庫建立自己的基於 ffmpeg 的解決方案:
#您確實需要意識到 SharedArrayBuffer 支持的必要性:
上面提到的連結在這裡:https://caniuse.com/sharedarraybuffer
#我發現它對許多常見的 ffmpeg 任務效果很好,但它對較大的視訊檔案很敏感 - 我沒有嘗試過 HLS 到檔案轉換,因此您需要進行試驗才能看到它滿足您的需求。這裡有一個演示,您可以在其中測試您的用例:https://ffmpegwasm.netlify。應用程式/#demo
您要使用的 ffmpeg 命令取決於音頻,但很可能:
(有關詳細信息,請參閱此問題和答案:將 HLS (m3u8) 轉換為 MP4)
還有一些開源現成的解決方案可供您查看 - 例如: