Javascript 如何使肖像上的视频保持在自己的区域,当它将倾斜到水平位置时,应该进入全屏

Javascript 如何使肖像上的视频保持在自己的区域,当它将倾斜到水平位置时,应该进入全屏,javascript,android,jquery,css,jwplayer,Javascript,Android,Jquery,Css,Jwplayer,我正在使用JW播放器javascript库。现在想让它在移动设备上以这种方式工作-当你在纵向上时,它需要保持独立,而不使用移动默认播放器,当你将方向更改为横向(水平)时,它应该自动进入全屏。所以我想像youtube那样做。我如何才能做到这一点?您必须使用javascript的orientationchange事件: $(window).on("orientationchange",function(event){...}) 您可以使用以下方法检查“纵向”或“横向”: 通过检查横向模式,您可以动

我正在使用JW播放器javascript库。现在想让它在移动设备上以这种方式工作-当你在纵向上时,它需要保持独立,而不使用移动默认播放器,当你将方向更改为横向(水平)时,它应该自动进入全屏。所以我想像youtube那样做。我如何才能做到这一点?

您必须使用javascript的orientationchange事件:

$(window).on("orientationchange",function(event){...})
您可以使用以下方法检查“纵向”或“横向”:


通过检查横向模式,您可以动态更改JW播放器属性以实现全屏模式。

您必须使用javascript的方向更改事件:

$(window).on("orientationchange",function(event){...})
<video controls id="myvideo">
  <source src="somevideo.webm"></source>
  <source src="somevideo.mp4"></source>
</video>

$(window).on("orientationchange", function (event) {
  if (event.landscape) {
    var elem = document.getElementById("myvideo");
    if (elem.requestFullscreen) {
      elem.requestFullscreen();
    } else if (elem.mozRequestFullScreen) {
      elem.mozRequestFullScreen();
    } else if (elem.webkitRequestFullscreen) {
      elem.webkitRequestFullscreen();
    }
  }
})
您可以使用以下方法检查“纵向”或“横向”:

通过检查横向模式,您可以动态更改JW播放器属性以实现全屏模式。


<video controls id="myvideo">
  <source src="somevideo.webm"></source>
  <source src="somevideo.mp4"></source>
</video>

$(window).on("orientationchange", function (event) {
  if (event.landscape) {
    var elem = document.getElementById("myvideo");
    if (elem.requestFullscreen) {
      elem.requestFullscreen();
    } else if (elem.mozRequestFullScreen) {
      elem.mozRequestFullScreen();
    } else if (elem.webkitRequestFullscreen) {
      elem.webkitRequestFullscreen();
    }
  }
})
$(窗口).on(“方向更改”,函数(事件){ if(事件景观){ var elem=document.getElementById(“myvideo”); if(元素请求全屏){ 元素请求全屏(); }else if(元素mozRequestFullScreen){ elem.mozRequestFullScreen(); }else if(元素webkitRequestFullscreen){ elem.webkitRequestFullscreen(); } } })
在方向更改事件中使用全屏API,并检查模式是否为横向:)

如果视频嵌入到iframe中,请将以下属性添加到iframe中--



$(窗口).on(“方向更改”,函数(事件){
if(事件景观){
var elem=document.getElementById(“myvideo”);
if(元素请求全屏){
元素请求全屏();
}else if(元素mozRequestFullScreen){
elem.mozRequestFullScreen();
}else if(元素webkitRequestFullscreen){
elem.webkitRequestFullscreen();
}
}
})
在方向更改事件中使用全屏API,并检查模式是否为横向:)

如果视频嵌入到iframe中,请将以下属性添加到iframe中--


我们可以使用曲面视图将媒体(包括视频)流式传输到MediaPlayer对象,而不是JW player。
步骤1:

它重写了surfacecreated、surfacestroyed、surfaceChanged和onPrepared上的接口方法

在MainActivity的onCreate方法中,可以开始使用添加到布局中的SurfaceView对象实例化MediaPlayer和SurfaceHolder变量:

    SurfaceHolder videoHolder = videoSurface.getHolder();
    videoHolder.addCallback(this);

    controller = new CustomMediaControllerView(this,true);
    controller.setMediaPlayer(this);
    controller.setAnchorView(layoutVideoFrame);

    try {
        player = new MediaPlayer();
        player.setDataSource(this, video);
        player.prepareAsync();
        player.setOnPreparedListener(this);
    } catch (IllegalArgumentException ex) {
       Log.e(TAG, "onCreate IllegalArgumentException:"+ex.getMessage());
    } catch (SecurityException ex) {
        Log.e(TAG, "onCreate SecurityException:" + ex.getMessage());
    } catch (IllegalStateException ex) {
        Log.e(TAG, "onCreate IllegalStateException:" + ex.getMessage());
    } catch (IOException ex) {
        Log.e(TAG, "onCreate IOException:" + ex.getMessage());
    }
步骤3: 在SurfaceCreated方法中,我们必须将SurfaceHolder指定给Mediaplayer

@Override
public void surfaceCreated(SurfaceHolder holder) {
    player.setDisplay(holder);       
}
在onPrepared覆盖方法中,我们可以启动player&show控制器

 @Override
public void onPrepared(MediaPlayer mp) {
    if(isVideoLoaded) {
        isVideoPrepared=true;
        player.start();
        progressBar.setVisibility(View.GONE);
        controller.show();
        player.seekTo((int) timeinterval);
    }
}
步骤4: 当用户离开活动时,我们必须处理活动生命周期方法中的视频播放和暂停

@Override
public void onStop() {
    super.onStop();
    if(player!=null && player.isPlaying()){
        player.stop();
        player.release();
        player=null;
    }
}


@Override
protected void onPause() {
    super.onPause();
    if(player!=null && player.isPlaying()){
        player.pause();
    }
}

@Override
protected void onResume() {
    super.onResume();
    /*if(!isVideoLoaded){
        isVideoPrepared=true;
    }*/
    if(player!=null && !player.isPlaying()){
        player.start();
    }

}

@Override
public void onDestroy() {
    super.onDestroy();
    if(player!=null && player.isPlaying()){
        player.stop();
        player.release();
        player=null;
    }
}

所以我们可以完全控制视频,所以我建议使用像这样的自定义媒体播放器实现。请分享您的观点,并提出改进此逻辑的建议

我们可以使用表面视图将媒体(包括视频)流式传输到MediaPlayer对象,而不是JW player。
步骤1:

它重写了surfacecreated、surfacestroyed、surfaceChanged和onPrepared上的接口方法

在MainActivity的onCreate方法中,可以开始使用添加到布局中的SurfaceView对象实例化MediaPlayer和SurfaceHolder变量:

    SurfaceHolder videoHolder = videoSurface.getHolder();
    videoHolder.addCallback(this);

    controller = new CustomMediaControllerView(this,true);
    controller.setMediaPlayer(this);
    controller.setAnchorView(layoutVideoFrame);

    try {
        player = new MediaPlayer();
        player.setDataSource(this, video);
        player.prepareAsync();
        player.setOnPreparedListener(this);
    } catch (IllegalArgumentException ex) {
       Log.e(TAG, "onCreate IllegalArgumentException:"+ex.getMessage());
    } catch (SecurityException ex) {
        Log.e(TAG, "onCreate SecurityException:" + ex.getMessage());
    } catch (IllegalStateException ex) {
        Log.e(TAG, "onCreate IllegalStateException:" + ex.getMessage());
    } catch (IOException ex) {
        Log.e(TAG, "onCreate IOException:" + ex.getMessage());
    }
步骤3: 在SurfaceCreated方法中,我们必须将SurfaceHolder指定给Mediaplayer

@Override
public void surfaceCreated(SurfaceHolder holder) {
    player.setDisplay(holder);       
}
在onPrepared覆盖方法中,我们可以启动player&show控制器

 @Override
public void onPrepared(MediaPlayer mp) {
    if(isVideoLoaded) {
        isVideoPrepared=true;
        player.start();
        progressBar.setVisibility(View.GONE);
        controller.show();
        player.seekTo((int) timeinterval);
    }
}
步骤4: 当用户离开活动时,我们必须处理活动生命周期方法中的视频播放和暂停

@Override
public void onStop() {
    super.onStop();
    if(player!=null && player.isPlaying()){
        player.stop();
        player.release();
        player=null;
    }
}


@Override
protected void onPause() {
    super.onPause();
    if(player!=null && player.isPlaying()){
        player.pause();
    }
}

@Override
protected void onResume() {
    super.onResume();
    /*if(!isVideoLoaded){
        isVideoPrepared=true;
    }*/
    if(player!=null && !player.isPlaying()){
        player.start();
    }

}

@Override
public void onDestroy() {
    super.onDestroy();
    if(player!=null && player.isPlaying()){
        player.stop();
        player.release();
        player=null;
    }
}

所以我们可以完全控制视频,所以我建议使用像这样的自定义媒体播放器实现。请分享您的观点,并提出改进此逻辑的建议

请阅读有关javascript全屏API的内容。就小型iOS设备而言,您必须使用默认的移动播放器。不管怎么说,它都会接管播放。当用户点击播放按钮时,我需要在自己的区域播放视频,而不是使用移动播放器,你的意思是没有办法做到这一点@Ethanjwplayer你是说@Ethan Jwplayer我不知道。在Apple设备(小型设备)上,只要按下play键,全屏播放器就会接管。请阅读有关javascript全屏API的内容。就小型iOS设备而言,您必须使用默认的移动播放器。不管怎么说,它都会接管播放。当用户点击播放按钮时,我需要在自己的区域播放视频,而不是使用移动播放器,你的意思是没有办法做到这一点@Ethanjwplayer你是说@Ethan Jwplayer我不知道。在苹果设备(小型设备)上,只要按下播放键,全屏播放器就会接管。我的视频嵌入为iframe@AkshayJand,我该怎么做?当你在纵向视频上时,它需要保持独立,我的意思是,当你在纵向视频上时,它不应该使用手机播放器播放,而是像在桌面上一样。有什么想法吗@AkshayJYes..使用HTML5视频标签你不需要担心外部插件或插件。只需在你的html中嵌入视频标签,它就会自动使用浏览器插件:)我的视频作为iframe@AkshayJand嵌入,我如何做到这一点-当你在拍摄肖像时,它需要保持独立,我的意思是,当你在人像视频上时,不应该用手机播放器播放,而应该像在桌面上一样单独播放。有什么想法吗@AkshayJYes..使用HTML5视频标签,您无需担心外部插件或插件。只需在html中嵌入视频标签,它就会自动使用浏览器插件:)