0

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

4

1 回答 1

0

有几种可能性:

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

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

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

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

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

于 2011-11-17T17:23:30.373 回答