Android - можно ли получить доступ к мультимедийным файлам локально после их просмотра с помощью VideoView и Mediacontroller?

Я использую MediaController и VideoView показать видео, которые я транслирую по HTTP из Amazon S3.

Я хочу сделать видеофайлы доступными в автономном режиме после того, как они были просмотрены в первый раз. Потоковая передача работает хорошо, мой вопрос в том, где Android сохраняет видеофайлы и действительно ли они доступны после того, как видео полностью просмотрено (и, следовательно, должно быть полностью загружено).

Документация обоих классов не предоставляет никаких подробностей по этому вопросу ни в том случае, если файлы мультимедиа хранятся, ни где они будут храниться. Такое ощущение, что это будет отличной задачей для MediaController, но на самом деле нигде я не нашел никаких намеков на это.

Мое решение теперь будет использовать экземпляр DownloadManager, то есть загрузка файла параллельно во время потоковой передачи, но это выглядит очень, очень неправильно!

1 ответ

Решение

VideoView в Android использует MediaPlayer API, который в случае удаленного мультимедиа будет транслировать его и декодировать / отображать на экране на лету.

MediaPlayer не собирается ничего хранить на флэш-памяти устройства, скорее, он будет использовать циклический буфер в памяти, который используется в качестве кеша предварительной обработки. Более подробная информация об этом доступна в исходном коде реализации NuCacheSource2.

Теперь, что вы можете сделать, чтобы решить вашу проблему, это написать прокси, который будет работать на вашем устройстве или в другом месте, где вы хотите сохранить носитель. При загрузке удаленного носителя, он сможет сохранить его в файловой системе при пересылке данных на Android. MediaPlayer, В этом случае вам нужно будет предоставить MediaPlayer с URL-адресом, указывающим на ваш прокси, а не на исходное местоположение, в котором находится удаленный носитель.