Вбудоване відео HTML5 на iPhone проти iPad / браузера


77

Я створив відеопрогравач HTML5 (дуже простий), який чудово працює на iPad і браузері.

Однак, коли я відкриваю його на iPhone, я отримую лише кнопку відтворення, яка при натисканні відкриває власний відеоплеєр у новому вікні поверх усіх моїх речей.

Це означає, що я втрачаю доступ до власних елементів керування та відстеження часу (написаних на Javascript), оскільки відео зараз працює ізольовано.

Чи є спосіб замінити контроль Apple над відео HTML5 на iphone і змусити його працювати як на ipad?

Ура


Технічно ви не можете, але є кілька доступних бібліотек, які роблять це можливим, наприклад iphone-inline-video (розкриття: я це написав)
fregante

Відповіді:


104

Правильно,

Я нікуди не подівся з цим і подав помилку в Apple.

Через пару тижнів вони повернулися до мене, сказавши дуже просто, що я повинен додати "webkit-playsinline" до тегу відео в HTML, а також додати властивість "allowInlineMediaPlayback" на UIWebView.

Зрештою, ось як це виглядає:

HTML

<video id="player" width="480" height="320" webkit-playsinline>

Obj-C

webview.allowsInlineMediaPlayback = YES;

І все працює просто чудово :)

Сподіваюся, це комусь допомагає, оскільки це практично не задокументовано, і єдине місце, де я міг знайти посилання на "webkit-playsinline", було в посиланні iAds, де сказано: "Лише iAds JS".


26
Я просто хотів щось пояснити у вашій відповіді ... якщо ви розробляєте веб-рішення (у цьому випадку UIWebView не вступає в дію), це не спрацює, правда?
natlee75

8
@Andre: Чи можете ви допомогти мені, пояснивши, як я можу використовувати obj-c зі своєю чистою веб-сторінкою HTML5? я хочу відтворити вбудоване відео на iPhone у відеоплеєрі мого сайту html5.
Хірал Вадодарія

9
Якщо ви використовуєте Phonegap / Cordova, ви можете увімкнути вбудовану програму мультимедіа <preference name="AllowInlineMediaPlayback" value="true" />у своєму файлі config.xml І додати webkit-playsinline до <video>тегу
micho

2
Дякую! Я шукав цю інформацію віками.
Пол

2
@Andre Це все ще працює в UIWebView. Нещодавно я пробував це в додатку, тому знаю, що робить. Це була моя вина, я неправильно зрозумів питання оператора та думав, що він намагається зробити це у мобільному Safari (не UIWebView), що є рішенням, яке я зараз шукаю. Ще в 2011 році я зміг відтворювати відео вбудовано в Safari, використовуючи власні елементи керування відео, але це вже не працює.
Пол

11

Поки iOS Safari не реалізує підтримку вбудованого відео, вам потрібно писати відеодекодер мовою, що підтримується Інтернетом. Існують реалізації відеодекодерів, такі як Broadway для H.264 (відео), jsmpeg для mpeg1 та ogv.js (підтримка відео та звуку).

Майте на увазі, що процес декодування відео обчислювально важкий. Очікуйте відносно повільний FPS (± 20).

Для довідки ці хлопці підготували демонстрацію відео, яке ви можете відтворити на своєму пристрої iOS.


4

В iOS 10+

Apple увімкнула атрибут playsinlineу всіх браузерах на iOS 10, тому це працює безперешкодно:

<video src="file.mp4" playsinline>

В iOS 8 та iOS 9

Ви можете обійти цю проблему, імітуючи відтворення за допомогою ковзаючи відео замість того , щоб на самому справі .play()«ІНГ його.

Ви можете використовувати iphone-inline-video, щоб подбати про відтворення та синхронізацію звуку (якщо такі є), і він підтримує <video>роботу як слід.


1

У вас створена програма чи це для мобільного сафарі? Якщо у вас є програма і ви використовуєте UIWebView, вам слід встановити властивість UIWebView allowInlineMediaPlayback.


У мене є обгортка UIWebView! Це звучить як рятівник, але це лише напівроботи. Я отримую події JS (орієнтири), але він все ще працює на повноекранному екрані з власними елементами керування відео з якихось причин: /
Андре

4
Я намагаюся досягти того ж, але для мобільного сафарі (отже, немає UIWebView). Ви маєте натяк?
Cystack

Вибачте, не дуже. Я дивився на це більше року тому і з тих пір не дивився. Хоч удачі!
Андре

1

У iOS 10 додавання атрибута 'playsinline' до відеотегу HTML5 не перешкоджало повноекранному відтворенню на iPhone UIWebview, поки я також не додав атрибут 'controls'. Ось як я змусив це працювати:

<video width="100%" height="240" controls playsinline>
      <source src="movie.mp4" type="video/mp4" >
</video>

Звичайно, і _webView.allowsInlineMediaPlayback=YES;в ViewController.


0

Є кілька способів роботи, я працюю над бібліотекою, щоб дозволити цю функціональність автоматично. Однак, поки Apple не встановить сафарі

webview.allowsInlineMediaPlayback = YES;

тоді нам доведеться використовувати хаки для тієї ж поведінки.

Ви можете перевірити проект тут: https://github.com/newshorts/InlineVideo, щоб перевірити, чи відповідає він вашим потребам.


0

Просто додайте до вашого config.xml наступне: <preference name="AllowInlineMediaPlayback" value="true" /> інакше UIWebView нехтуватиме атрибутом webkit-playsinline.


-1

Ви можете легко дозволити це, додавши це до вашого config.xml: UIWebView тоді повинен поважати атрибут webkit-playsinline.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.