我有一个能够从远程RTCPeerConnection
获取MediaStream
的Web前端。
一旦我得到这个stream
,我就把它传递给一个<video>
标签,autoPlay
集合。
(注意:前端在 React 中,所以我们将流作为带有ref
的srcObject
传递。
在火狐中一切正常。
在Chrome 中,仅当我在应用程序启动时执行此操作时,才会显示视频:
- 调用
navigator.mediaDevices.getUserMedia({ ... })
,audio
或video
设置为 true - 获取
getUserMedia
返回的 MediaStream ,并将其保存在全局或顶级变量中
现在,这对我来说没有任何意义,因为:
- 我不想要求用户允许访问其麦克风或网络摄像头以显示视频
- 这只发生在Chrome中,Firefox工作正常
- 这发生在
localhost
和https://
"公共"域上,因此这可能不是安全问题 - 这似乎不受玩
<video>
标签的autoPlay
、controls
等属性的影响。
我在这里错过了什么明显的东西?
Chrome 在 2018 年引入了自动播放限制。当getUserMedia处于活动状态时,这些不会生效。 如果您的应用逻辑在 Chrome 启动时有效,并且 --autoplay-policy=no-user-gesture-required,则表明情况确实如此。本文还提供了一些背景信息和可能的解决方法,例如引入用户手势。
(不,这些限制没有意义...