在chrome和firefox中,我们可以使用HTMLMediaElement.captureMediaStream()来捕获流。但是Safari不支持HTMLMediaElement.captureMediaStream()。视频标签的源是以段接收的hls数据。在Safari中是否有其他方法将媒体数据捕获为MediaStream?
bvjveswy1#
Safari中不支持直接captureMediaStream方法,至少目前是这样,但可以使用基于浏览器ffmpeg的方法。在过去,在浏览器中运行ffmpeg对于大多数任务来说都是不现实的,因为它太大太慢,但是最近基于WASM(Web Assembly)的ffmpeg实现使其更容易访问。你可以构建你自己的基于ffmpeg的解决方案,利用像这样的库:
您需要了解SharedArrayBuffer支持的必要性:只有支持SharedArrayBuffer的浏览器才能使用ffmpeg.wasm,你可以在这里查看完整的列表。上面提到的链接在这里:https://caniuse.com/sharedarraybuffer我发现,它适用于许多常见的ffmpeg任务,但它对较大的视频文件很敏感-我没有尝试过HLS到文件转换,所以你需要实验,看看它是否满足你的需要。这里有一个演示,您可以在上面测试您的用例:https://ffmpegwasm.netlify.app/#demo你想使用的ffmpeg命令取决于音频,但它可能:ffmpeg -i in.m3u8 -编解码器拷贝-bsf:a aac_adtstoasc -vcodec拷贝out.mp4(see这个问题和答案更多信息:Converting an HLS (m3u8) to MP4)还有一些开源的现成解决方案,您可以查看-例如:
1条答案
按热度按时间bvjveswy1#
Safari中不支持直接captureMediaStream方法,至少目前是这样,但可以使用基于浏览器ffmpeg的方法。
在过去,在浏览器中运行ffmpeg对于大多数任务来说都是不现实的,因为它太大太慢,但是最近基于WASM(Web Assembly)的ffmpeg实现使其更容易访问。
你可以构建你自己的基于ffmpeg的解决方案,利用像这样的库:
您需要了解SharedArrayBuffer支持的必要性:
只有支持SharedArrayBuffer的浏览器才能使用ffmpeg.wasm,你可以在这里查看完整的列表。
上面提到的链接在这里:https://caniuse.com/sharedarraybuffer
我发现,它适用于许多常见的ffmpeg任务,但它对较大的视频文件很敏感-我没有尝试过HLS到文件转换,所以你需要实验,看看它是否满足你的需要。这里有一个演示,您可以在上面测试您的用例:https://ffmpegwasm.netlify.app/#demo
你想使用的ffmpeg命令取决于音频,但它可能:
ffmpeg -i in.m3u8 -编解码器拷贝-bsf:a aac_adtstoasc -vcodec拷贝out.mp4
(see这个问题和答案更多信息:Converting an HLS (m3u8) to MP4)
还有一些开源的现成解决方案,您可以查看-例如: