Потеря пакетов от потоковой передачи RTP, декодированных с помощью ffmpeg - PullRequest
0 голосов
/ 28 апреля 2020

Надеюсь, кто-нибудь может мне помочь. Я пытаюсь применить нейронную сеть (YOLOv2) для обнаружения объектов в потоке RTP, который я смоделировал в локальном режиме с использованием VL C, с отметкой «using RTP over TCP» как true. Поток 4K, 30 кадров в секунду, 15 Мбит / с. Я использую модуль ввода / вывода OpenCV C API для чтения кадров из потока.

Я использую общий код. Я открываю RTP следующим образом: cap = cvCaptureFromFile(url);

И затем выполняю захват в одном потоке, например: IplImage* src = cvQueryFrame(cap);

, а в другом потоке - часть обнаружения.

Я знаю, что OpenCV использует ffmpeg для захвата видео. Я использую ffmpeg 3.3.2. Моя проблема в том, что когда я получаю поток, появляется много артефактов. Вывод, который я получаю:

top block unavailable for requested intra mode -1
[h264 @ 0000016ae36f0a40] error while decoding MB 40 0, bytestream 81024
[h264 @ 0000016ae32f3860] top block unavailable for requested intra mode
[h264 @ 0000016ae32f3860] error while decoding MB 48 0, bytestream 102909
[h264 @ 0000016ae35e9e60] Reference 3 >= 3
[h264 @ 0000016ae35e9e60] error while decoding MB 79 0, bytestream 27231
[h264 @ 0000016a7033eb40] mmco: unref short failure
[h264 @ 0000016ae473ee00] Reference 3 >= 3

снова и снова, и слишком много потерь пакетов, которые я не вижу при отображении принятых кадров. Однако со мной не случается, когда я передаю по RTP другие видео низкого качества, такие как HD, со скоростью 30 кадров в секунду или тому подобное. Также верно, что 4K имеет много движения (это гонки Moto GP).

Я пытался: - Уменьшить частоту кадров при потоковой передаче. - Уменьшить битрейт - ffplay либо не показывает правильно входные кадры, но VL C показывает (не знаю почему). - Принудительная передача по TCP. - Принудительный ввод fps делает cvSetCaptureProperty(cap, CV_CAP_PROP_FPS, 1);

Почему это происходит и как я могу улучшить потери пакетов? Есть ли способ или что-то еще, что я могу попробовать?

Большое спасибо

...