Как воспроизвести аудио поток байтов в Android? - PullRequest
5 голосов
/ 09 ноября 2010

Я занимаюсь разработкой приложения для Android, которое будет воспроизводить mp3-файлы.Однако mp3-файлы зашифрованы на SD-карте или sqlite.В любом случае, после расшифровки у меня будет поток байтов.Как мне их сыграть?MediaPlayer не принимает входной поток в качестве параметра, поэтому я не могу это учитывать.

Ответы [ 3 ]

2 голосов
/ 09 ноября 2010

Я думаю, вам нужно сохранить поток в файловой системе; тогда вы можете попробовать использовать setDataSource метод MediaPlayer

FileInputStream rawmp3file= new FileInputStream(yourByteArrayAsMp3File);
mediaPlayer.setDataSource(rawmp3file.getFD());

Если вы можете переключиться на источник звука PCM, взгляните на AudioTrack class.

Класс AudioTrack управляет и воспроизводит единый аудио ресурс для Java Приложения. Это позволяет потоковое PCM аудио буферы к аудио оборудованию для воспроизведения. Это достигается «отправка» данных в AudioTrack объект, использующий одну из записей (byte [], int, int) и write (short [], int, int) методы.

0 голосов
/ 08 мая 2013

Взгляните на библиотеку BASS (бесплатно для некоммерческого использования).
Вот ссылка для Android: http://www.un4seen.com/forum/?topic=13225.0

Существует BASS_StreamCreateFile функция:

HSTREAM BASS_StreamCreateFile(
    BOOL mem,
    void *file,
    QWORD offset,
    QWORD length,
    DWORD flags
);

Параметры:

mem     TRUE = stream the file from memory.
file    Filename (mem = FALSE) or a memory location (mem = TRUE).
0 голосов
/ 09 ноября 2010

Это будет нелегко.Я делал это раньше на BlackBerry, поэтому держу пари, что это возможно и на Android.

Если бы я был вами, я бы зарегистрировал нового провайдера для специального протокола «encryptedmp3:».Затем я хотел бы указать это в источнике данных для MediaPlayer:

mediaplayer.setDataSource(this, URI.parse("encryptedmp3://....yourfile"));

Я не уверен, как создать новый обработчик протокола на Android.

Надеюсь, это немного поможет.

Эммануил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...