Я занимаюсь разработкой плеера, который открывает поток rtsp, используя Live555 и используя FFMPEG для декодирования видеопотока. Я застрял в точке, где кадр IDR теряется по сети, так что после декодирования его последующих B / P-кадров он показывает эффект дрожания в видео. Это дает очень плохую производительность в видео.
Итак, мой вопрос: как я могу справиться с потерей пакета I-кадра? Я хотел бы знать, существует ли какая-либо стратегия / алгоритм для обработки потери пакетов, чтобы видео было плавным или четким.
Любая помощь будет оценена.
Благодарю вас.
Ну, как только I-кадр потерян, он потерян. Вы ничего не можете сделать на стороне клиента. Единственный способ решить эту проблему — настроить сервер (например, streamer) таким образом, чтобы он отправлял либо более частые I-кадры (т. Е. MORE I-кадры в потоке), либо более редкие I-кадры (т.е. Меньше I-кадров в потоке) (если вы используете ffmpeg / libx264, это может быть точно настроено с невероятной точностью при отправке I-кадров).
Если это первый подход, я полагаю, что вы декодируете кадр синхронно, я имею в виду прямой обратный вызов Live555, вызывающий функцию avcodec_decode_video2 из FFMPEG.
В этом случае принимающий сокет не читается во время декодирования, тогда пакеты буферизуются до тех пор, пока он не переполнится.
Вы можете попробовать другой обходной путь, такой как увеличение буфера сокета, используя RTP поверх TCP, но реальное решение должно быть более асинхронным, например, afterGetting может отправить данные в fifo, и поток декодирования может получить из него.