Проблемы с обнаружением DLNA
Я передаю сообщение об обнаружении, как это:
M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nMX: 10\r\nST: ssdp:all\r\n
и я обычно получаю ответ от моего устройства DLNA. Но иногда нет.
Более серьезная проблема заключается в том, что если я получил ответ один раз и снова передал сообщение об обнаружении, я не получаю ответ от своего устройства во второй или последующий раз.
То, как я читаю документацию, заключается в том, что устройства должны отвечать на эти широковещательные сообщения.
У меня есть два вопроса:
Есть ли предел тому, как часто устройство будет отвечать на сообщения об обнаружении?
Есть ли способ обойти это, чтобы заставить / обмануть меня, чтобы дать мне ответ во второй раз?
1 ответ
Пара возможных проблем, которые я вижу с M-SEARCH (или нет 100% соответствия в любом случае):
- должен иметь пустую строку в конце
- Максимальное значение MX 5
О неполучении ответов: Конечно, может быть причина (ошибка) для пропущенных сообщений, но учтите, что вы абсолютно не можете доверять доставке сообщений, поскольку это UDP, а не TCP. Вот почему даже в соответствии со спецификацией каждый M-SEARCH должен отправляться несколько раз.
Если я правильно помню, спецификация UPnP смутно предлагает "сотни миллисекунд" в качестве минимальной частоты повторения для сообщений обнаружения.
Источником всего вышеперечисленного является архивный документ UPNP, точнее, моя память об этом. Я почти на 100% уверен, что у DLNA есть дополнительные требования к этим вещам, но я не могу вспомнить, чтобы они были у меня в голове... Эти возможные дополнительные требования, вероятно, не должны заставлять устройства не отвечать вам.
РЕДАКТИРОВАТЬ: О черт, у меня была открытая спецификация DLNA, так почему бы и нет: Вы должны отправить более 1 M-SEARCH. Не должно превышать 10 М-ПОИСКОВ за любой период 200 мс. Оригинал и дубликаты должны быть отправлены в течение 10 секунд. Вам следует дождаться ответов на MX
секунды плюс секунда или две для любых сетевых задержек.