当前位置: 首页 > 知识库问答 >
问题:

javascript - navigator.mediaDevices.getUserMedia在chrome获取视频流分辨率低(640*480),但是在Safari就是1280*720,是浏览器的问题吗?

石喜
2023-11-17

获取摄像头stream的分辨率谷歌浏览器分辨率一直是640480很模糊,切OBS则是1280720,在Safari摄像头stream则是正常的1280*720,电脑摄像头分辨率很高并不是摄像头的问题,请大佬们给点思路吧

navigator.mediaDevices.getUserMedia({  video: {    width: { ideal: 1280 },    height: { ideal: 720 }  }}).then(function(stream) {  const videoTrack = stream.getVideoTracks()[0];  const settings = videoTrack.getSettings();  console.log('Actual video resolution: ' + settings.width + 'x' + settings.height);}).catch(function(error) {  console.log("getUserMedia error: ", error);});

共有2个答案

李耀
2023-11-17

navigator.mediaDevices.getUserMedia({ video: true })

.then(function (stream) {    const track = stream.getVideoTracks()[0];    const capabilities = track.getCapabilities();    // 检查是否支持指定的分辨率    if (capabilities.width && capabilities.height) {        const constraints = {            width: { ideal: 1280 },            height: { ideal: 720 }        };        // 应用分辨率约束        track.applyConstraints(constraints)            .then(function () {                // 分辨率应用成功,可以继续处理视频流            })            .catch(function (error) {                console.error('Error applying constraints:', error);            });    } else {        console.error('Video track does not support setting custom resolutions.');    }}).catch(function (error) {    console.error('Error accessing user media:', error);});

这样能行么?

禹德水
2023-11-17

从你的描述来看,这是一个典型的在不同浏览器中获取 WebRTC 视频流分辨率的问题。你的代码已经足够正确,你正在使用 navigator.mediaDevices.getUserMedia() 方法来请求视频流,并设置理想的宽度和高度为 1280x720。然后你获取视频流并打印实际的分辨率。

这个问题可能是由于 Chrome 浏览器在处理 WebRTC 视频流时的默认行为导致的。Chrome 浏览器可能为了节省带宽和处理器资源,会降低默认的分辨率。

以下是一些可能的解决方案:

  1. 使用 OBS 等软件进行分辨率调整:如果你可以在 OBS 等软件中手动调整分辨率,这可能是一个可行的解决方案。但是这需要用户手动操作,可能并不方便。
  2. 使用适应不同浏览器的代码:你可以检查当前浏览器的名称或版本,并根据不同的浏览器使用不同的代码。例如,如果当前浏览器是 Chrome,你可以请求更低的分辨率。如果当前浏览器是 Safari,你可以请求更高的分辨率。但是这可能会使你的代码变得复杂且难以维护。
  3. 使用第三方库:有一些第三方库(如 SimplePeer.js)可能可以帮助你更好地控制 WebRTC 视频流的分辨率。但是这可能会增加你的代码的复杂性。
  4. 更新浏览器:如果你的用户使用的 Chrome 浏览器版本较老,那么更新到新版本可能会解决这个问题。因为随着时间的推移,浏览器可能会改进对 WebRTC 的支持。
  5. 检查设备的摄像头和硬件:如果设备有多个摄像头或硬件问题可能导致这个问题,你可能需要检查并更新摄像头驱动或硬件设备。
  6. 在服务器端进行分辨率调整:如果你的应用有服务器端,你可以在服务器端获取视频流,然后进行分辨率调整。但是这可能会增加你的服务器的负载。

总的来说,这个问题可能涉及到多个因素,需要你根据实际情况选择最合适的解决方案。

 类似资料:
  • 问题内容: 我花了很多时间试图弄清楚为什么像这样嵌入视频: 一旦将页面加载到FireFox中,便会自动开始播放,但无法在基于Webkit的浏览器中自动播放。这仅在某些随机页面上发生。到目前为止,我找不到原因。我怀疑CMS编辑器创建了一些未封闭的标签或大量JS。 问题答案: 我能得到的最佳解决方案是在 …不是很漂亮,但是可以正常工作。 更新 最近,许多浏览器只能在没有声音的情况下自动播放视频,因此您

  • 问题内容: 获得监视器分辨率(最好是在元组中)的最简单方法是什么? python 屏幕 分辨率 问题答案: 在Windows上: 如果使用高分辨率屏幕,请确保你的python解释器为HIGHDPIAWARE。

  • 我在Ubuntu 12.04 64位上使用OpenCV 2.4.5。我希望能够设置我的罗技C310网络摄像头输入的分辨率。相机支持高达1280x960在30fps,我能够在guvcview在这个分辨率查看视频。但是OpenCV总是以640x480的速度获取视频。 试图用cap更改分辨率。设置(CV\U CAP\U PROP\U FRAME\U WITH,1280)和CAP。创建视频捕获封盖后立即设

  • 我遇到的问题是,我无法更改OpenCV视频捕获的分辨率。不管怎样,分辨率总是640x480。我使用的代码是用C编写的,我使用的是opencv 3.4.8。我已经创建了一个超级简单的程序来做这件事,不管我怎么尝试,它似乎都不起作用。 以下是完整的代码: 当我运行上述代码时,帧总是640x480。 我已尝试使用

  • 我使用&过滤器和标记创建了一个Porter-Duff Out(knockout)效果,它在底部的叶子形状层上切出一个圆形孔。 我在Chrome中的一切都运行良好,但在Firefox和Safari中发现了不同的行为。 Firefox根本不会呈现过滤后的元素,从我的在线搜索来看,原因似乎是Firefox不支持feImage标记中的支离破碎的svg元素。然而,即使我尝试用1)到实际svg文件的完整链接和