我已經使用stream-transcoder模塊將文件轉換爲流。所以這個文件不會被存儲,它是即時的。在NodeJS中使用mp4容器流式轉換電影,電影播放速度非常快
app.get("/video", function(req,res){
res.writeHead(200, {'Content-Type': 'video/mp4'});
var src = "movie.avi";
var Transcoder = require('stream-transcoder');
var stream = fs.createReadStream(src);
new Transcoder(stream)
.maxSize(1280, 720)
.videoCodec('h264')
.videoBitrate(800 * 1000)
.fps(25)
.sampleRate(44100)
.channels(2)
.audioBitrate(128 * 1000)
.format('mp4')
.on('finish', function() {
console.log("finished");
})
.stream().pipe(res);
});
它工作得很好,它的速度很快,但速度太快,音頻以相同速度播放,但是視頻不尊重幀速率,無論是從收到的ffmpeg是immeidately顯示,快速度。此外,它不顯示總時間,我相信這是問題。我需要以某種方式指定長度,幀率,但我無法找到足夠的信息。我認爲從ffmpeg收到的流應該包含該流。我無法在HTTP中找到相應的標題。
下面是此流代碼轉換器模塊使用MP4的標誌:
[ '-i',
'-',
'-vf',
'scale=min(trunc(1280/hsub)*hsub\\,trunc(a*720/hsub)*hsub):min(trunc(720/vsub)*vsub\\,trunc(1280/a/vsub)*vsub)',
'-vcodec',
'h264',
'-b:v',
800000,
'-r',
25,
'-ar',
44100,
'-ac',
2,
'-ab',
128000,
'-f',
'mp4',
'-movflags',
'frag_keyframe+faststart',
'pipe:1' ]
當我使用VP8編碼器和WebM,它工作得很好,顯示時間,視頻播放正常速度。
如果PTS不正確,可能會發生這種情況,請查看-genpts的功能! – alexbuisson
@alexbuisson我使用了'-fflags + genpts'但沒有幫助 – Mustafa
它似乎適用於電視上的Chromecast,但不適用於Chrome本身,很奇怪。 – Mustafa