Как создать видеоэлемент HTML5 в iOS, который останется скрытым?

#javascript #html #ios #video

#javascript #HTML #iOS #Видео

Вопрос:

Я пытаюсь создать видеоэлемент в HTML5 / js, чтобы я мог полностью загрузить его в память и воспроизвести без необходимости буферизации.

Проблема в том, что когда я создаю видеоэлемент в iOS, он всегда будет отображать его в полноэкранном режиме, когда я начинаю его воспроизводить. В iOS можно воспроизвести скрытое видео, если использовать тег video со стилем «display:hidden». Однако при попытке сделать это с помощью js-кода это не работает.

 function CreateVideoElement(url, callback)
{
    var element = document.createElement('video');
    element.hidden = true;
    element.controls = false;
    element.style.display = "none";
    element.autoplay = false;
    element.playsinline = true;
    element.onloadedmetadata = function() {
        callback();
    };
    element.src = url;
    return element;
}
  

Комментарии:

1. вы пробовали opacity: 0 ?

2. Display: hidden; не является свойством css. Видимость: скрыта; хотя. Вы также можете попробовать display: none;

3. Але Пло, я не понимаю, на какое из полей кода вы ссылаетесь.

Ответ №1:

Мой коллега нашел решение. Что я сделал video.playsinline = true; , но есть еще один устаревший параметр, который необходимо установить. webkit-playsinline , но его нельзя установить таким образом из-за - . Итак, в конце концов он обнаружил, что вам нужно установить его с setAttribute помощью so, чтобы решение, которое работает, выглядело так:

         function CreateVideoElement(url, callback)
        {
            var element = document.createElement('video');
            element.controls = false;
            element.style.display = "none";
            element.autoplay = false;
            element.setAttribute('webkit-playsinline', 'webkit-playsinline');
            element.setAttribute('playsinline', 'playsinline');
            element.onloadedmetadata = function() {
                callback();
            };
            element.src = url;
            return element;
        }
  

Ответ №2:

  1. полная загрузка видео:

Встроенный в тег HTML5 video атрибут предварительной загрузки. preload=»auto» сообщает браузеру загрузить все видео. (YMMV — Chrome загружает «много» видео, но не все).

Добавление element.preload = "auto" — это трюк, который вы ищете.

  1. display:none не скрывает видео?

Ссылка на MDN

Комментарии:

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

2. Когда я создаю видео с помощью document.createElement, он, похоже, ведет себя не так, как когда я просто помещаю его в тег <video> в HTML

3. <script> var video = document.createElement('video'); video.style.display = "none"; video.controls = false; video.muted = true; video.autoplay = true; video.playsinline = true; video.src = "https://cdn.api.video/vod/vi5CO6tSMhpatqo7FBZYnlLo/mp4/1080/source.mp4"; var div = document.getElementById("div"); div.appendChild(video); console.log(video); </script> Работает в Safari и Chrome. Если вы установите автозапуск и отключение звука, видео загрузится.

4. Я попытался добавить «<div id=»div»> </div>» в html, чтобы сделать то, что вы показали. Это тоже не поможет. Вы уверены, что тестируете это на телефоне, а не на Mac?