Проблемы обнаружения 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. Есть ли ограничение на то, как часто устройство будет отвечать на сообщения об обнаружении?

  2. Есть ли способ обойти, чтобы заставить/обмануть его, чтобы он дал мне ответ во второй раз?


person HalR    schedule 15.10.2013    source источник


Ответы (1)


Несколько возможных проблем, которые я вижу с M-SEARCH (или не на 100% в любом случае):

  • в конце должна быть пустая строка
  • Максимальное значение MX равно 5.

О неполучении ответов: Конечно, может быть причина (ошибка) отсутствия сообщений, но обратите внимание, что вы абсолютно не можете доверять доставке сообщений, поскольку это UDP, а не TCP. Поэтому даже по спецификации каждый M-SEARCH должен посылаться несколько раз.

Если я правильно помню, спецификация UPnP смутно предлагает «сотни миллисекунд» в качестве минимальной частоты повторения для сообщений об обнаружении.

Источником всего вышеперечисленного является архивный документ UPNP. вернее, моя память о нем. Я почти на 100% уверен, что у DLNA есть дополнительные требования к этим вещам, но я не могу припомнить их сразу... Эти возможные дополнительные требования, вероятно, не должны приводить к тому, что устройства не реагируют на вас.

РЕДАКТИРОВАТЬ: О, черт возьми, у меня была открыта спецификация DLNA, так почему бы и нет: вы должны отправить более 1 M-SEARCH. Не должно превышать 10 M-SEARCH за любой период в 200 мс. Оригинал и дубликаты должны быть отправлены в течение 10 секунд. Вы должны ждать ответов в течение MX секунд плюс одна или две секунды для любых сетевых задержек.

person Jussi Kukkonen    schedule 15.10.2013
comment
Спасибо за ваш вклад. Теперь мои вещи определенно работают лучше. Кроме того, я просматривал документ Arch 1.0, поэтому я ценю ссылку на документ 1.1. - person HalR; 15.10.2013
comment
Кроме того, я храню список найденных устройств в словаре, хранящемся в UUID, так что это очень помогает моей реакции, когда мои пользователи спамят кнопку, которая запускает поиск. - person HalR; 15.10.2013