Декодирование UDP-потоков с помощью LibAV: недостаточный размер буфера - PullRequest
2 голосов
/ 23 марта 2012

Я пытаюсь использовать библиотеки libav с Qt для декодирования видеопотоков h.264 UDP, но когда я использую avformat_open_file, я получаю следующее сообщение об ошибке:

[udp @ 0x102b5bee0] Part of datagram lost due to insufficient buffer size

Сообщение появляется около 10 раз, а затем попытка не удалась. Я пытаюсь декодировать 4 разных потока UDP одновременно, каждый поток с частотой кадров 25 кадров в секунду. Wireshark указывает, что пакеты имеют размер от 3000 до 10000 байтов.

Вот мой звонок на avformat_open_input:

avformat_open_input(&formatContext, udpUrl.toStdString().c_str(), NULL, NULL)

formatContext имеет значение NULL во время выполнения этого вызова, и udpUrl имеет формат «udp: // ipaddress: port».

Если бы кто-то мог пролить свет на этот вопрос для меня, это было бы очень признательно!

Ответы [ 3 ]

1 голос
/ 30 марта 2012

После копания немного больше похоже, что FFMPEG ожидает, что вы сначала закодируете поток в MPEGTS при потоковой передаче исходного H.264 по UDP.Конечно же, кодирование выходного потока в MPEGTS сделало свое дело.

1 голос
/ 23 марта 2012

Эта ошибка возникает, когда вы пытаетесь прочитать дейтаграмму UDP в слишком маленький буфер.Поскольку UDP не гарантирует доставку, этот пакет просто усекается (или отбрасывается) в зависимости от реализации.

Из быстрого просмотра документации видно, что вы можете указать размер датаграммы в качестве параметра в своем URL-адресе. (см. Раздел 6.16 UDP) .

Попробуйте изменить URL-адрес на что-то вроде: udp://ipaddress:port?buffer_size=10240

0 голосов
/ 02 апреля 2015

Убедитесь, что параметры buffer_size и pkt_size установлены достаточно большими.

udp, так как любые другие протоколы (например, tcp, sctp) могут предоставлять универсальные форматы (например, mpegts, nut, mkv) или вы можете использовать rtp и rtsp и соответственно связанные форматы .

...