Intereting Posts
Изменить порядок содержимого для eclipse для разработки Android Как реализовать рекламные объявления для родных в Listview с помощью CursorAdapter Повреждение Firebase из-за исключения нулевого указателя Правильный / лучший способ справиться с проблемой транзакции Android Fragment Как добавить дополнительные ярлыки на панель инструментов андроид-студии? Как указать, какие версии инструментов для сборки Android в Maven Загрузка контактного изображения через LOOKUP_KEY и метод openContactPhotoInputStream Ошибка разработки приложения для Android: «Плохой блок XML: размер заголовка 60 или общий размер 3932356 больше размера данных 0» Кнопка плавающего действия неожиданное изменение гравитации анкера Nullpointerexcepiton на курсор при выборе фотографии из галереи на фрагменте диалога Как добавить строку 1dp в нижней части моей ячейки textview (а не таблицы) Не удалось получить фид страницы facebook в моем приложении. Конфликта strings.xml в манифесте Android Как Android Studio знает о новых версиях зависимостей? Активность дочерней активности TabActivity с BroadcastReceiver остается в фоновом режиме

Воспроизведение видео из файловой системы Chrome, не работающей на Android

Я пытаюсь создать автономный видеоплеер, который будет загружать видеоконтент с моего сайта для последующего просмотра в автономном режиме с помощью элемента видео HTML5. Приведенный ниже код отлично работает в Chrome для настольных компьютеров, но не на мобильных устройствах (смартфон Nexus S, планшет Nexus 7, 4.1, поскольку только он запускает хром, что требуется для файловой системы api). Я использую API файловой системы, который поддерживается хром как на рабочем столе, так и на мобильном устройстве.

Я подтвердил, что он правильно хранит файл на мобильном устройстве, и я могу получить файл правильно, но по какой-то причине после извлечения видео из локальной системы хром не хочет воспроизводить видео. Это верно, использую ли я элемент видео html5 или я непосредственно перемещаюсь по URL-адресу файловой системы. Когда я использую элемент html5 video, он возвращает ошибку media_err_not_supported. Я подтвердил, что устройство может воспроизводить видео, если я перейду непосредственно к нему на своем сервере (без его первого сохранения с использованием файловой системы api), поэтому проблема не является проблемой кодека или видеоформата. Я также использую тип mime видео / mp4 в обоих случаях.

Опять же, это работает на рабочем столе, но не на мобильных устройствах. Есть идеи?

Вот код, который мы используем:

<!DOCTYPE html > <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"> </script> <script type="text/javascript"> var _fs; var filename = "test3.mp4"; var diskSpaceRequired = 10 * 1024 * 1024; $(document).ready(function () { window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; function onInitFs(fs) { _fs = fs; getVideo(fs); } if (!!window.requestFileSystem) { window.webkitStorageInfo.requestQuota( window.webkitStorageInfo.PERSISTENT, diskSpaceRequired, // amount of bytes you need function () { }, function () {} ); window.requestFileSystem(window.PERSISTENT, diskSpaceRequired, onInitFs, function () { alert('error'); }); } else { alert('not supported'); } $("#play").on('click', playVideo); $("#ourVideo").on('error', function(e) { console.log('ERROR!!!', e, arguments); console.log($("#ourVideo")[0].error); }); }); function playVideo() { _fs.root.getFile(filename, {}, function (fileEntry) { $("#ourVideo").attr('src', fileEntry.toURL()); fileEntry.file(function (file) { var reader = new FileReader(); reader.onloadend = function (e) { $("#ourVideo").get(0).play(); }; reader.readAsText(file); }, errorHandler); }, errorHandler); } function getVideo(fs) { fs.root.getFile(filename, { create: true }, function (fileEntry) { fileEntry.createWriter(function (fileWriter) { fetchResource(fileWriter); }, errorHandler); }, errorHandler); } function errorHandler(e) { console.log('error', e); } function fetchResource(fileWriter) { console.log('fetchresource'); var xhr = new XMLHttpRequest(); xhr.responseType = "arraybuffer"; xhr.open("GET", "http://mydomain.com/trailer.mp4", true); xhr.onload = function(e) { if (this.status == 200) { var bb = new WebKitBlobBuilder(); bb.append(this.response); var blob = bb.getBlob("video\/mp4"); fileWriter.write(blob); } else { console.log(this.status); } }; xhr.send(); } </script> <title>foo</title> </head> <body> <input type="button" value="Play Video" id="play"/> <video id="ourVideo" controls=""> <source id="vidSource" type="video/mp4"/> </video> </body> </html> 

Проблема выглядит так, как ваш Android-хром не имеет доступа к файловой системе Android правильно, для этого вы можете использовать сервер nanoHttpd для доступа к локальным файлам android на устройстве или SD-карте. Для сервера NanoHttpd используйте этот один класс в вашем приложении и передайте местоположение медиафайла как http://localhost:8081/sdcard/(your_media_location).mp4

Или получить nanoHttpd из https://gist.github.com/1893396

Я думаю, что это более точно для доступа к файлам sdcard, чем прямое обращение к ним


Попробуйте изменить html-часть на

 </head> <body> <input type="button" value="Play Video" id="play"/> <video id="ourVideo" controls=""> <source src="video1.mp4" type= "video/mp4"> <source src="video1.ogv" type= "video/ogg"> </video> </body> 

Вы можете преобразовать ваш mp4 в ogv, используя http://video.online-convert.com/convert-to-ogg и поместить файл ogv в том же месте в mp4

** для получения дополнительной информации ознакомьтесь с этими http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/

Элемент HTML5 <video> на Android не воспроизводится