Профили устройств — адаптация к каждому устройству
Реальное оборудование UPnP непоследовательно в том, что оно принимает: один стример хочет 24-битный FLAC, другой воспроизводит только 16-битный PCM, третий лжет о том, какие кодеки он поддерживает. Профиль устройства — это способ научить плагин ограничениям и особенностям конкретного устройства.
Как выбирается профиль. Каждое устройство идентифицирует себя строкой User-Agent при подключении. Профиль говорит: "примени меня, когда user-agent содержит этот фрагмент". Когда устройство подключается, плагин находит соответствующий профиль; если ни один не подходит, используется встроенный профиль Generic Device. Вы можете перечислить несколько фрагментов, разделенных | (например, Linn|ChorusDS|BubbleDS), чтобы один профиль охватывал семейство связанных устройств.
Что контролирует профиль. Ограничения, которые устройство не может превышать — максимальный размер изображения для обложки альбома, допустимый диапазон частоты дискретизации, максимальная битовая глубина, понижающее микширование только до стерео — плюс, когда трек действительно нуждается в преобразовании, в какой выходной формат и с какой частотой дискретизации его преобразовать. Отдельная группа переключателей "проблемного устройства" обходит специфические аппаратные ошибки (обработка raw-PCM, порядок байтов, заголовок HTTP content-length). Они существуют, потому что соответствие UPnP в реальных условиях является неполным; большинство людей никогда их не трогают.
Когда трогать профиль. Только когда конкретное устройство ведет себя неправильно. Из коробки общий профиль, а также предустановленные по умолчанию для каждого устройства для распространенного оборудования, охватывают большинство случаев. Чтобы найти user-agent устройства, чтобы вы могли его настроить, включите отладочное логирование (см. Диагностика), воспроизведите что-нибудь с устройства и прочитайте строку useragent= в журнале.
Самый важный переключатель профиля — force native stream — вообще не связан с ограничениями; он решает, применяется ли что-либо из вышеперечисленного. Это следующая концепция.


Настройки
| Элемент управления | Что он делает |
|---|---|
| Имя | Отображаемое имя профиля. |
| Применяется, когда user-agent содержит | Фрагмент(ы) user-agent, которые устройство должно содержать, чтобы соответствовать этому профилю; разделяйте альтернативы |. Несоответствующие устройства возвращаются к общему профилю. |
| Максимальный размер изображения | Максимальный размер изображения обложки альбома в пикселях, отправляемый на это устройство (160 пикселей — стандарт DLNA; больший размер не всегда поддерживается). |
| Частота дискретизации на выходе / до | Диапазон частоты дискретизации, который принимает устройство; источники вне его преобразуются (принудительное транскодирование). |
| Каналы / только стерео | Понижающее микширование многоканального звука до стерео для устройств, которые поддерживают только два канала. |
| Максимальная битовая глубина | Наибольшая битовая глубина, которую принимает устройство; источники с большей глубиной преобразуются. |
| Выходной формат | Когда требуется транскодирование, формат, в который нужно преобразовать (PCM, FLAC, MP3, AAC, Ogg). |
| Частота дискретизации на выходе | Частота дискретизации, используемая при транскодировании; "same as source" сохраняет оригинал. |
| Не использовать RAW PCM | Оборачивает PCM в контейнер WAV вместо отправки raw L16/L24. Для устройств, которые искажают raw PCM (некоторые Marantz). |
| Принудительно использовать little-endian для PCM-потоков | Отправляет PCM в формате little-endian вместо big-endian по спецификации. Устраняет воспроизведение белого шума на устройствах, которые ожидают little-endian. |
| Длина содержимого | Как заполнять заголовок HTTP Content-Length: Default (правильное значение), None (опустить), PCM Only или Fixed (сторожевое "огромное" значение). Для устройств, которые неправильно обрабатывают заголовок. |