Правильный способ сделать это - создать собственную прошивку и выполнить расшифровку как часть пользовательского кодека OpenCORE.Это, конечно, ограничит вас устройствами, на которые вы можете установить эту прошивку.
Имейте в виду, что остальное это несколько умозрительно.На самом деле мне нужно сделать что-то похожее на то, что вы описываете, но у меня нет времени на решение этой проблемы в течение нескольких месяцев.Итак, я опишу это так, как я подхожу к проблеме.
Одним из решений является решение, описанное в ответе twk.Вам не нужно использовать SD-карту, но вы, вероятно, должны иметь доступный для чтения временный файл в локальном хранилище файлов приложения (getFilesDir()
).Загрузите первый блок, расшифруйте его, запишите его как полный читаемый миром файл MP3 (но с подходящим скрытым каталогом / путем) и передайте его в MediaPlayer
через setDataSource()
.Пока он воспроизводится, вы загружаете / дешифруете и настраиваете второй экземпляр MediaPlayer
, который начинает воспроизведение, как только заканчивается первый, для максимально плавного перехода, насколько это возможно.Затем вы сбрасываете первый MediaPlayer
и повторно используете его с вашим третьим чанком, пинг-понг между ними.
Соответствующее решение будет в комментарии jleedev.Это почти то же самое, за исключением того, что вы предоставляете FileDescriptor
через ContentProvider
.У этого есть опция, позволяющая вам использовать сокет, который может позволит вам избежать временного файла.Однако ContentProvider
сам по себе должен быть общедоступным, и поэтому временный файл с неясным каталогом может на самом деле быть более закрытым.
Если вы беспокоитесь о том, что эти вещи можно прочитатьпод другими процессами, пожалуйста, поймите, что MediaPlayer
сам (или, скорее, подсистема OpenCORE) находится в другом процессе.Кроме того, ваш предложенный HTTP-сервер также доступен для чтения на устройстве.Таким образом, защита от неясности - ваш единственный жизнеспособный вариант, если вы собираетесь позволить MediaPlayer
выполнить декодирование.
AFAIK, NDK не предоставляет доступ к OpenCORE, хотя я признаюсь, что ограниченный опыт NDK,так что я могу ошибатьсяКонечно, существуют и другие MP3-декодеры (ffmpeg
/ mplayer
и т. Д.), Хотя насколько легко они могут быть преобразованы в библиотеку NDK, неясно.
Итак, все сводится к тому, кто выпытаемся защищаться от.Если вы пытаетесь защититься от пользователя, вам, вероятно, придется как-то его самостоятельно расшифровать.