我正在开发一个播放器,它使用 Live555 打开 rtsp 流并使用 FFMPEG 解码视频流。我被困在一个点,IDR 帧在网络上丢失,因此在解码其后续 B/P 帧后,它在视频中显示出抖动效果。它在视频中的表现非常糟糕。
所以我的问题是,如何处理 I 帧丢包?我想知道是否有任何策略/算法来处理丢包,以便视频应该流畅或清晰。
任何帮助将不胜感激。谢谢你。
如果是第一种方法,我猜你同步解码帧,我的意思是 Live555 afterGetting 回调直接调用FFMPEG的avcodec_decode_video2。
在这种情况下,在解码过程中不读取接收套接字,然后数据包被缓冲直到溢出。
您可以尝试不同的解决方法,例如增加套接字缓冲区,使用基于 TCP 的 RTP,但真正的解决方案需要更加异步,例如 afterGetting 可以将数据推送到 fifo 并且解码线程可以从中获取。
好吧,一旦 I 帧丢失,它就丢失了。你真的不能在客户端做任何事情。我们可以解决这个问题的唯一方法是配置服务器(即:流媒体),使其发送更频繁的 I 帧(即:流中的更多 I 帧)或更不频繁的 I 帧(即_流中的 I 帧较少)(如果您使用 ffmpeg/libx264,则可以在发送 I 帧时将其微调到令人难以置信的精确度)。