Подтвердить что ты не робот

HTML5 Video tag не работает в Safari, iPhone и iPad

Я пытаюсь создать веб-страницу html5, в которой есть небольшое видео, например 13, я преобразовал флеш-версию этого видео в 3 формат:.ogv, используя fireFogg,.webm, используя firefogg, и .mp4, используя приложение HandBrake html script, который я использовал на моей странице:

<video  width="800" height="640" loop preload="false" autoplay  controls tabindex="0">
  <source src="xmasvideo/video.mp4" type="video/mp4" />
  <source src="xmasvideo/M&P-Xmas 2.ogv" type="video/ogv" />
  <source type="video/webm" src="xmasvideo/M&P-Xmas.webm" />
</video>

Видео отлично работает в Chrome и FireFox, но не работает ни в Safari на рабочем столе, ни на iPhone или iPad, выход - это просто пустая страница с элементами управления тегом видео, но ничего не загружено

Обратите внимание, что версия Safari, поддерживающая HTML5-видео

4b9b3361

Ответ 1

У меня была такая же проблема с яблочными устройствами, такими как iPhone и iPad, я отключил режим низкого энергопотребления, и он работал, и вы также должны включить атрибут playsinline в тег видео:

<video class="video-background" autoplay loop muted playsinline>

playsinline только при включении playsinline.

Ответ 2

Еще одно возможное решение для будущих поисковиков: (Если ваша проблема не проблема с миметикой.)

По какой-то причине видео не будут воспроизводиться на iPad, если я не установил флаг control = "true".

Пример: это работало для меня на iPhone, но не на iPad.

<video loop autoplay width='100%' height='100%' src='//some_video.mp4' type='video/mp4'></video>

И теперь это работает как на iPad, так и на iPhone:

<video loop autoplay controls="true" width='100%' height='100%' src='//some_video.mp4' type='video/mp4'></video>

Ответ 3

Ваш веб-сервер может не поддерживать HTTP-байтовые запросы. Это касается веб-сервера, который я использую, и результат заключается в том, что виджет видео загружается и появляется кнопка воспроизведения, но нажатие кнопки не влияет. - Видео работает в FF и Chrome, но не в iPhone и iPad.

Подробнее о здесь, на mobiforge.com о байтовых запросах, в Приложении A: Потоковая передача для Apple iPhone:

Сначала веб-браузер Safari запрашивает контент, и если он аудио или видео, он открывает медиаплеер. Затем медиаплеер запрашивает первые 2 байта содержимого, чтобы гарантировать, что Webserver поддерживает байтовые запросы. Затем, если он поддерживает их, Медиаплеер iPhone запрашивает остальную часть контента по байтам и играет его.

Возможно, вы захотите выполнить поиск в Интернете для "iphone mp4 byte-range".

Ответ 4

Если ваши видео защищены системой входа в систему на основе сеанса, Safari не сможет их загрузить. Это связано с тем, что Safari делает первоначальный запрос для видео, а затем передает задачу QuickTime, что делает другой запрос. Поскольку Safari содержит информацию о сеансе, он пройдет аутентификацию, но QuickTime не будет.

Это можно увидеть, если вы просмотрите журнал доступа к серверу... сначала запрос из Safari, затем запрос из QuickTime. Другие браузеры просто делают один запрос из самого браузера.

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

Ответ 5

Для будущих поисков, у меня был файл mp4, который я уменьшил с помощью Handbrake, используя handbrake-gtk от apt-get, например. sudo apt-get install handbrake-gtk. В Ubuntu 14.04 репозиторий handbrake не включает поддержку MP4 из коробки. Я оставил настройки по умолчанию, удалил звуковую дорожку и создал файл *.M4V. Для тех, кто задается вопросом, они представляют собой один и тот же контейнер, но M4V в основном используется на iOS для открытия в iTunes.

Работала во всех браузерах, кроме Safari:

<video preload="yes" autoplay loop width="100%" height="auto" poster="http://cdn.foo.com/bar.png">
            <source src="//cdn.foo.com/bar-video.m4v" type="video/mp4">
            <source src="//cdn.foo.com/bar-video.webm" type="video/webm">
