我目前正在实现一个学校项目,该项目的目标是使用torrent-stream(带有磁链)建立流媒体视频网站(例如Netflix)。我在流部分使用NodeJS。
我的问题是:当我尝试同时流式传输和转换(使用ffmpeg)视频时,无法将流重定向到HTML 5播放器。我认为这是因为我只是不知道转换后的文件的最终大小是多少。
在浏览器的控制台中,我收到以下消息:net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
我尝试将其放在标题:Transfer-Encoding: chunked
中,而不是Content-Length中
我指定流(转换前)完美运行
这是我的代码:
getTorrentFile.then(function (file) {
res.setHeader('Content-Type', 'video/mp4');
res.setHeader('Content-Length', file.length);
const ranges = parseRange(file.length, '15' /* variable à comprendre */, { combine: true });
console.log(ranges);
if (ranges === -1) {
// 416 Requested Range Not Satisfiable
console.log('416')
res.statusCode = 416;
return res.end();
} else if (ranges === -2 || ranges.type !== 'bytes' || ranges.length > 1) {
// 200 OK requested range malformed or multiple ranges requested, stream ent'ire video
if (req.method !== 'GET') return res.end();
console.log('200')
stream = file.createReadStream()
ffmpeg(stream)
.videoCodec('libx264')
.audioCodec('aac')
.output(res)
.output('./video/' + film + '_s' + season + '_e' + episode + '.mp4')
.outputFormat('mp4')
.outputOptions('-movflags frag_keyframe+empty_moov')
.on('error', function(err) {
console.log('An error occurred: ' + err.message);
})
.on('progress', function(progress) {
console.log('Processing: ' + progress.targetSize + 'kb done');
})
.on('end', function() {
console.log('Processing finished !');
})
.addOutputOption('-acodec')
.run()
对不起,如果我不清楚,请问一些问题,如果您需要更多信息:)
谢谢您的帮助,再见:)
答案 0 :(得分:0)
不能像这样播放MP4。您必须等到文件完成后再进行流传输。如果您想即时转换代码,请使用支持这种格式的格式,例如hls。