Подтвердить что ты не робот

Android> 4.0: Идеи, как записывать/записывать внутренний звук (например, STREAM_MUSIC)?

Несколько месяцев назад, с Android ICS (4.0), я разработал модуль ядра Android, который перехватил "pcmC0D0p" -модуль для извлечения всего системного аудио.

Моя цель - передать весь звук (или, по крайней мере, воспроизведенную музыку) на удаленный динамик через AirPlay.

Работал модуль ядра, но там, где несколько проблем (версии ядра, root-привилегии и т.д.), поэтому я прекратил работать над этим.

Теперь у нас есть Android 4.1 и 4.2, и у меня есть новая надежда!

У кого есть идея, как захватить аудио в Android?

У меня были следующие идеи:

  • Подключить через bluetooth к тому же телефону, установить маршрутизацию в BT и захватить аудио на "другом конце": это не должно работать

  • Перехватите аудио с помощью модуля ядра, как это делалось раньше: hardcore, заставить его работать, но не применимо

  • JACK Audio Connection Kit: к сожалению, Android использует "tinyALSA", а не "ALSA". TinyALSA НЕ поддерживает любые фильтры, такие как JACK (но это приносило идею с помощью модуля ядра)

  • Используйте PulseAudio в качестве замены для AudioFlinger, но это также неприменимо


ИЗМЕНИТЬ (забыли):

  1. Я скомпилировал "tinymix" (baby-версия ALSA-mixer) из tinyALSA (ALSA на Android) и попытался направить аудио-выход на микрофон, но без успеха (непонятно для меня). И это также требует укоренения: не применимо

  2. Я тестировал OpenSL ES, но я не C-crack, и это закончилось тем, что "я могу записывать микрофон, но не более" (может быть, я ошибся?)


Я только что нашел ROUTE_TYPE_LIVE_AUDIO:

Устройство, поддерживающее прямую аудио маршрутизацию, позволит использовать медиа-аудио поток для маршрутизации в поддерживаемые адресаты. Это может включать внутренние громкоговорители или аудиоразъемы на самом устройстве, устройства A2DP, и многое другое.

После запуска эта маршрутизация прозрачна для приложения. Все аудио, воспроизводимое в медиапотоке, будет перенаправлено на выбранный назначения.

Может быть, это помогает в любом случае?

У меня заканчиваются идеи, но я хочу "взломать этот орех", может быть, кто-то может мне помочь?

EDIT:

Я действительно новичок в C и кодировании ядра (но я успешно создал кросс-скомпилированный модуль аудио-перехвата) - но разве он не может прослушивать в точке, где данные PCM идут от userpace (JAVA, C-layer?) в пространство ядра (tinyALSA, модуль ядра), без взлома и укоренения?

4b9b3361

Ответ 1

Вы должны передавать аудио-трафик через локальный сервер сокетов:

  • Создать локальный сервер сокетов

  • Изменить аудиопоток HTTP-потока на путь через локальный сервер сокетов, например, для адреса

    http://example.com/stream.mp3  ->
    
    http://127.0.0.1:8888/http://example.com/stream.mp3
    

    где 8888 - ваш порт сокета.

  • Воспроизвести

    http://127.0.0.1:8888/http://example.com/stream.mp3 
    

    со стандартным медиаплеером

  • Прочитайте все входящие запросы на порт 8888 на локальном сервере сокетов, проанализируйте его и перейдите на сервер example.com.

  • Прочтите ответ на example.com и передайте его локальному клиенту (медиаплеер). ЗДЕСЬ вы можете захватить аудиопоток!