h.264 rtsp流中的I帧丢失处理

时间:2014-03-27 10:41:24

标签: c++ ffmpeg h.264 rtsp live555

我正在开发一个使用Live555打开rtsp流并使用FFMPEG解码视频流的播放器。我陷入困境,IDR帧在网络上丢失,因此在解码其后继B / P帧之后,它在视频中显示出抖动效应。它在视频中表现非常糟糕。

所以我的问题是,如何处理I帧丢包?我想知道是否有任何策略/算法来处理数据包丢失,以便视频应该流畅或清晰。

任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:3)

如果它是第一种方法,我想你同步解码帧,我的意思是Live555 afterGetting回调直接调用FFMPEG的avcodec_decode_video2。

在这种情况下,在解码过程中不会读取接收套接字,然后缓冲数据包直到溢出为止。

您可以尝试不同的解决方法,例如使用RTP over TCP增加套接字缓冲区,但真正的解决方案需要更加异步,例如afterGetting可以将数据推送到fifo并且解码线程可以从中获取。

答案 1 :(得分:1)

好吧,一旦I帧丢失,它就会丢失。你无法在客户端做任何事情。我们可以解决这个问题的唯一方法是配置服务器(即:流媒体),它将以更频繁的I帧发送(即:流中更多I帧)或更不频繁的I帧(ie_流中的I帧少()如果你使用ffmpeg / libx264,它可以在发送I帧时精确调整到令人难以置信的精确度。)