• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

javascript - 如何强制一个 16 :9 ratio with getUserMedia on all devices?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 15:37:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

当视频设置为以 16:9 分辨率录制时,我需要使用 getUserMedia

我的代码适用于大多数台式机和 Android 7 及更高版本:

navigator.getUserMedia( {
   audio: true,
   video: {
      mandatory: {
          minWidth: 380,
          minHeight: 214,
          maxWidth: 380,
          maxHeight: 214
      }
   }
})

但在 Android 6 及更低版本以及某些台式机上(无法确定具体是哪一个),getUserMedia 会中断,并且相机中没有可用的图像。

这适用于所有设备和桌面,但默认分辨率为 4:3,而我需要 16:9:

navigator.getUserMedia( {
   audio: true,
   video: true
})

我尝试省略强制,没有成功。

让我更加困惑的是,iOS 设备(11 测试版)和 Android 需要传递 faceMode 参数:

video: { facingMode: 'user' }

因此,在某些桌面和设备(如 Android 5 和 6)上,传递 widthheight 参数似乎会破坏 getUserMedia

有没有办法在所有设备上强制使用 16:9 的比例?捕获具有特定尺寸的视频的正确和常规方法是什么?



Best Answer-推荐答案


您假设所有相机都支持 16:9,或者所有浏览器都会为您裁剪视频。不是这样。您还使用了过时的 API。试试 the latest API ( fiddle , samples ):

var constraints = {video: {width: 320, height: 180, facingMode: "user"}};

navigator.mediaDevices.getUserMedia(constraints)
.then(stream => video.srcObject = stream)
.then(() => new Promise(resolve => video.onloadedmetadata = resolve))
.then(() => log(video.videoWidth +"x"+ video.videoHeight))
.catch(e => console.log(e));

getUserMedia 的核心是一个摄像头/麦克风 discovery API:所有的 minmax、<存在 code>exact、ideal 关键字来描述您的约束,即您对 not 得到您想要的东西的容忍度。

我建议使用 aspectRatio 约束,除非还没有人实现它,这只是降低容忍度的另一个约束。

目前我相信只有 Chrome 会缩小相机输出并将其裁剪为您想要的确切尺寸。事实证明这是大多数人想要的,但对用户的相机却知之甚少。其他浏览器可能会紧随其后,因为对其他东西的需求并不大,但它们目前并没有缩小规模。

请注意,即使 Chrome 也不会升级,所以如果您在 Android 上使用 Chrome,您可能要求比 Android 6 设备输出的分辨率更高。在这种情况下检查 OverconstrainedError,然后用较小的值重试。

简而言之,您并不总是能得到您想要的确切尺寸,因为它最终取决于用户的相机和他们的浏览器。

但是 HTMLVideoElement 无论如何都会在播放时缩小比例,您可以 use CSS裁剪。

关于javascript - 如何强制一个 16 :9 ratio with getUserMedia on all devices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781882/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap