默认情况下,YouTube可以在Android上全屏播放吗?

默认情况下,YouTube可以在Android上全屏播放吗?,android,youtube,Android,Youtube,YouTube嵌入式视频和Vimeo嵌入式视频之间的行为似乎彼此不同,在iOS/Android平台上也不同 我正在wordpress插件提供的灯箱中显示视频。视频通过具有allowfullscreen属性的iframe嵌入 在iPhone上(使用Chrome浏览器),当用户在YouTube或Vimeo视频上按play时,它会自动进入全屏模式 在android手机上(三星Galaxy S6,使用Chrome浏览器),当用户按下Vimeo上的play时,它也会自动进入全屏模式。当android用户在

YouTube嵌入式视频和Vimeo嵌入式视频之间的行为似乎彼此不同,在iOS/Android平台上也不同

我正在wordpress插件提供的灯箱中显示视频。视频通过具有
allowfullscreen
属性的iframe嵌入

在iPhone上(使用Chrome浏览器),当用户在YouTube或Vimeo视频上按play时,它会自动进入全屏模式

在android手机上(三星Galaxy S6,使用Chrome浏览器),当用户按下Vimeo上的play时,它也会自动进入全屏模式。当android用户在YouTube视频上按play时,它将保留在lightbox中,并在下方显示一些控件,可以选择进入全屏模式

以下是一些屏幕截图:

Vimeo
在灯箱中,然后按play

按下play后,Vimeo自动进入全屏

YouTube
灯箱中的YouTube视频

按play键后,YouTube不会自动全屏显示(但在iPhone上会显示)

问题

有没有办法让YouTube在所有设备上都像Vimeo一样运行?

这一定是解决问题的方法,请检查此答案-

CODEPEN代码

HTML

<h1>One-click play+fullscreen via YouTube API</h1>
Suggested code from this <a href="https://stackoverflow.com/a/20289540/288906">StackOverflow answer</a>

<h2>Instructions</h2>
<ol>
  <li>Click on [play fullscreen]</li>
  <li>Click on the fullscreen button in youtube's player to exit fullscreen</li>
</ol>

<script src="https://www.youtube.com/iframe_api"></script>
<button>play fullscreen</button><br>
<div id="player"></div>

## Safari 8

It works perfectly:

0. Enters fullscreen
0. Exits fullscreen

## Firefox 35

Buggy, annoying but working:

0. Enters fullscreen (on Codepen.io)
0. Enters fullscreen (YouTube.com)
0. Third click: Exits fullscreen

## Chrome 40

Buggy, broken:

0. Enters fullscreen (on Codepen.io)
0. Does nothing
0. Third click: Exits fullscreen but the video fills the iframe, effectively breaking the site. <a href="http://i.imgur.com/CHibfEN.png" target="_blank">Screenshot</a>


## Mobile browsers

This is the default behavior on iPhone, but it cannot work anywhere else (Android, iPad) since 

* to `play()` a video or to `requestFullScreen()` you need a user tap **in the same document** (read: not across the iframe)

This means that

* you can't call `requestFullScreen()` when the video emits the event `onplay`
* you can't trigger `play()` via YouTube API (it would cross the frame) **and** call `requestFullScreen()` in the same tap

So with one tap **either** you play the video **or** get it fullscreen; you'll always need two separate taps if you use YouTube.
主JAVASCRIPT

var player, iframe;
var $ = document.querySelector.bind(document);

// init player
function onYouTubeIframeAPIReady() {
  player = new YT.Player('player', {
    height: '200',
    width: '300',
    videoId: 'dQw4w9WgXcQ',
    events: {
      'onReady': onPlayerReady
    }
  });
}

// when ready, wait for clicks
function onPlayerReady(event) {
  var player = event.target;
  iframe = $('#player');
  setupListener(); 
}

function setupListener (){
$('button').addEventListener('click', playFullscreen);
}

function playFullscreen (){
  player.playVideo();//won't work on mobile

  var requestFullScreen = iframe.requestFullScreen || iframe.mozRequestFullScreen || iframe.webkitRequestFullScreen;
  if (requestFullScreen) {
    requestFullScreen.bind(iframe)();
  }
}

请参照以下内容更改代码:

