2013-09-08 3 views
0

Я хочу написать приложение, которое воспроизводит прогрессивно загруженный звук с удаленного источника http через стандартный Android mediaplayer, но я хочу также сохранить копию аудиофайла на SD-карту. Это оказалось трудной проблемой:Прогрессивная загрузка аудиофайла

1) Мы передаем uri медиаплееру и затем «вырезаем из цикла» во время воспроизведения, потому что mediaplayer разговаривает непосредственно с пультом, тем самым не имея доступа к байтам воспроизводимой

2) Там, кажется, не быть одним из вариантов для Android, чтобы писать загруженные биты на диск, ни обратного вызова для доступа скачанные данные

3) Несмотря на то, что можно встраивать веб-сервер в наше приложение (см nanohttpd), а затем передать localhost uri в mediaplayer, это похоже на ужасный kludge

Я пропустил более простой способ? Это должна быть решена проблема ?!

Редактировать: Возможно, более простой вопрос: если у меня есть буфер в памяти, содержащий музыку, могу ли я воспроизвести его? Кажется смешным, что я должен записать его на диск или использовать веб-сервер, чтобы получить mediaplayer, чтобы воспроизвести его.

ответ

1

Да, есть способ сделать это. Создайте локальный прокси-сервер и подключите MediaPlayer к этому. См. Мой ответ here для получения более подробной информации.

Редактировать: После просмотра этого на моем ПК вместо моего телефона я заметил, что вы упоминаете о встраивании сервера в свое приложение. Если все сделано правильно, оно легкое и простое. И это даст вам доступ к необработанным данным. Я не думаю, что это «kludge» вообще.

+0

У вас к человеку-в-середине ваше собственное приложение .. Я бы назвал это kludge. Это также добавляет латентность и сложность. И, как проблема безопасности, он открывает порт на вашем устройстве, из которого любой может высасывать музыку (это особенно опасно, поскольку прокси-сервер будет расшифровывать зашифрованные файлы из своего корня doc, а затем обслуживать музыку в обычном тексте медиаплееру). Я ценю ответ, Дейв, но я посмотрю, смогу ли я найти другой способ. Возможно, через api OpenSL ES. – Fixee

+0

Подойдите сами. Но ... 1) Используя NIO, латентность в моем опыте пренебрежимо мала. 2) Я не вижу проблемы с безопасностью, особенно потому, что вы собираетесь писать на удобочитаемую SD-карту. Если вы создаете прокси-сервер, вы можете ограничить доступ и использовать безопасные носители по мере необходимости. В конце концов, это всего лишь обходной путь, предоставляемый доступным API. Однако мои проблемы больше для видео, поэтому я не изучил опцию OpenSL. Мне было бы интересно узнать, что вы придумали. Удачи! – Dave

+0

Я напишу шифрованный текст на SD. Как вы предлагаете ограничить доступ к прокси? (Я знаю один способ, но мне бы хотелось услышать, о чем вы думаете, когда говорите об этом.) – Fixee

Смежные вопросы