小程序
小游戏
企业微信
微信支付
扫描小程序码分享
在开发时需要用到getUserMedia获取视频流的功能,安卓能打开,ios用自带的浏览器也可以打开,但是用微信打开链接不行,想问下官方,是不是ios不支持getUserMedia获取视频流呢?
7 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
ios14以下微信内置浏览器就不支持getUserMedia获取视屏流,可以去看下can i use以及微信内置浏览器版本
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
最近遇到同样的问题,ios微信端video播放getUserMedia的视频流直接白屏,也没报错,后来试了,只有第一次getUserMedia的stream不能播放,下一次就能播放了,代码如下:
const sleep = (time = 0) => new Promise((res) => { setTimeout(res, time); }); const checkIsWechat = (() => { const agentInfo = navigator.userAgent.toLowerCase(); const isWechatEnv = ['micromessenger', 'wechat', 'weixin'].some((sign) => agentInfo.includes(sign)); return () => isWechatEnv; })(); const cameraVideoInit = async (video) => { // 以后置摄像头为例 const options = { audio: false, video: { facingMode: 'environment' } }; if (checkIsWechat()) { const tapStream = await navigator.mediaDevices.getUserMedia(options); const tapVideoTracks = tapStream.getVideoTracks()?.[0] ?? null; // 第一次不延迟关闭摄像头还是没办法播放视频 await sleep(1000); tapVideoTracks?.stop?.(); // 保险起见再延迟100ms await sleep(100); } try { const stream = await navigator.mediaDevices.getUserMedia(options); if (this._hasStop) return; video.srcObject = stream; document.body.append(video); const loadedHandler = (evt) => { if (evt) { video.onloadeddata = null; } // video.play()在部分机型上会报错:play()can only be initiated by a user gesture // 此处将play放在点击事件中,报错了就向外抛出事件,外部实际的交互去触发play video.click(); video.play(); }; video.onloadeddata = loadedHandler; video.onclick = () => { video.play().catch(() => { window.dispatchEvent('manual-play', new CustomEvent({ detail: { callback: () => video.play() } })); }); }; // ios的微信浏览器必须先手动触发一次play,loadeddata事件才能执行 if (checkIsWechat()) { sleep(3000).then(() => { if (video.onloadeddata) { loadedHandler(); } }); } window.dispatchEvent(new CustomEvent('camera-init')); } catch (err) { window.dispatchEvent(new CustomEvent('camera-error', { detail: err })); } }; export default cameraVideoInit;
你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现的链接,并详细描述下复现流程
同样的问题 解决了么 楼主
请问楼主解决了吗?
遇到了同样的问题,请问你这边解决了吗?
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
ios14以下微信内置浏览器就不支持getUserMedia获取视屏流,可以去看下can i use以及微信内置浏览器版本
最近遇到同样的问题,ios微信端video播放getUserMedia的视频流直接白屏,也没报错,后来试了,只有第一次getUserMedia的stream不能播放,下一次就能播放了,代码如下:
const sleep = (time = 0) => new Promise((res) => { setTimeout(res, time); }); const checkIsWechat = (() => { const agentInfo = navigator.userAgent.toLowerCase(); const isWechatEnv = ['micromessenger', 'wechat', 'weixin'].some((sign) => agentInfo.includes(sign)); return () => isWechatEnv; })(); const cameraVideoInit = async (video) => { // 以后置摄像头为例 const options = { audio: false, video: { facingMode: 'environment' } }; if (checkIsWechat()) { const tapStream = await navigator.mediaDevices.getUserMedia(options); const tapVideoTracks = tapStream.getVideoTracks()?.[0] ?? null; // 第一次不延迟关闭摄像头还是没办法播放视频 await sleep(1000); tapVideoTracks?.stop?.(); // 保险起见再延迟100ms await sleep(100); } try { const stream = await navigator.mediaDevices.getUserMedia(options); if (this._hasStop) return; video.srcObject = stream; document.body.append(video); const loadedHandler = (evt) => { if (evt) { video.onloadeddata = null; } // video.play()在部分机型上会报错:play()can only be initiated by a user gesture // 此处将play放在点击事件中,报错了就向外抛出事件,外部实际的交互去触发play video.click(); video.play(); }; video.onloadeddata = loadedHandler; video.onclick = () => { video.play().catch(() => { window.dispatchEvent('manual-play', new CustomEvent({ detail: { callback: () => video.play() } })); }); }; // ios的微信浏览器必须先手动触发一次play,loadeddata事件才能执行 if (checkIsWechat()) { sleep(3000).then(() => { if (video.onloadeddata) { loadedHandler(); } }); } window.dispatchEvent(new CustomEvent('camera-init')); } catch (err) { window.dispatchEvent(new CustomEvent('camera-error', { detail: err })); } }; export default cameraVideoInit;
你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现的链接,并详细描述下复现流程
同样的问题 解决了么 楼主
请问楼主解决了吗?
遇到了同样的问题,请问你这边解决了吗?