</video>

Я изменил тип mime между video/mp4 и video/m4v без эффекта. Я также тестировал добавление атрибута control и снова без эффекта.

Это работало во всех проверенных браузерах, включая Safari 7 на Mavericks и Safari 8 на Yosemite. Я просто переименовал один и тот же файл m4v (фактический файл, а не только HTML) в mp4 и перезагрузился на наш CDN:

<video preload="yes" autoplay loop width="100%" height="auto" poster="http://cdn.foo.com/bar.png">
            <source src="//cdn.foo.com/bar-video.mp4" type="video/mp4">
            <source src="//cdn.foo.com/bar-video.webm" type="video/webm">
</video>

Safari, я думаю, полностью ожидает фактически названный MP4. Никакие другие комбинации файлов и mime-type не работали для меня. Я думаю, что другие браузеры сначала выбирают файл WEBM, особенно Chrome, хотя я уверен, что исходный список должен выбрать первый источник, который технически поддерживается.

Однако это не устраняет проблему с видео на устройствах iOS (iPad 3 "новый iPad" и iPhone 6).

Ответ 6

Я обнаружил, что, хотя Safari поддерживает HTML5 Video, Quicktime Player должен быть установлен, чтобы это работало. На сайте, который я построил, который использует HTML5 Video, пользователь получает предупреждение при использовании Safari, говоря им, что у них должно быть установлено Quicktime, иначе они смогут видеть только видео-стенограммы. Надеюсь, это поможет.

Ответ 7

Просто добавьте атрибут muted, и все будет работать нормально.

Источник этого ответа здесь: https://webkit.org/blog/6784/new-video-policies-for-ios/

По умолчанию WebKit будет иметь следующие политики:

Элементы <video autoplay> теперь будут учитывать атрибут autoplay для элементов, которые удовлетворяют следующим условиям:

  • Элементам <video> будет разрешено автоматическое воспроизведение без жеста пользователя, если их исходный носитель не содержит звуковых дорожек.
  • Элементы <video muted> также могут автоматически воспроизводиться без жеста пользователя.
  • Если элемент <video> получает звуковую дорожку или становится без звука без жеста пользователя, воспроизведение будет приостановлено.
  • Элементы <video autoplay> начнут воспроизводиться только тогда, когда они видны на экране, например, когда они прокручиваются в область просмотра, становятся видимыми через CSS и вставляются в DOM.
  • Элементы <video autoplay> останавливаются, если они становятся невидимыми, например, из-за прокрутки из области просмотра.

Элементы <video> теперь будут учитывать метод play() для элементов, которые удовлетворяют следующим условиям:

  • Элементы <video> будут допущены к воспроизведению() без жеста пользователя, если их исходный носитель не содержит аудиодорожек или если для их свойства muted установлено значение true.
  • Если элемент <video> получает звуковую дорожку или становится без звука без жеста пользователя, воспроизведение будет приостановлено.
  • Элементы <video> будут допущены к воспроизведению(), когда они не видны на экране или находятся вне области просмотра.
  • video.play() вернет Обещание, которое будет отклонено, если какое-либо из этих условий не будет выполнено.

На iPhone элементам <video playsinline> теперь разрешено воспроизводиться в режиме реального времени, и они не будут автоматически переходить в полноэкранный режим при начале воспроизведения.  Для элементов <video> без атрибутов playsinline будет по-прежнему требоваться полноэкранный режим для воспроизведения на iPhone. При выходе из полноэкранного режима с помощью жеста щипка элементы <video> без playsinline будут продолжать проигрываться inline.

Ответ 8

Я видел странные проблемы с несертифицированными SSL-сертификатами разработки, в которых мобильный Safari будет с радостью обслуживать вашу страницу, но отказывается показывать видео на "поддельный" SSL-сертификат, даже если вы приняли сертификат.

Чтобы проверить, вы можете развернуть видео в другом месте - или переключиться на http (для всей страницы), и он должен играть.

Ответ 9

Добавление "playinline" работает для меня на Iphone и Ipa, если вы не против, чтобы ваше видео отключилось.

