Cordova iOS: загрузка видео с помощью загруженных файлов HTML и видео.

У меня следующая проблема:

  • У меня есть приложение Cordova для iOS.
  • Приложение загружает zip-файл и распаковывает его в «cdvfile: // localhost / persistent / content / myfolder», используя следующие плагины Cordova: org.apache.cordova.file-transfer, org.apache.cordova.file и https://github.com/MobileChromeApps/zip.git
  • Внутри zip-архива находится файл index.html с тегами видео.
  • Мне удалось успешно загрузить и выполнить файл index.html, но видео не загружается.

Я знаю, что видеофайл был успешно распакован, потому что:

  • Я проверяю файл в своем iPad.
  • Я вставляю видео в индекс приложения Cordova (а не в загруженное) следующим образом, и оно работает:

     var videocontainer = document.getElementsByTagName('video')[0];
     var videosource = document.getElementsByTagName('source')[0];
     var newmp4 = cordova.file.documentsDirectory + 'content/myfolder/videos/myvideo.mp4';
     videosource.setAttribute('src', newmp4);
     videocontainer.load();
     videocontainer.play();
    

Но видео не загружается / не воспроизводится внутри загруженного файла HTML. Чтобы понять, что я делаю, мне нужно разработать приложение, которое будет обновляться, загружая его содержимое из zip-архивов, и это содержимое включает страницы с встроенными в них видео. Работает на ПК и Android, но не на iOS.

Я пробовал следующее:

  • Загрузка страницы в "_self". Страница отображается, но не видео.
  • Загрузка страницы в iframe. Тот же результат.
  • Загрузка страницы в inAppBrowser (плагин). Тот же результат.
  • Тег видео с источником src = "videos / myvideo.mp4" (работает в Интернете и Android). Тот же результат.
  • Тег видео с источником src = "./ videos / myvideo.mp4" (работает в Интернете и Android). Тот же результат.
  • Тег видео с источником src = cordova.file.documentsDirectory + 'content / myfolder / videos / myvideo.mp4' (с JS, путем передачи пути в строке запроса, тот же путь, который работает в корневом index.html, как я описал ранее ). Тот же результат.
  • Тег видео с источником src = cordova.file.documentsDirectory + 'cdvfile: //localhost/persistent/content/myfolder/videos/myvideo.mp4'. Тот же результат.
  • Все комбинации предыдущих вещей. Тот же результат ....

Загрузка загруженных ресурсов в DIV не является вариантом, потому что ресурсы (изображения, css, javascripts, аудио, видео и т. Д.) Загружаются в папку другого устройства iOS: папку Documents приложения (cdvfile: // localhost / persistent /).

Кажется, я пробовал почти все ... Почему нетривиально воспроизвести тег видео внутри html, которые оба находятся в папке Documents приложения ???

:-(

РЕДАКТИРОВАТЬ 1: Версия Кордовы = 3.6.3


person Jorge Miranda    schedule 22.11.2014    source источник
comment
Постарайтесь ответить на ваши вопросы немного точнее. Для какой системы вы разрабатываете? (Windows Phone, Blackberry, Android, iOS, ...)? Какие устройства (планшеты, телефоны)? Какие версии вы поддерживаете (iOS 7.1 +, ...)? И, если возможно, покажите пример для вашего файла index.html, который находится внутри загруженного заархивированного файла. И, возможно, структура папок для вашего приложения, чтобы понять, чего вы хотите достичь ... спасибо   -  person Scriptlabs    schedule 10.12.2014
comment
Как я сказал вначале, у меня есть приложение Cordova для iOS. Благодарность   -  person Jorge Miranda    schedule 11.12.2014


Ответы (2)


Решение найдено !!

Почти во всех примерах для Android и iOS загруженный контент выполняется из "cordova.file.documentsDirectory".

Затем, когда вы связываете этот контент в или (с помощью AJAX), все работает нормально (CSS, изображения, ссылки), но теги мультимедиа (и).

Опять же, я не знаю почему, но почти все примеры загружают и разархивируют содержимое, используя этот путь.

После нескольких дней блокировки этой проблемы (я нашел множество форумов, где разработчикам приходилось изменять все свои проекты с помощью таких плагинов, как Cordova Media, jaeger25 Html5Video и т. Д. И т. Д.), Я попытался использовать следующий путь: " cordova.file.dataDirectory "

Я загружаю, распаковываю и выполняю HTML-файлы по этому пути, и все работает без синтаксического анализа / модификации файлов HTML (в моем случае их было тысячи). 100% совместимость с тегами и с относительным путем к источникам в IFRAME !!!!!!

person Jorge Miranda    schedule 11.12.2014
comment
Вы получаете +1 за то, что самостоятельно находите решение и делитесь им с нами! - person Scriptlabs; 14.12.2014

Я предполагаю, что вы кодируете ссылки на видео в index.html внутри zip, который вы распаковываете на устройстве.

Эти ссылки необходимо «обновить» с помощью парсера javascript, прежде чем вы фактически загрузите или перейдете на эту страницу в своем приложении телефонной связи.

Если ваш пример вызван Android, вам обязательно нужно включить сюда плагин HTML5 Video:

https://github.com/jaeger25/Html5Video

В iOS тег будет работать для локальных файлов. Но ссылки должны быть абсолютными.

И ссылки изменятся, если вы перекомпилируете приложение или переустановите его. Файлы будут доступны, но изменится идентификатор приложения и абсолютный путь.

Пример пути iOS:

/var/mobile/Applications/<application UUID>/Documents/path/to/file

Надеюсь, ты решил свою проблему.

person Scriptlabs    schedule 10.12.2014
comment
Обновить HTML-файлы - это не вариант. Загруженный контент отображает видео несколькими способами (по тегу видео, встроенному и / или вставленному с помощью JQuery и т. Д.). В каждом ZIP-файле есть приложение micro-html5 с десятками HTML-кодов и видео с определенными стилями CSS, некоторые из которых воспроизводятся автоматически, некоторые содержат интерактивный контент, синхронизированный с видео, и т. Д. - person Jorge Miranda; 11.12.2014
comment
Использование плагина было невозможным из-за тех же требований к пользовательскому опыту. - person Jorge Miranda; 11.12.2014