我正在开发一个使用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 帧时可以微调到令人难以置信的精确度)。