【问题标题】:Why does a video player loose some of the first frames of a live RTP stream?为什么视频播放器会丢失实时 RTP 流的一些第一帧?
【发布时间】:2011-12-31 08:41:01
【问题描述】:

我已经编写了一个 RTSP 服务器。它通过 RTP/UDP 发送 h246/AAC 流数据。视频的 RTP 发送数据包间隔为 30 毫秒,音频为 20 毫秒。时间戳是从 flv-tag 中提取的(我的服务器从 flv 文件中获取视频和音频数据)。视频播放器丢失了前几个视频帧。因此,音频领先于视频几秒钟。为什么是这样?在服务器端流式传输之前我应该​​暂停一下吗?

【问题讨论】:

    标签: video rtsp rtp live-streaming


    【解决方案1】:

    有几种可能:

    • UDP 是不可靠的协议。您可以检查 RTP 序列号以查看是否是这种情况以及丢弃了多少/哪些帧。可能有助于最小化 UDP 数据包丢失的是增加客户端上的 UDP 接收缓冲区大小。 Here 是如何在 linux 上执行此操作的示例。你当然可以在 windows 上做同样的事情。

    • 客户端只有在收到 IDR 帧后才能正确解码视频。在此之前,它无法正确解码视频。您向新客户端流式传输的第一帧是 IDR 帧(请记住,它仍然可能丢失)。

    无论如何,在我看来,您的视频播放器应用程序还有另一个问题:即使帧被丢弃,播放器也负责缓冲和同步音频和视频,并且无论数据包如何,都应该能够做到这一点损失。

    在纯粹的信息说明中,您还可以通过 RTSP(因此通过 TCP)实现 RTP/RTCP 交错。这样您就不必担心丢帧。 live555 媒体流库和 VLC 等库支持此功能。

    回答你关于暂停的最后一个问题:不,这与它无关。 RTSP 纯粹是信令协议。传输层(UDP)会发生丢包。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多