$(函数(){
$('#video').css({width:$(window.innerWidth()+'px',height:$(window.innerHeight()+'px'});
$(窗口)。调整大小(函数(){
$('#video').css({width:$(window.innerWidth()+'px',height:$(window.innerHeight()+'px'});
});
});

在Android中,您可以使用Youtubeapi并检查全屏视频默认值,但底部有全屏按钮

以布局xml中的webview为例

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical" >
                 <com.google.android.youtube.player.YouTubePlayerView
                      android:id="@+id/youtube_view"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent" />
    </RelativeLayout>

在代码部分使用下面的代码

public class YouTubeVideoPlayer extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
    public static final String API_KEY = "<creae key from dev consol";


    public static final String VIDEO_ID = "<your youtube video id";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /** attaching layout xml **/
        setContentView(R.layout.activity_youtube_webview);

        /** Initializing YouTube player view **/
        YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_view);
        youTubePlayerView.initialize(API_KEY, this);
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult result) {
        Toast.makeText(this, "Failured to Initialize!", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
        /** add listeners to YouTubePlayer instance **/
        player.setPlayerStateChangeListener(playerStateChangeListener);
        player.setPlaybackEventListener(playbackEventListener);

        /** Start buffering **/
        if (!wasRestored) {
            player.cueVideo(VIDEO_ID);
        }
    }

    private YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() {

        @Override
        public void onBuffering(boolean arg0) {
        }

        @Override
        public void onPaused() {
        }

        @Override
        public void onPlaying() {
        }

        @Override
        public void onSeekTo(int arg0) {
        }

        @Override
        public void onStopped() {
        }

    };

    private YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {

        @Override
        public void onAdStarted() {
        }

        @Override
        public void onError(YouTubePlayer.ErrorReason arg0) {
        }

        @Override
        public void onLoaded(String arg0) {
        }

        @Override
        public void onLoading() {
        }

        @Override
        public void onVideoEnded() {
        }

        @Override
        public void onVideoStarted() {
        }
    };

}
公共类YouTubeVideoPlayer扩展YouTubeBaseActivity实现YouTubePlayer.OnInitializedListener{

public static final String API_KEY=“我根据此参考开发了相同的字符串。请检查此参考。这将帮助您

对于无帧视频,请选中此选项:


谢谢@Zotax,所以如果用户拥有最新版本的Youtube应用程序,它将按预期工作?当你说目的是调用该应用程序时,我不确定你的意思。我正在从浏览器内的iframe中加载视频。谢谢,但我不希望它在加载时播放-当用户选择播放v时,我希望它全屏显示ideo.iframe具有allowfullscreen属性,我已将其添加到问题中。这不是你所要求的吗?我还没有时间测试它,但代码中的一些注释并没有让我充满信心:“这是iPhone上的默认行为,但在其他任何地方(Android、iPad)都无法工作。”,“player.playVideo();//在手机上不起作用"。我会检查并确认。谢谢,我会等待。我正在通过iframe包含视频-这看起来像Java?我无法访问任何Java代码。是的,在Java中,在我的本机android应用程序中,我使用相同的代码来解决我的解决方案。这会强制视频占据整个屏幕,但与iOs版本的功能不匹配,因为iOs版本中没有这实际上相当于点击全屏按钮。然而,如果我将其与此处详述的玩家开始事件联系起来:这可能是我将要得到的最接近的事件。
public class YouTubeVideoPlayer extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
    public static final String API_KEY = "<creae key from dev consol";


    public static final String VIDEO_ID = "<your youtube video id";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /** attaching layout xml **/
        setContentView(R.layout.activity_youtube_webview);

        /** Initializing YouTube player view **/
        YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_view);
        youTubePlayerView.initialize(API_KEY, this);
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult result) {
        Toast.makeText(this, "Failured to Initialize!", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
        /** add listeners to YouTubePlayer instance **/
        player.setPlayerStateChangeListener(playerStateChangeListener);
        player.setPlaybackEventListener(playbackEventListener);

        /** Start buffering **/
        if (!wasRestored) {
            player.cueVideo(VIDEO_ID);
        }
    }

    private YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() {

        @Override
        public void onBuffering(boolean arg0) {
        }

        @Override
        public void onPaused() {
        }

        @Override
        public void onPlaying() {
        }

        @Override
        public void onSeekTo(int arg0) {
        }

        @Override
        public void onStopped() {
        }

    };

    private YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {

        @Override
        public void onAdStarted() {
        }

        @Override
        public void onError(YouTubePlayer.ErrorReason arg0) {
        }

        @Override
        public void onLoaded(String arg0) {
        }

        @Override
        public void onLoading() {
        }

        @Override
        public void onVideoEnded() {
        }

        @Override
        public void onVideoStarted() {
        }
    };

}