HTML5 视频控件在 Android 设备上以全屏模式消失

Posted

技术标签:

【中文标题】HTML5 视频控件在 Android 设备上以全屏模式消失【英文标题】:HTML5 video controls disappear in full-screen mode on android devices 【发布时间】:2017-06-14 17:14:22 【问题描述】:

我正在开发一个跨平台应用程序,使用带有角材料前端的cordova。

我在 md 卡列表中使用 html5 视频标签来播放带有外部 url 的视频。内联时,视频可以正确播放,并按预期显示本机控件。

    <video class="project-video" video-directive item="$ctrl.project" ng-src="$ctrl.project.videoUrl | trustUrl" preload="auto"
      controls poster="$ctrl.project.video.thumbnail_url">
      Your browser does not support the video tag.
    </video>

但是,当我单击“切换全屏”按钮时,视频确实会进入全屏状态,但默认控件会消失。在此之后我无法返回应用程序 - 原生 android 后退按钮不会关闭全屏 - 而是关闭整个应用程序。

我正在寻找的解决方案将使控件即使在全屏模式下也始终出现;这可以在 ios 上运行相同的代码。

因此,如果我能帮上忙,我不想花时间开发我自己的自定义视频控件只为 android !所以请不要发布关于如何做到这一点的答案(在 SO 和其他地方已经有很多可用的答案)。

我使用的是魅族 m2 note android 设备。

谢谢!

编辑:

控件仍然存在,但在 css 中的阴影 DOM 树中显示为大小为 0 x 0px。即使我使用 !important 标志在 chrome 开发工具中更改它们的大小,它们也不会显示出来。

有什么想法吗?

【问题讨论】:

您是在使用fastclick还是在设备中的mozilla浏览器中进行测试? 两者都不是。我正在使用终端命令运行应用程序 cordova 运行 android --device 对缺少控件的问题没有多大帮助,但仅供参考,您可以override the back button behavior(如果全屏显示,则可以缩小视频)。 @AdamDiment 您好,感谢您的更新。已经发布了答案。但不确定是否会获得赏金,因为我猜包括宽限期在内的赏金期已经结束:(如果你能提供赏金那就太好了。 【参考方案1】:

这是魅族设备使用的 Flyme OS 的问题。由于控件可用且不可见,因此应通过升级 Flyme 操作系统来解决。

请更新 Flyme 操作系统以解决此问题,因为旧版本的 Flyme 似乎在全屏视频模式方面存在一些问题。希望能帮助到你。干杯

【讨论】:

【参考方案2】:

设置允许退出全屏的值。

var videoElement = document.getElementById("myvideo");

 function toggleFullScreen() 
if (!document.mozFullScreen && !document.webkitFullScreen) 
  if (videoElement.mozRequestFullScreen) 
    videoElement.mozRequestFullScreen();
   else 
    videoElement.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
  
  document.mozFullScreen = true;
  document.webkitFullScreen = true;
 else 
  if (document.mozCancelFullScreen) 
    document.mozCancelFullScreen();
   else 
    document.webkitCancelFullScreen();
   
 
 

document.addEventListener("keydown", function(e) 
if (e.keyCode == 13) 
  toggleFullScreen();

, false);

添加这两行 ..

document.mozFullScreen = true;

document.webkitFullScreen = true;

如果你想要更好的东西

 fullScreenButton.addEventListener("click", function() 
 if (!document.fullscreenElement &&    // alternative standard method
  !document.mozFullScreenElement && !document.webkitFullscreenElement &&      !document.msFullscreenElement )   // current working methods
 if (video.requestFullscreen) 
  video.requestFullscreen();
  else if (video.msRequestFullscreen) 
  video.msRequestFullscreen();
  else if (video.mozRequestFullScreen) 
  video.mozRequestFullScreen();
  else if (video.webkitRequestFullscreen) 
  video.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
 
 else 
 if (document.exitFullscreen) 
  document.exitFullscreen();
  else if (document.msExitFullscreen) 
  document.msExitFullscreen();
  else if (document.mozCancelFullScreen) 
  document.mozCancelFullScreen();
  else if (document.webkitExitFullscreen) 
  document.webkitExitFullscreen();
 

  );

【讨论】:

谢谢,但这并不能回答问题。我希望控件出现,而不是对全屏功能进行编程访问【参考方案3】:

在您的代码中如何处理您未提及的控件属性完全可能导致问题

<video id="myvideo">
  <source src="path/to/movie.mp4" />
</video>

<p onclick="toggleControls();">Toggle</p>

<script>
var video = document.getElementById("myvideo");

function toggleControls() 
  if (video.hasAttribute("controls")) 
     video.removeAttribute("controls")   
   else 
     video.setAttribute("controls","controls")   
  

</script>

【讨论】:

试过这个答案 - 控件仍然存在,但显示在 css 的阴影 DOM 树中,大小为 0 x 0px。即使我使用 !important 标志在 chrome 开发工具中更改它们的大小,它们也不会显示

以上是关于HTML5 视频控件在 Android 设备上以全屏模式消失的主要内容,如果未能解决你的问题,请参考以下文章

iPad (iOS6) 上的 Safari 无法缩放 HTML5 视频以填充 100% 的页面宽度

在这个简单的页面中,Android Chrome 上的 HTML5 视频控件不会跨越整个视频宽度

在 Windows 上以全屏模式运行 chrome

用于 android html5 视频的 chrome 上的黑屏

HTML5 视频不会在 Android 设备上循环播放

HTML5 视频 - 在 Android 设备上精确寻找帧?