什么不有效:
如果我将带有“自动播放”(见下文)的视频标签放入 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>"; });
- 在组件模板中包含视频,启用“用户控件”,并手动触摸视频上的播放按钮(即不自动播放)
理论:
我认为这不是视频路径无效的问题,因为我可以手动点击“播放”按钮。
根据 here和 here ,如果 (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/