Matt Mahony
Matt Mahony

Reputation: 41

RTP streaming with FFmpeg audio and video out of sync

I am streaming a webcam/audio with the command:

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

This outputs the following sdp info:

    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

And I read the stream with the command:

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

In the resulting file, the audio is slightly ahead of the video. I have read that RTCP runs on the RTP port + 1, and contains synchronization information. I don't see any RTCP information in the SDP file though.

Do I need to specify something to include RTCP?

If that's not the issue, what else can I do to sync the audio and video?

Upvotes: 0

Views: 4592

Answers (1)

Mike
Mike

Reputation: 582

Not sure if RTCP is your issue, but I would start by trying to use one directshow input and splitting it to two outputs like this:

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

The ffmpeg DirectShow documentation mentions synchronization issues when multiple inputs are used. It also mentions trying the "-copy_ts" flag to resolve sync issues if you want to keep the inputs separate.

Upvotes: 1

Related Questions