Youtube Api playVideo method doesn't work on some mobile devices

半城伤御伤魂 提交于 2019-12-23 20:03:24

问题


I am trying to create a website for mobile where after clicking on an image a youtube video to play.

I have tested on several Android mobile phones/versions and on some doesn't behaves as intended.

What I mean is it stops at buffering and never reaches to play the video. Another thing that I noticed is that the player works after the user triggers the video to play and not programatically. More detailed if I directly show the youtube player, the user click to play video and afterward click a button/image to play another video this works.

I have posted here the test page that I worked with JsFiddle

$(document).ready(function () {

// Caching jQuery objects
var $body = $('body'),
    $log = $('#log'),
    $yt = $('#ytplayer'),
    $ytwrap = $('#ytwrapper'),
    $choices = $('#choices');


// This code loads the YouTube API
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
$body.append(tag);

// This will become the player object when the API is ready
var player;

// See what kind of device we're using
var userAgent = navigator.userAgent.toLowerCase();
var isAndroid = userAgent.indexOf('android') > -1;
var isIpad = userAgent.indexOf('ipad') > -1;
var isIphone = userAgent.indexOf('iphone') > -1;


window.onYouTubeIframeAPIReady = function onYouTubeIframeAPIReady() {

    player = new YT.Player('ytplayer', {
        videoId: videos[0],
        playerVars: {
            allowfullscreen: 'allowfullscreen',
            playsinline: 0
        },
        events: {
            'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
        }
    });


    window.player = player;
    //hide player 
  slidePlayer(false);

};


function onPlayerStateChange(event) {

    // When a video starts playing,
    // enable the fake fullscreen mode on Android & iPad
    if (event.data == YT.PlayerState.PLAYING) {
        if (isIpad) {
            fakeFullScreen(true);
        } else if (isAndroid) {
            fakeFullScreen(true);
        }
    }

    // On pause: hide the player, show thumbs
    if (event.data == YT.PlayerState.PAUSED) {

        if (isAndroid) {
            // Exit fullscreen
            fakeFullScreen(false);

            // Scroll back to choices
            window.scrollTo(0, playerTop);
        } else if (isIpad) {
            fakeFullScreen(false);
            window.scrollTo(0, playerTop);
        } else if (isIphone) {
            slide(false);
        }
    }
}



$('#vstImageAd .imageWrap img').click(function (e) {

    e.preventDefault();

    var $this = $(this);

    if (player) {

        $this.css("display", "none");
        slidePlayer(true);

        player.playVideo();
    }

});


// When a thumb image is pushed, start the video
$('#choices .playthumb img').click(function (e) {

    var $this = $(this),
        nr = parseInt($this.data('nr'));

    if (!videos[nr]) nr = 1;

    player.loadVideoById(videos[nr]);

    // Hide the thumbs
    slide(true);
 });
});

回答1:


Looks like some functions you are using (player.playVideo()) are disabled in Mobile devices. In my case after using player.playVideo() in some Android devices, the video isn´t played even after tapping the player

https://developers.google.com/youtube/iframe_api_reference?hl=zh-TW#Mobile_considerations

Autoplay and Scripted Playback

The HTML5 element, in certain mobile browsers (such as Chrome and Safari), only allows playback to take place if it's initiated by a user interaction (such as tapping on the player).

Due to this restriction, functions and parameters such as autoplay, playVideo(), loadVideoById() won't work in all mobile environments**



来源:https://stackoverflow.com/questions/26658869/youtube-api-playvideo-method-doesnt-work-on-some-mobile-devices

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!