RTP流与FFmpeg的音频和视频不同步

问题描述:

的我流与命令一个网络摄像头/音频: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?

如果这不是问题,我还能做些什么来同步音频和视频?

不知道如果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页面并尝试了所有其他建议,但是我从未意识到可以将其作为一个输入和数据流读入两个输出。 –