转换后无法重定向视频流(从mkv到mp4)

时间:2019-12-17 14:13:35

标签: node.js ffmpeg stream torrent nodejs-stream

我目前正在实现一个学校项目,该项目的目标是使用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()


对不起,如果我不清楚,请问一些问题,如果您需要更多信息:)

谢谢您的帮助,再见:)

1 个答案:

答案 0 :(得分:0)

不能像这样播放MP4。您必须等到文件完成后再进行流传输。如果您想即时转换代码,请使用支持这种格式的格式,例如hls。