2014-01-14 32 views
4

我已經使用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,它工作得很好,顯示時間,視頻播放正常速度。

+1

如果PTS不正確,可能會發生這種情況,請查看-genpts的功能! – alexbuisson

+0

@alexbuisson我使用了'-fflags + genpts'但沒有幫助 – Mustafa

+0

它似乎適用於電視上的Chromecast,但不適用於Chrome本身,很奇怪。 – Mustafa

回答

2

我相信你需要在ffmpeg命令中添加「-re」標誌,當你從文件中進行流式傳輸時,就像你所描述的那樣。

退房有指導的位置:FFmpeg Streaming Guide

下面是文件流媒體的某個位置直接ffmpeg的命令。

ffmpeg -re -i 'myfile.mp4' -vcodec libx264 -b:v 950k -r 24 -s 1024x576 -ar 44100 -ac 2 -ab 64k -f flv 'rtmp://mywowzaserver.com/live/mp4:streamName'

+0

對不起,它沒有幫助 – Mustafa

+1

這是我在本地系統上使用流本地文件到wowza服務器。也許你可以發現你的國旗崩潰和我的一些差異,因爲它最終還是ffmpeg。 'ffmpeg -re -i'myfile.mp4'-vcodec libx264 -b:v 950k -r 24 -s 1024x576 -ar 44100 -ac 2 -ab 64k -f flv'rtmp://mywowzaserver.com/live/ mp4:streamName''' – SurfinColin

2

我懷疑問題在於,事實上,你不聲明AAC音頻編解碼器(這是一般來說需要兼容H264視頻)。該GitHub的頁面上的示例代碼做此明確:

"  .audioCodec('libfaac') " 

如果你仍然有問題,你應該在Github上頁打開一個問題:

https://github.com/trenskow/stream-transcoder.js/issues

編輯 您還沒有指定

-profile:v baseline -level 3.0 

這可能是爲什麼它適用於chromecast而不是chrome。

+0

添加它並沒有解決它,問題是視頻,它不是以正常速度播放,無論在緩衝區中顯示。 – Mustafa

+0

你檢查過不同的文件嗎? – denjello

+0

是的,我沒有區別 – Mustafa