<video muted playsinline>
  <source src="..." type="video/mp4">
</video>

Если вы не хотите, чтобы ваше видео отключилось, но все равно хотите автовоспроизведение, возможно, попробуйте удалить отключенный атрибут с помощью js: Как отключить видео html5 с отключенной поддержкой

Ответ 10

Для .mp4 это работает (сафари для мобильных и настольных):

<video height="250" width="250" controls>
    <source src="video.mp4" type="video/mp4" />
    Your browser does not support the video tag.
</video>

controls="true", упомянутый в вышеприведенном сообщении, не имеет для меня никакого значения, поскольку Apple говорит, что просто использует элементы управления самостоятельно.

Ссылка: "Чтобы использовать аудио или видео HTML5, начните с создания или элемента, указав URL-адрес источника для носителя и включающий атрибут элементов управления. <video src="http://example.com/path/mymovie.mp4" controls></video> "

Источник: https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Introduction/Introduction.html

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

Итак, , если (например, я) у вас возникла проблема .quicktime(или что-то другое, кроме .mp4) в safari, вот работа, которую предоставляет apple. Заметьте, я еще не испытал это сам, и я не настолько счастлив с этим с первого взгляда, просто предоставляя дополнительную информацию.

Ссылка: "Возвратитесь к подключаемому модулю QuickTime. Существует простой способ вернуться к подключаемому модулю QuickTime, который работает почти для всех браузеров, - загрузите предварительно подготовленный файл JavaScript, предоставленный Apple, ac_quicktime.js, из примера HTML Video и включите его на вашей веб-странице, вставив следующую строку кода в HTML-заголовок: <script src="ac_quicktime.js" type="text/javascript"></script>"

Источник: https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/AudioandVideoTagBasics/AudioandVideoTagBasics.html#//apple_ref/doc/uid/TP40009523-CH2-SW6

