ffmpeg rtp流错误:rtp:丢弃接收的旧数据包太晚

ffmpeg rtp流错误:rtp:丢弃接收的旧数据包太晚,ffmpeg,video-streaming,rtp,Ffmpeg,Video Streaming,Rtp,我通过ffmpeg启动视频传输,如下所示: ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 -preset ultrafast -crf 20 -tune zerolatency -s 800x600 -r 25 -b:v 0.9M -sdp_file video.sdp -f rtp rtp://192.168.10.24:5010 我这样复制: ffplay -protocol_whitelist file,udp,rtp

我通过ffmpeg启动视频传输,如下所示:

ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 -preset ultrafast -crf 20 -tune zerolatency -s 800x600 -r 25 -b:v 0.9M -sdp_file video.sdp -f rtp rtp://192.168.10.24:5010    
我这样复制:

ffplay -protocol_whitelist file,udp,rtp video.sdp    
一切正常。然后我中断传输,几秒钟后我恢复。ffplay不会立即开始复制,但会出现错误:

....
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 14 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 33 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 41 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 49 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 33 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 27 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 14 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 48 times
[sdp @ 0x6ebf80] RTP: dropping old packet received too lateB f=1/1
    Last message repeated 34 times
......    

一段时间后,将恢复播放,但播放时间太长。当传入流被挂起时,是否有一种方法可以消除或最小化这种性质的错误的发生?阅读手册,没有任何值得一读的东西,naryl。。。。((

好的,所以我也遇到了同样的问题,花了一个小时来解决。深入研究ffmpeg代码;在
libavformat/rtpdec.c

    if ((s->seq == 0 && !s->queue) || s->queue_size <= 1) {
    /* First packet, or no reordering */
    return rtp_parse_packet_internal(s, pkt, buf, len);
} else {
    uint16_t seq = AV_RB16(buf + 2);
    int16_t diff = seq - s->seq;
    if (diff < 0) {
        /* Packet older than the previously emitted one, drop */
        av_log(s->ic, AV_LOG_WARNING,
               "RTP: dropping old packet received too late\n");
        return -1;
    } else if (diff <= 1) {
这并不明确,但如果您添加
-reorder\u queue\u size 0
,它会解决问题,因为它会停止对数据包进行排序。我验证并解决了我的问题。我可以中断源…2分钟后重新启动,它就可以正常工作了

主要是因为作为udp和realtime,我不需要任何命令,它应该只播放通过的内容


希望这也能解决你的问题

没有人对这个问题有任何想法?对当前的git负责人来说还是一样的
-reorder_queue_size

    Set number of packets to buffer for handling of reordered packets.