Есть ли способ создать делегированное меню для встроенных видео на YouTube (youtube autoplay chrome)

Я пытаюсь создать делегированное меню для видео и аудиофайлов на основе видео на одной из моих веб-страниц проектов, и все отлично работает в FF, Safari, IE и т. Д., За исключением Chrome.

Я знаю, что существуют ограничения для автозапуска в браузере Chrome, начиная с версии 66. (https://developers.google.com/web/updates/2017/09/autoplay-policy-changes)

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

Воспроизведение, инициированное пользователем, отлично работает даже в Chrome. Итак, что я хочу попробовать, так это делегирование действия пользователя (нажмите внешнюю кнопку воспроизведения) видео iframe, чтобы оно приняло воспроизведение.

   var player = YT.Player( ... )
   var player_elem = $(iframe#youtube_x);
 /* ... */
    case "play":
        // why mute? 
        // => https://developers.google.com/youtube/iframe_api_reference?hl=de#Autoplay_and_scripted_playback
        // => https://stackoverflow.com/questions/50507985/youtube-iframe-api-auto-play-not-working-for-chrome-and-video-resolution-set-not
        player.mute();
        pauseAll(); // 4all player as p => p.pauseVideo() 
        player.playVideo();
        setTimeout(function(){ 
            player.unMute();
                setTimeout(function(){ 
                  state = player.getPlayerState();
                  switch(state){
                    case 5:     // positioning
                    case -1:    // not started
                    case 0:     // ended
                    case 2:     // paused
                        Console.log("cant play content ...");
                            // player_elem.delegat() is deprecated
                        player_elem.on( 'click', null, event.data )

                        break;
                    case 3:     // buffering
                        Notice.console.log("still buffering .. ");
                    case 1:     // played
                        break;
                  }
                }, 300);
            delayedPlayerStateChanged(player_elem.attr("id"), ctrl_bar);
        }, 100);

        delayedPlayerStateChanged(player_elem.attr("id"), ctrl_bar);
        break;

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


person W P    schedule 19.04.2019    source источник
comment
На самом деле я экспериментировал с этим: github.com/WICG/gesture-delegation/ blob/master/explainer.md. и приведу пример, если у меня это сработает.   -  person W P    schedule 20.04.2019


Ответы (1)


История

Сначала я попытался просто добавить упомянутую ( статью @github о делегировании жестов. ком )

delegatestickyuseractivation="media"

Но это не сработало для меня (YTs playVideo() работает только после прямого взаимодействия с iframe видео YT). Я также нашел статью о делегатской активации пользователя и о том, что она еще не реализована должным образом. В этой статье рекомендуется использовать

gesture="media"

вместо этого атрибут html.

Наконец-то

.. браузер принес решение, сообщив мне (в консоли разработки JS), что жест = "медиа" не поддерживается в фреймах, и я должен попытаться использовать

allow="autoplay"

И все, как можно проще.


<iframe id="youtube_{$vid.id}" 
        src="{$vid.uri}?{$vid.player_parameter}" 
        delegatestickyuseractivation="media" 
        allow="autoplay">
</iframe>

Уведомление

Это решение работает только после взаимодействия с пользователем на главной странице, встраивая мультимедийный iframe, например, видео YouTube. Так что это не обходной путь против политики автозапуска Chrome. Это всего лишь способ делегировать взаимодействие пользователя с iframe, чтобы заставить его принимать команды управления мультимедиа YT.

person W P    schedule 20.04.2019