我正在尝试使用 node.js 作为后端将视频直接流式传输到浏览器。我希望从特定时间流式传输视频,并且还希望它被部分流式传输,因为它是一个非常大的文件。现在我正在使用 fluent-ffmpeg 执行此操作,如下所示:
const ffmpeg = require('fluent-ffmpeg');
app.get('/clock/', (req, res) => {
const videoPath = 'video.mp4';
const now = new Date();
ffmpeg(videoPath)
.videoCodec('libx264')
.withAudioCodec('aac')
.setStartTime(`${(now.getHours() - 10) % 24}:${now.getMinutes() - 1}:${now.getSeconds()}`)
.format('mp4')
.outputOptions(['-frag_duration 100','-movflags frag_keyframe+faststart','-pix_fmt yuv420p'])
.on('end', () => {
console.log("File has been converted succesfully");
})
.on('error', (err) => {
if (err.message.toLowerCase().includes('output stream closed')) return;
console.log('An error occoured', err);
})
.pipe(res, { end: true });
});
这将适用于 Chrome,但 Safari 只是不想流式传输它。我知道它在 Safari 上不起作用的原因是 Safari 需要范围标头。因此,我试图这样做,但是:
- 我无法让它与 fluent-ffmpeg 一起使用。
- 当我尝试以“正常”方式进行时,没有 fluent-ffmpeg,它需要在播放之前加载整个视频文件。
视频不需要从特定的时间戳开始。这会很好,但如果不可能的话,我有一个解决方法:)
所以我的问题是:我怎样才能让上面的代码与 Safari 一起工作。如果这是不可能的:我如何编写不需要完全加载的代码,然后才能在 Safari 浏览器中播放,又名。部分视频流。