как воспроизвести зашифрованный файл в Android - PullRequest
4 голосов
/ 14 апреля 2010

Мне нужно иметь возможность воспроизводить зашифрованный файл в Android.

Файл AAC.

Единственный способ увидеть это - либо:

  1. расшифруйте файл во внутреннем частном хранилище и укажите проигрывателю этот файл для воспроизведения, или
  2. расшифровывает и декодирует файл в pcm и передает его в AudioTrack.

1 не велик, потому что это занимает много времени.
2 тоже не очень хорошо, потому что я не знаю, как использовать для этого HW-декодер.

Есть идеи?

ТИА.

Ответы [ 2 ]

4 голосов
/ 26 мая 2011

Если у вас есть формат шифрования, который можно расшифровать в потоке, вы можете вставить прокси между источником потока и медиаплеером и прочитать его оттуда.

В приложении NPR Android News приведен пример прокси-сервера, позволяющего устройствам до 2.2 корректно обрабатывать потоки Shoutcast. См. StreamProxy класс в исходном коде, чтобы узнать, как это сделать, и строки 410-418 (по состоянию на последнее обновление) класса PlaybackService для реализации этого. По сути, он просто изменил URL для запуска через локальный прокси-сервер:

if (stream && Build.VERSION.SDK_INT < 8) {
  if (proxy == null) {
    proxy = new StreamProxy();
    proxy.init();
    proxy.start();
  }
  playUrl = String.format("http://127.0.0.1:%d/%s",
      proxy.getPort(), url);
}

Если ваш поток поступает из локального файла, а не из Интернета, тогда вы можете сделать что-то вроде HttpRawResourceServer , который я написал в качестве тестовой программы для взаимодействия с медиаплеером.

0 голосов
/ 15 апреля 2010

Ну, я думаю, что Android не поддерживает формат .AAC.

 3GPP (.3gp) and MPEG-4 (.mp4, .m4a). No support for raw AAC (.aac)

но вы можете изменить файл playerdriver.cpp внутри Android OpenCORE следующая строка ::

mDataSource->SetDataSourceFormatType(PVMF_FORMAT_UNKNOWN); 

до

mDataSource->SetDataSourceFormatType(PVMF_AACFF); 

тогда вы можете воспроизвести файл AAC =)

...