AVRCP 1.4, 1.5 и 1.6: какую версию выбрать разработчику

Разработчик, впервые настраивающий профиль AVRCP в стеке Bluetooth, обычно сталкивается с одним и тем же симптомом: кнопки гарнитуры работают, но название трека на экране не появляется — и причина почти всегда кроется в версии профиля, согласованной между устройствами. AVRCP (Audio/Video Remote Control Profile) отвечает за удалённое управление воспроизведением: play, pause, переключение треков, передачу метаданных и громкости, и каждая версия — 1.3, 1.4, 1.5, 1.6 — добавляет к этому набору новые возможности.

Выбор версии влияет не только на функциональность, но и на совместимость с автомобильными головными устройствами, колонками и смартфонами. В этой статье разберём, чем отличаются AVRCP 1.4, 1.5 и 1.6, какие функции критичны для разных сценариев и как не ошибиться при реализации стека.

Что такое AVRCP и какую роль играет версия профиля

AVRCP работает поверх канала AVCTP и делит устройства на две роли: CT (Controller) — тот, кто отправляет команды, и TG (Target) — тот, кто их выполняет. Смартфон обычно выступает TG, а автомобильная магнитола или наушники — CT. При установке соединения стороны обмениваются поддерживаемыми версиями и возможностями, после чего используется общий знаменатель.

Здесь кроется важный нюанс: если ваше устройство реализует AVRCP 1.6, а смартфон заявляет только 1.4, фактический набор функций ограничится возможностями версии 1.4. Поэтому разработчику важно не просто «поднять» максимальную версию, а корректно реализовать обязательные и опциональные возможности каждой из них.

  • 🎛️ AVRCP 1.3 — базовый контроль воспроизведения и абсолютная громкость (в более поздних уточнениях).
  • 📋 AVRCP 1.4 — метаданные треков, browsing медиатеки, абсолютная громкость.
  • 📁 AVRCP 1.5 — уточнения browsing, работа с папками и списками, исправления спецификации.
  • 🔢 AVRCP 1.6 — нумерация элементов списка, передача обложек через BIP, уточнения поиска.

AVRCP 1.4: минимум для современного устройства

Версия 1.4 — фактический стандарт де-факто для большинства устройств, выпущенных за последние годы. Именно она принесла два ключевых механизма: передачу метаданных (название трека, исполнитель, альбом, длительность) через команду GetElementAttributes и поддержку абсолютной громкости (Absolute Volume), синхронизирующей уровень громкости между телефоном и аксессуаром.

Дополнительно в 1.4 появился интерфейс Browsing — возможность для CT (например, магнитолы) просматривать медиатеку плеера: списки воспроизведения, папки, текущую очередь. Для автомобильной электроники это критично: без browsing водитель не сможет выбрать альбом с экрана головного устройства.

Если ваш продукт — простые наушники с кнопками play/pause, формально хватит и более ранней версии. Но на практике смартфоны и ОС ожидают от аксессуара хотя бы 1.4, и заявление более старой версии может привести к ограниченному поведению на части устройств.

Что добавили AVRCP 1.5 и 1.6

Версия 1.5 — эволюционное обновление. Она не меняет архитектуру, но уточняет и расширяет механизмы browsing: улучшается навигация по иерархии медиатеки, добавляются уточнения по работе со списками и результатами поиска. Для разработчика это означает более предсказуемое поведение при реализации медиатеки на стороне TG.

Версия 1.6 добавила несколько заметных возможностей. Во-первых, нумерацию элементов в списках (item numbering), что позволяет CT быстро переходить к конкретной позиции в длинном плейлисте без последовательного перебора. Во-вторых, появилась стандартизованная передача обложек альбомов с использованием профиля BIP (Basic Imaging Profile) — раньше производители реализовывали это проприетарными способами.

  • 🔍 Улучшенный поиск по медиатеке с уточнённой семантикой запросов.
  • 🖼️ Передача обложек через BIP (только в 1.6).
  • 🔢 Адресация элементов списка по номеру для быстрой навигации.
📊 Какую версию AVRCP вы реализуете в своём проекте?
1.4 — хватает метаданных и громкости
1.5 — нужен улучшенный browsing
1.6 — нужны обложки и нумерация
Ещё выбираю, читаю спецификации

Сравнительная таблица версий

Сводная таблица поможет быстро оценить, какие функции доступны в каждой версии. Учтите: поддержка конкретной возможности зависит от реализации обеих сторон соединения.

ВозможностьAVRCP 1.4AVRCP 1.5AVRCP 1.6
Базовое управление (play/pause/next)ДаДаДа
Метаданные трекаДаДаДа
Абсолютная громкостьДаДаДа
Browsing медиатекиБазовыйРасширенныйРасширенный
Обложки через BIP, нумерация списковНетНетДа

