2017-08-25 167 views
0

的我流與命令一個網絡攝像頭/音頻:RTP流與FFmpeg的音頻和視頻不同步

ffmpeg.exe -f dshow -framerate 30 -i video="xxx" -c:v libx264 -an -f rtp rtp://localhost:50041 -f dshow -i audio="xxx" -c:a aac -vn -f rtp rtp://localhost:50043 

此輸出以下SDP信息:

v=0 
    o=- 0 0 IN IP4 127.0.0.1 
    s=No Name 
    t=0 0 
    a=tool:libavformat 57.65.100 
    m=video 50041 RTP/AVP 96 
    c=IN IP6 ::1 
    a=rtpmap:96 H264/90000 
    a=fmtp:96 packetization-mode=1 
    m=audio 50043 RTP/AVP 97 
    c=IN IP6 ::1 
    b=AS:128 
    a=rtpmap:97 MPEG4-GENERIC/44100/2 
    a=fmtp:97 profile-level-id=1;mode=AAC- 
    hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500 

和我讀到流用命令:

ffmpeg.exe -protocol_whitelist file,udp,rtp -i D:\test.sdp -c:v libx264 -c:a aac d:\out.mp4 

在生成的文件,音頻稍微超前視頻。我讀過RTCP在RTP端口+ 1上運行,幷包含同步信息。儘管我在SDP文件中沒有看到任何RTCP信息。

我是否需要指定某些內容以包含RTCP?

如果這不是問題,我還能做些什麼來同步音頻和視頻?

回答

1

不知道如果RTCP是你的問題,但我會試圖使用一個DirectShow的輸入,像這樣拆分到兩個輸出開始:

ffmpeg.exe -f dshow -framerate 30 -i video="XX":audio="YY" -an -vcodec libx264 -f rtp rtp://localhost:50041 -acodec aac -vn -f rtp rtp://localhost:50043 

ffmpeg DirectShow documentation提到的同步問題,當使用多個輸入。它還提到,如果要保持輸入分離,請嘗試使用「-copy_ts」標誌來解決同步問題。

+0

哇,非常感謝,做到了!我已經閱讀了DirectShow頁面並嘗試了所有其他建議,但是我從未意識到可以將其作爲一個輸入和數據流讀入兩個輸出。 –