Аудиовыход на гарнитуре и громкой связи одновременно

Я пытаюсь создать двойную настройку экрана. Планшет Android (Nexus 10) подключен к другому экрану с помощью HDMI.

When playing movies on the tablet (using VLC or other Apps), it will be displayed on both screens properly.
However, the Audio signal is only transferred via HDMI. Using the SOUNDAbout App we managed to have the Audio output on either headset or HDMI.

Я не вижу функцию одновременного установки аудиовыхода для обоих устройств. Я попытался настроить его с помощью Audio Manager, но он работает только для одного канала.

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

am.setSpeakerphoneOn(true);
am.setWiredHeadsetOn(true);

Еще одна вещь, которую я заметил, это API-интерфейс setParameters, который затем передает переменные в аудиосистему платформ. Это может быть ALSA, возможно, решение есть?

8
добавлено отредактировано
Просмотры: 1

1 ответы

Нет никакого способа сделать это таким образом, чтобы гарантировать, что он будет работать на всех устройствах Android. Проблема здесь в том, что на платформах обычно отсутствует какое-либо устройство со списком HDMI + Speaker или HDMI + Headset (т. Е. Аудиоустройство, которое описывает маршрут низкого уровня для одного выходного потока как для HDMI, так и для другого адресата). Не то, чтобы обязательно были какие-либо аппаратные ограничения, но это просто не тот маршрут, который вы обычно хотели бы использовать, и поэтому он не был добавлен.

Я никогда не сталкивался с платформой, на которой для любого типа потока выбирались как HDMI, так и проводная гарнитура. HDMI-динамик можно выбрать для типов потоков RING и ALARM на некоторых платформах, но если на платформе отсутствует комбо-устройство для реализации этого решения маршрутизации, вы все равно получите только аудио в либо HDMI, либо Громкоговоритель.
Взгляните в этом коде , чтобы понять, что я имею в виду. Это то, что OEM-производители, использующие платформы Qualcomm, в значительной степени основывают свой код на. И то, что делает этот конкретный фрагмент кода, выбирает низкоуровневый маршрут вывода для определенного потока. В вашем случае он увидит, что доступен HDMI (AUX_DIGITAL), поэтому он будет выбирать вариант использования «HDMI» (который соответствует чему-то как это ) и немедленно вернуться.

2
добавлено
Благодарим вас за информацию, но можете ли вы сделать что-то вроде копирования потока данных внутри приложения и отправить его на другое устройство вывода самостоятельно?
добавлено автор Jiří Herník, источник
Вы должны убедиться, что AudioPolicyManager фактически выбирает HDMI + Speaker для используемого типа потока (или, по крайней мере, для типа потока some ). Затем ALSADevice должен выбрать комбо-UCM-устройство (например, что-то вроде SND_USE_CASE_DEV_HDMI_SPEAKER ), и, наконец, вам нужно будет обновить файл UCM (snd_soc_msm_blabla), чтобы добавить фактические настройки (то, что я называю низкоуровневой маршрутизацией ) для вашего нового устройства UCM. .. и, конечно, платформа должна фактически поддерживать это.
добавлено автор Michael, источник
Thx & имеет смысл. Чтобы проверить мое понимание: индивидуальная система Android (скажем, я являюсь OEM-производителем и могу распространять свои собственные версии), может содержать модифицированный ALSADevice.cpp , который затем настроил маршрут для HDMI и Speaker out в то же время. Единственное беспокойство в том, что функция getUCMDevice может возвращать только одно аудиоустройство - или это то, что вы подразумеваете с помощью маршрутов? Поэтому сначала я должен добавить маршрут, а затем вернуть идентификатор маршрута/имя, правильно?
добавлено автор Sebastian Roth, источник