android - Angular 2+组件内的Chrome(Android)视频自动播放

标签 android angular google-chrome html5-video

什么有效:

如果我将带有“自动播放”(见下文)的视频标签放入 Angular 2+ 组件的模板中,目的是在移动设备上自动播放:

<video muted autoplay>
    <source src="path/to/video.mp4" type="video/mp4" />
</video>

的作用:

  • 将其移动到 index.html(在 Angular 组件之外)
  • 从组件内将其附加到主体:

    window.addEventListener('load', () => {
        document.body.innerHTML += "<video autoplay muted loop>\n" +
                                   "    <source src=\"path/to/video.mp4\" type=\"video/mp4\" />\n" +
                                   "</video>";
    });
    
  • 在组件模板中包含视频,启用“用户控件”,并手动触摸视频上的播放按钮(即不自动播放)

理论:

我认为这不是视频路径无效的问题,因为我可以手动点击“播放”按钮。

根据 herehere ,如果 (1) 视频静音,并且 (2) 视频“可见”,则应允许在移动设备上自动播放。我读到,在这种情况下,“可见”或多或少被定义为“附加到 DOM”,而不是至少在几个地方的“显示:无”。

我最好的理论是 Angular 2+ 将组件粘贴在某种“Shadow DOM”(或类似的)中,这导致移动版 Chrome 认为它不可见。我尝试将组件设置为 encapsulation: ViewEncapsulation.None 以查看是否有所不同,但结果相同。

此外,如果我尝试针对“loaded”或“canplaythrough”事件设置事件监听器并手动调用 videoElement.play(),那么我会得到:DOMException: play( ) 只能由用户手势启动。如果我在 devtools 控制台中调用相同的函数(通过 USB 连接到移动设备),那么它播放。

最后的想法:

看来 Angular 很可能是我的障碍。是否有任何已知的 Angular 设置或变通方法可以让我在 Android Chrome 上的 Angular 2+ 组件中自动播放视频?感谢您的帮助。

(p.s.:在 S.O. 和其他地方有大约一百万个关于在移动 Chrome 上自动播放视频的问题,但它们似乎都没有解决在 Angular 组件或类似组件中执行此操作的问题)

最佳答案

我一直在搜索这个问题,我把 muted 属性放在这样:

[muted]="true" 而不仅仅是 muted

现在可以了

<video [muted]="true" autoplay>
    <source src="path/to/video.mp4" type="video/mp4" />
</video>

Chrome 有一个策略,如果用户没有首先与页面交互,则不允许视频自动播放,但是如果它的静音视频 chrome 允许它。这里的问题是,由于某种原因,当您将 muted 放入 angular 时,muted 值变为 false。

关于android - Angular 2+组件内的Chrome(Android)视频自动播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856562/

相关文章:

android - Lateinit 属性 viewModel 尚未初始化

Android Media Player - 在状态 1 中开始调用

android - 为什么 Android Gradle preDexDebug "Source and destination must be different"构建失败?

java - 安卓截击。无法从有效的 Rest API 获取 JSON 响应

json - autopulous-xdom2jso 中的“xdom 未定义”错误

javascript - 为什么当我调试这个文件时 chrome 会压缩我的 javascript 文件

javascript - 带有 setInterval 的 Angular 2 Observable 未使用异步管道在模板中更新

angular - 一个应用程序中的多个 Angular2 路由器 (RC5)

google-chrome - Google Chrome 显示的是 tomcat 图标而不是我的网站图标

javascript - 如何在 Javascript 中出现错误时中断