
У меня возникли странные проблемы на моем ПК с Windows 7: я попытался настроить медиаплеер VLC для потоковой передачи звука через RTP, однако при этом теряется огромное количество исходящих UDP-пакетов.
После некоторой отладки я заметил, что мой ПК может абсолютно нормально получать те же потоковые пакеты с другого ПК (без входящих потерь UDP), однако, когда мой ПК настроен на передачу потока, я получаю более 26% потерь пакетов UDP. Даже когда ПК подключены с помощью прямого куска кабеля CAT5.
Из некоторых проверок Wireshark, похоже, мой ПК вообще не отправляет эти пакеты. Что-то мешает их отправке. Что может быть причиной? Понятия не имею.
Спасибо за любые подсказки.
//EDIT: Я забыл добавить, неважно, является ли поток одноадресным или многоадресным. Результаты те же.
решение1
Наконец, я нашел решение: как я и беспокоился с самого начала, проблема действительно была в Windows. По какой-то причине по умолчанию стек IP использует только 8 кбайт буферов. (Забавно, не правда ли?) Этого недостаточно для нескольких кбайт UDP-всплесков, которые производит VLC.
Существует возможность увеличить размеры буфера отправки/приема стека IP, используя ключи реестра. По какой-то причине на моей машине эти ключи полностью отсутствовали, поэтому размер был установлен по умолчанию.
Чтобы изменить размеры буфера отправки/приема, обновите (или создайте) этот ключ реестра. В моем случае установка размера буфера в 64 КБ решила проблему. Теперь никаких исходящих потерь UDP.
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Afd \Parameters]
DefaultReceiveWindow = 65536
DefaultSendWindow = 65536
Оба значения имеют тип DWORD (32 бита), если вам нужно, создайте их.
(Я также повозился с настройками размера буфера в сетевых контроллерах, но это ни к чему не привело.)