Какую версию выбрать: практические рекомендации

Ответ зависит от типа устройства. Для наушников и портативных колонок достаточно 1.4: метаданные и абсолютная громкость покрывают все пользовательские сценарии, а browsing там обычно не нужен, так как аксессуар выступает в роли CT с минимальным набором команд.

Для автомобильных головных устройств и медиацентров имеет смысл целиться в 1.5 или 1.6: экран позволяет показывать медиатеку, и качество browsing напрямую влияет на пользовательский опыт. Если планируется отображение обложек — без 1.6 и связки с BIP не обойтись.

⚠️ Внимание: заявление версии 1.6 в SDP-записи обязывает корректно реализовать её обязательные возможности. Если устройство заявляет 1.6, но не отвечает на команды browsing, смартфон или магнитола может работать с ним нестабильно — вплоть до разрывов соединения.

☑️ Проверка перед выбором версии AVRCP

Выполнено: 0 / 5

Отдельный совет: реализуйте грациозную деградацию. Если вторая сторона поддерживает только 1.4, ваш стек должен продолжать корректно работать, не отправляя команды, которые та не поймёт.

Совместимость и типичные проблемы

На практике самая частая жалоба — «громкость на телефоне и наушниках живут своей жизнью». Это признак того, что абсолютная громкость не согласована: либо одна из сторон её не поддерживает, либо в ОС она отключена (на Android, например, в настройках разработчика есть отдельный переключатель для абсолютной громкости Bluetooth).

Вторая типичная проблема — пустые или обрезанные метаданные. Возможные причины: плеер не публикует атрибуты, TG не реализует уведомления TRACK_CHANGED, либо CT не подписывается на события. Проверять стоит сниффером HCI-логов, а не методом тыка.

⚠️ Внимание: поведение согласования версий различается между стеками (Android, iOS, автомобильные ОС, embedded-стеки вроде тех, что идут с чипами разных вендоров). Не полагайтесь на тестирование с одним смартфоном — проверяйте минимум на нескольких платформах.

Тестирование реализации

Проверку реализации стоит строить по трём направлениям: соответствие спецификации Bluetooth SIG, межоперационная совместимость и устойчивость к ошибкам. Для формальной сертификации существуют тестовые наборы Bluetooth SIG, но даже без сертификации имеет смысл прогнать базовые сценарии вручную.

Минимальный набор проверок: согласование версий при подключении, обработка всех обязательных passthrough-команд, корректная отправка уведомлений о смене трека и состояния воспроизведения, поведение при обрыве и восстановлении соединения. Особое внимание уделите граничным случаям — длинным строкам метаданных и пустым плейлистам.

Почему нельзя просто взять самую новую версию

Чем выше версия, тем больше обязательных механизмов нужно реализовать и протестировать. Для простого аксессуара 1.6 добавляет сложности (browsing, BIP) без реальной пользы, а ошибки в реализации обязательных функций приводят к проблемам совместимости. Выбирайте версию по фактическим потребностям продукта.

Итоговые выводы

Для большинства разработчиков оптимальная стратегия выглядит так: 1.4 как обязательный минимум, 1.5 — если устройство работает с медиатекой, 1.6 — если нужны обложки и продвинутая навигация по спискам. Заявляйте только ту версию, обязательные функции которой реализованы полностью и протестированы.

Частые вопросы

Совместимы ли устройства с разными версиями AVRCP между собой?

Да. При подключении стороны согласуют общую версию, и соединение работает на уровне возможностей младшей из них. Устройство с 1.6 корректно подключится к смартфону с 1.4, но функции вроде обложек будут недоступны.

Что такое Absolute Volume и почему она важна?

Это механизм синхронизации громкости между CT и TG: при изменении громкости на одном устройстве уровень меняется на обоих. Поддерживается начиная с AVRCP 1.4. Если синхронизации нет, либо одна из сторон её не реализовала, либо функция отключена в настройках ОС.

Нужна ли версия 1.6 для обычных Bluetooth-наушников?

Как правило, нет. Наушники используют базовые команды управления и абсолютную громкость, которые есть в 1.4. Browsing и передача обложек для аксессуара без экрана не имеют практического смысла.

Как узнать, какая версия AVRCP согласована между устройствами?

На Android можно включить запись HCI snoop log в настройках разработчика и проанализировать дамп в Wireshark — там виден обмен SDP-записями и версиями профиля. Готовых пользовательских инструментов для этого практически нет.

Влияет ли версия AVRCP на качество звука?

Нет. AVRCP отвечает только за управление воспроизведением и метаданные. Качество аудио определяется профилем A2DP и используемым кодеком (SBC, AAC, aptX, LDAC и другими).