У нас есть приложение iOS, построенное с помощью PhoneGap/Cordova 4.3.0. Это приложение напрямую загружает внешний веб-сайт, используя <content src="http://example.com/foo" /> в файле config.xml. Все функциональные возможности содержатся на этом веб-сайте, поэтому мы фактически не используем какие-либо локальные файлы HTML или JS.
Как часть функциональности приложения, мы должны воспроизвести некоторые видео. Поскольку приложение предназначено для работы в автономном режиме, мы хотим кэшировать эти видеоролики локально. Поэтому мы загружаем их на устройство с помощью плагина FileTransfer вместе с другими ресурсами, такими как изображения или PDF файлы. После загрузки файлов мы получаем URL-адреса с протоколом file://. У нас также есть возможность использовать протокол cdvfile://. Когда мы используем URL cdvfile:// для показа изображений, изображения отображаются правильно. Однако видео не воспроизводится вообще.
Для воспроизведения видео мы используем стандартные теги HTML5:
<video width="auto" height="100%" controls="controls" autoplay="true">
<source src="..." type="video/mp4" />
</video>
Видео сами работают, и они будут играть правильно из внешнего источника (как в, они будут воспроизводиться, если мы обращаемся к ним с сервера, а не из локальной файловой системы). Я понимаю, что проблема связана с концепциями, связанными с веб-сайтами, такими как политика одного и того же происхождения и с ограничением доступа к локальной файловой системе. Тем не менее, в то же время я должен задаться вопросом, почему именно изображения отлично работают при этих же ограничениях.
То, что я пробовал до сих пор:
- Использование
file://иcdvfile://URL-адресов в качествеsrcвидео. Это не дает никакого визуального эффекта. Экран просто черный. - Использование
iframeсsrc, установленным для URL-адреса видео. При использованииfile://экран по-прежнему остается черным. Однако при использованииcdvfile://появляется интерфейс проигрывателя iOS с кнопкой воспроизведения и полноэкранной кнопкой, но видео не воспроизводится, и также нет временной шкалы. - Добавление локального файла в кордову под названием
video.html, который принимает URL-адрес в качестве параметра и отображает тегvideoс этим URL какsrc. План должен был включить этот файл какiframe, но, видимо, я не могу сделатьiframeдля локального файла. Я пробовал различные URL-адреса, которые могли бы указывать на этот конкретный файлvideo.html(хотя на самом деле я не уверен, что это возможно). Среди тех, которые я пробовал, были:cordova.file.applicationDirectory + 'www/video.html',http://localhost/www/video.html,cdvfile://localhost/www/video.html. - Я искал плагин cordova, который будет воспроизводить видео, но я не смог найти его для iOS. Большинство плагинов, похоже, нацелены на Android.
Теперь, возможно, я ошибаюсь в этом. Как я вижу, "стандартным вариантом использования" для кордовой является то, что вы храните свои файлы HTML/JS/CSS локально. Внешний контент, подобный тому, который я использую, вероятно, немного необычен. Я объясню требования к этому приложению, которые привели меня к использованию этой функции.
- Предполагается, что приложение будет создано для нескольких платформ (хотя мы и начинаем с iOS). Поэтому мы используем PhoneGap.
- Предполагается, что он доступен как онлайн, так и офлайн, хотя весь контент поступает с сервера (контент не создается локально). Вот почему мы загружаем контент и сохраняем его локально.
- Также предполагается автоматическое обновление любой части себя на лету, не требуя обновления из App Store. Вот почему мы используем внешнюю страницу, потому что она имеет
cache.manifest, которая позволяет нам контролировать обновления кода веб-приложения и в то же время разрешать его кэширование локально. Это, наверное, самое главное, потому что, если мы хотим сохранить некоторые файлы локально в Кордове, нам придется повторно реализовать эту функциональность кеша в Javascript (используя как можно более тонкий слой).
В любом случае, моя главная проблема заключается в том, как заставить эти видео работать. Я готов попробовать самые взломанные обходные пути! Если это действительно невозможно с текущими решениями по развитию, то, возможно, вы могли бы дать мне несколько советов о том, как я должен структурировать приложение, чтобы он работал и выполнял мои требования.
Большое спасибо!
