为什么视频播放器会丢失实时RTP流的第一帧?

时间:2011-11-17 13:33:04

标签: video rtsp rtp live-streaming

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

1 个答案:

答案 0 :(得分:0)

有几种可能性:

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

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

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

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

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