Обновление: для .quicktime переименуйте .mov перед отправкой на сервер (в файле base64 filetype: video/mov; "), пропустите ac_quicktime.js., затем будет работать в теге html video; Хакерди Хак.

Ответ 11

Начиная с iOS 6.1, больше нет возможности автоматически воспроизводить видео на iPad. Согласно документации Apple, функция автозапуска не работает на Safari во всех устройствах ios, включая iPad:

"Apple решила отключить автоматическое воспроизведение видео на устройствах iOS с помощью как script, так и реализации атрибутов.

В Safari на iOS (для всех устройств, включая iPad), где пользователь может находиться в сотовой сети и заряжаться на каждый блок данных, предварительная загрузка и автоматическое воспроизведение отключены. "

Вы можете прочитать больше в этой документации Apple

Ответ 12

Используя этот код, видео будет воспроизводиться во всех браузерах в сафари, а также с устройствами ios... Идите за ним все (я использовал это и отлично работал)

'

<video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
    	<source src="video/video.mp4" type="video/mp4"></source>
		<source src="video/video.webm" type="video/webm"></source>
		<source src="video/video.mov" type="video/mov"></source>
</video>

Ответ 13

Для IOS, пожалуйста, используйте только исходный файл mp4. В последней версии браузера Safari я обнаружил одну проблему, заключающуюся в том, что браузер Safari не может правильно определить исходный файл, поэтому автозапуск видео не работает.

Давайте проверим приведенный ниже пример -

     <video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
        <source src="video/video.mp4" type="video/mp4"></source>
        <source src="video/video.webm" type="video/webm"></source>
     </video>

Поскольку я использовал mp4, webm в исходных файлах. Safari deosnt поддерживает webm, но все еще в последней версии safari, он выберет webm и не сможет автоматически воспроизвести видео.

Таким образом, для работы автозапуска через поддерживаемый браузер, я бы посоветовал сначала проверить браузер, исходя из того, что вы должны создать свой HTML.

Так что для сафари используйте ниже HTML.

     <video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
        <source src="video/video.mp4" type="video/mp4"></source>
     </video>

Для других, чем сафари,

     <video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
        <source src="video/video.webm" type="video/webm"></source>
        <source src="video/video.mp4" type="video/mp4"></source>
     </video>

Ответ 14

работает, но недавно MacOs имеет политику автозапуска для пользователя: https://webkit.org/blog/7734/auto-play-policy-changes-for-macos/, я решил ту же проблему, используя кнопку для включения звука:

EJM:

<video autoplay loop muted id="myVideo">
  <source src="amazon.mp4" type="video/mp4">
  Sorry, your browser does not support embedded videos...
</video>

<button class="pausee" onclick="disableMute()" type="button">Enable sound</button>

<script>
var vid = document.getElementById("myVideo");
function disableMute() { 
  vid.muted = false;
}
</script>

Ответ 15

Я столкнулся с такой же проблемой. Потому что размер моего видеофрагмента слишком велик. т.е. 2448 пикселей поддержка яблока H.264 Baseline Profile Level 3.0 видео, до 640 x 480 при 30 кадрах в секунду. Обратите внимание: B-рамки не поддерживаются в профиле базовой линии. проверьте это для получения дополнительной информации

Ответ 16

У меня была эта проблема, когда воспроизведение .mp4 в Safari не работало, но в других браузерах все было в порядке. Ошибка, которую я видел в консоли: ошибка media src не поддерживается. В моем случае это оказалось проблемой типа MIME, но не потому, что он не был объявлен как тип MIME в IIS, а скорее был объявлен дважды (один раз в IIS, а также в файле web.config). Я нашел это, пытаясь загрузить файл .mp4 локально на сервере. Я удалил файл конфигурации из местоположения содержимого, которое пытался воспроизвести, и устранил проблему. Я мог бы просто удалить MIME-тип из файла web.config, но в этом случае файл web.config не понадобился.

Ответ 17

Что помогло в моем случае - удалить звуковую дорожку. Он молчал раньше, но он должен был исчезнуть полностью.

В ubuntu:

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

И сафари/рабочий стол начнут проигрывать видео

Ответ 18

Для меня эта проблема вновь появилась с последним обновлением iOS. Видео тег, который работал, больше не работает. Он показывает только белый фон и кнопку воспроизведения, но никаких действий невозможно. У кого-нибудь есть проблемы с последним обновлением iOS (12.2)?

Ответ 19

У меня была такая же проблема - убедитесь, что URL-адрес видео актива поступает из защищенного домена. Наша среда разработки - http, а производство - безопасно. Из-за того, что на видео ссылаются по относительному пути, оно не работает над разработкой. Кажется, проблема в том, что для безопасности Apple требуется видео...

Ответ 20

У меня была похожая проблема, когда видео внутри тега <video> воспроизводилось только в Chrome и Firefox, но не в Safari. Вот что я сделал, чтобы это исправить...

Странный трюк, который я обнаружил, состоял в том, чтобы иметь две разные ссылки на ваше видео, одно в теге <video> для Chrome и Firefox, а другое в теге <img> для Safari. Забавно, но видео действительно воспроизводится в теге <img> в Safari. После этого напишите простой скрипт, чтобы скрыть тот или другой, когда используется определенный браузер. Так, например:

<video id="video-tag" autoplay muted loop playsinline> 
    <source src="video.mp4" type="video/mp4" />  
</video>
<img id="img-tag" src="video.mp4">

<script type="text/javascript">
    function BrowserDetection() {

    //Check if browser is Safari, if it is, hide the <video> tag, otherwise hide the <img> tag
    if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0) {
        document.getElementById('video-tag').style.display= "none";
    } else {
        document.getElementById('img-tag').style.display= "none";
    }               

    //And run the script. Note that the script tag needs to be run after HTML so where you place it is important. 
    BrowserDetection();
</script>

Это также помогает решить проблему тонкой черной рамки/рамки на некоторых видео в некоторых браузерах, где они отображаются неправильно.

Ответ 21

Для моего варианта использования было две вещи:

  1. Я не использовал новую политику атрибутов /webkit playsinline;
  2. Мой video/mime-type или whathathell не был должным образом закодирован, поэтому я использовал этот сайт, чтобы преобразовать его во все нужные мне форматы: https://pt.converterpoint.com/

о/