将非碎片化的 mp4 重新编码为碎片化的 mp4
reencode non-fragmented mp4 into fragmented mp4
我正在使用 MediaSource
扩展来播放视频。但是,MediaSource
如何在 JavaScript 中将非碎片化的 MP4 视频转换为碎片化的 MP4 视频,以便我可以使用 MediaSource
播放视频?
MP4Box's isFragmented
布尔值 returns false
在非碎片化视频上:
blob.arrayBuffer().then((videoBuffer => {
mp4boxfile.onReady = function (info) {
const isFragmented = info.isFragmented;
if (!isFragmented) {
//Need to reencode video into a fragmented video here
}
}
//...
const chunkSize = Math.ceil(videoBuffer.byteLength / 80000);
let start = 0;
let currentEnd = 80000;
let videoBufferChunk;
for (let i = 0; i < chunkSize; i++) {
videoBufferChunk = videoBuffer.slice(start, currentEnd);
videoBufferChunk.fileStart = start;
start = mp4boxfile.appendBuffer(videoBufferChunk);
currentEnd = start + 80000;
mp4boxfile.flush();
}
//...
}
如何使用 JavaScript 将 MP4 视频重新编码为片段?
您可以使用 ffmpeg.wasm
,它基本上是用于浏览器的 ffmpeg,但具有本机性能。这样你就可以将碎片整合到你的前端,如果我理解正确的话,这就是你想要做的。
恐怕我无法帮助您解决使用 ffmpeg 的实际碎片部分,但是 this post 讨论了正常的 ffmpeg。
我正在使用 MediaSource
扩展来播放视频。但是,MediaSource
如何在 JavaScript 中将非碎片化的 MP4 视频转换为碎片化的 MP4 视频,以便我可以使用 MediaSource
播放视频?
MP4Box's isFragmented
布尔值 returns false
在非碎片化视频上:
blob.arrayBuffer().then((videoBuffer => {
mp4boxfile.onReady = function (info) {
const isFragmented = info.isFragmented;
if (!isFragmented) {
//Need to reencode video into a fragmented video here
}
}
//...
const chunkSize = Math.ceil(videoBuffer.byteLength / 80000);
let start = 0;
let currentEnd = 80000;
let videoBufferChunk;
for (let i = 0; i < chunkSize; i++) {
videoBufferChunk = videoBuffer.slice(start, currentEnd);
videoBufferChunk.fileStart = start;
start = mp4boxfile.appendBuffer(videoBufferChunk);
currentEnd = start + 80000;
mp4boxfile.flush();
}
//...
}
如何使用 JavaScript 将 MP4 视频重新编码为片段?
您可以使用 ffmpeg.wasm
,它基本上是用于浏览器的 ffmpeg,但具有本机性能。这样你就可以将碎片整合到你的前端,如果我理解正确的话,这就是你想要做的。
恐怕我无法帮助您解决使用 ffmpeg 的实际碎片部分,但是 this post 讨论了正常的 ffmpeg。