禁用全屏 iPhone 视频

问题描述 投票:0回答:7

现在连续几天都在与这个问题作斗争......

是否有任何方法或“破解”来禁止在 iPhone 上的 Safari 上全屏播放视频。当然,我已经尝试过“webkit-playsinline”属性,但这仅适用于您自己的应用程序。

参见:

<video class="" poster="" webkit-playsinline>
    <source src="" type="video/ogg" preload="auto">
    <source src="" type="video/mp4" preload="auto">                
</video>

我也尝试将视频放在画布上,但由于看起来视频作为画布的drawImage()方法的来源,目前在iOS上不支持。

我可以使用任何其他方法或替代技术吗?还是我这几天真的浪费了时间?

iphone ios html video canvas
7个回答
78
投票

您将需要 playsinline` 属性:

<video src="file.mp4" playsinline></video>

如果您在 React 组件中使用 JSX,则

Inline
的第一个字母是大写的:

<video src="file.mp4" playsInline/>

此属性自 2016 年起可用。如果您从 2015 年开始阅读本文,则有 一个替代选项


20
投票
    <div id="video-player">
        <video src="http://movies.apple.com/media/us/html5/showcase/2011/demos/apple-html5-demo-tron-us_848x352.m4v"></video>
        <p><a href="javascript:playPause();">Play/Pause</a></p>
   </div>

   <script type="text/javascript">
        // intercept and cancel requests for the context menu
        var myVideo = document.querySelector('video');
        myVideo.addEventListener("contextmenu", function (e) { e.preventDefault(); e.stopPropagation(); }, false);

        // hide the controls if they're visible
        if (myVideo.hasAttribute("controls")) {
            myVideo.removeAttribute("controls")   
        }

        // play/pause functionality
        function playPause() {
            if (myVideo.paused)
                myVideo.play();
            else
                myVideo.pause();
         }

         // essentially you'll have to build your own controls ui
         // for position, audio, etc.

    </script>

这个想法是:

  1. 防止用户进入上下文菜单(以显示控件)
  2. 隐藏任何可能可见的播放器控件

缺点是你必须实现自己的播放器 UI - 但它并不太复杂

*此代码仅用于向您展示如何解决问题,不适用于实际应用程序

对该主题进行更多研究发现:

webkit-playsinline 指示视频元素应内联播放 而不是全屏。

相关标签“视频”可用性 适用于 iOS 4.0 及更高版本。 (仅在 UIWebView 中使用 allowedInlineMediaPlayback 启用 属性设置为 YES。 来源

恐怕无法使用 Safari 中的视频播放器

他们有关于 Canvas 上视频的指南,但您可能知道 IOS 尚不支持它:

canvas 上的视频

本文档总结了 iOS 中当前有关移动媒体内容的限制:

移动视频状态


4
投票

在 JavaScript 中:

yourclassName.setAttribute('playsinline', '');

在 html 中:

<video class="Vidoo" src="https://.../video.mp4" playsinline></video>



2
投票

https://docs.google.com/document/pub?id=1GWTMLjqQsQS45FWwqNG9ztQTdGF48hQYpjQHR_d1WsI


2
投票

<video class="" poster="" playsInline webkit-playsInline> <source src="" type="video/ogg" preload="auto"> <source src="" type="video/mp4" preload="auto"> </video>



1
投票
如果您在 iOS 设备上使用低功耗模式

,则无法自动播放视频。有某种功能可以实现它,但现在,这可以工作。 import { WebView } from "react-native-webview"; <WebView style={styles.container} javaScriptEnabled={true} domStorageEnabled={true} allowsInlineMediaPlayback={true} source={{ html: ` <video id = "video" style="width: 100%; height: 100%; object-fit: cover;" poster="" width="50%" height="50%" muted=" loop="" playsinline autoplay> <source src="https://aparissi.com/wp-content/uploads/2021/10/SplashVideo-1.mp4"> <source> </video> `, }} />

在React Native WebView中,有一个名为“
allowsInLineMediaPlayback

”的属性。将其设置为 true!您还必须在视频标签内添加playsinline。另一件要提到的事情是,如果您也没有静音属性,则无法自动播放视频。 快乐编码!

我设法通过使用 mp4 视频作为预加载器“海报”来使其工作。

0
投票
我的代码:

<video poster="/path/to/video.mp4" autoplay loop muted webkit-playsinline playsinline type="video/mp4"> Your browser does not support the video tag. </video>

我只是想将 mp4 显示为 GIF...我意识到预加载器本身运行良好。 并且..为了防止其他浏览器将来可能出现故障,我只是添加了一个条件来检查当前浏览器是否是iOS浏览器,如果是,那么我使用这个无意义的解决方法,否则,我使用普通的视频标签SRC 和“海报”参数上的预加载 gif。
    

© www.soinside.com 2019 - 2024. All rights reserved.