百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

WebRTC(一)getUserMedia 使用

zhezhongyun 2025-02-15 02:00 34 浏览

什么是WebRTC?

  • WebRTC,网页即时通信(Web Real-Time Communication),实现了基于网页的视频会议。WebRTC具有免安装,方便接入的特点,它不需要安装任何插件,在浏览器上就可以实现网页端的实时通信。在浏览器之间快速地实现音视频通信。
  • WebRTC是一个开源项目,旨在使得浏览器能为实时通信(RTC)提供简单的JavaScript接口。说的简单明了一点就是让浏览器提供JS的即时通信接口。这个接口所创立的信道并不是像WebSocket一样,打通一个浏览器与WebSocket服务器之间的通信,而是通过一系列的信令,建立一个浏览器与浏览器之间(peer-to-peer)的信道,这个信道可以发送任何数据,而不需要经过服务器。并且WebRTC通过实现MediaStream,通过浏览器调用设备的摄像头、话筒,使得浏览器之间可以传递音频和视频。

音视频采集基本概念

在正式介绍 JavaScript 采集音视频数据的 API 之前,你还需要了解一些基本概念。这些概念虽然都不难理解,但在后面讲解 API 时都会用到它们,很是重要,所以在这里我还是给你着重汇总和强调下。

摄像头 :用于捕捉(采集)图像和视频。

帧率:现在的摄像头功能已非常强大,一般情况下,一秒钟可以采集 30 张以上的图像,一些好的摄像头甚至可以采集 100 张以上。我们把摄像头一秒钟采集图像的次数称为帧率。帧率越高,视频就越平滑流畅。然而,在直播系统中一般不会设置太高的帧率,因为帧率越高,占的网络带宽就越多。

分辨率:摄像头除了可以设置帧率之外,还可以调整分辨率。我们常见的分辨率有 2K、1080P、720P、420P 等。分辨率越高图像就越清晰,但同时也带来一个问题,即占用的带宽也就越多。所以,在直播系统中,分辨率的高低与网络带宽有紧密的联系。也就是说,分辨率会跟据你的网络带宽进行动态调整。

宽高比:分辨率一般分为两种宽高比,即 16:9 或 4:3。4:3 的宽高比是从黑白电视而来,而 16:9 的宽高比是从显示器而来。现在一般情况下都采用 16:9 的比例。

麦克风:用于采集音频数据。它与视频一样,可以指定一秒内采样的次数,称为采样率。每个采样用几个 bit 表示,称为采样位深或采样大小。

  • 轨(Track):WebRTC 中的“轨”借鉴了多媒体的概念。火车轨道的特性你应该非常清楚,两条轨永远不会相交。“轨”在多媒体中表达的就是每条轨数据都是独立的,不会与其他轨相交,如 MP4 中的音频轨、视频轨,它们在 MP4 文件中是被分别存储的。
  • 流(Stream):可以理解为容器。在 WebRTC 中,“流”可以分为媒体流(MediaStream)和数据流(DataStream)。其中,媒体流可以存放 0 个或多个音频轨或视频轨;数据流可以存 0 个或多个数据轨。

音视频采集

相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】

音视频免费学习地址:
https://xxetb.xet.tech/s/2cGd0

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

1. getUserMedia 方法

在浏览器中访问音视频设备非常简单,只要调用 getUserMedia 这个 API 即可。该 API 的基本格式如下:

// 参数对于音视频的描述
const constraints = {
    video: {
        frameRate: {min: 20},  //视频的帧率最小 20 帧每秒
        width: {min: 640, ideal: 1280}, //最小宽度640,理想宽度1280
        height: {min: 360, ideal: 720},//最小高度640,理想高度1280
        aspectRatio: 16/9 //宽高比是 16:9
    },
    audio: {
        echoCancellation: true, //音频开启回音消除
        noiseSuppression: true, // 开启降噪
        autoGainControl: true // 开启自动增益功能
    }
};

let promise = navigator.mediaDevices.getUserMedia(constraints);

它返回一个 Promise 对象。

  • 如果 getUserMedia 调用成功,则可以通过 Promise 获得 MediaStream 对象,也就是说现在我们已经从音视频设备中获取到音视频数据了。
  • 如果调用失败,比如用户拒绝该 API 访问媒体设备(音频设备、视频设备),或者要访问的媒体设备不可用,则返回的 Promise 会得到 PermissionDeniedError 或 NotFoundError 等错误对象。

如何使用 getUserMedia API

1.创建html文件



    
        Realtime communication with WebRTC
        
    
    
        

Realtime communication with WebRTC


 
  • autoplay,表示当页面加载时可以自动播放视频;
  • playsinline,表示在 HTML5 页面内播放视频,而不是使用系统播放器播放视频

2.创建client.js在html中引入

const mediaStreamContrains = {
    video: true
};
const localVideo = document.querySelector('video');
function gotLocalMediaStream(mediaStream){
    localVideo.srcObject = mediaStream;
}
function handleLocalMediaStreamError(error){
    console.log('navigator.getUserMedia error: ', error);
}
navigator.mediaDevices.getUserMedia(mediaStreamContrains).then(
    gotLocalMediaStream
).catch(
    handleLocalMediaStreamError
);

JavaScript 代码中首先执行 getUserMedia() 方法,该方法会请求访问 Camera。如果是第一次请求 Camera(摄像头),浏览器会向用户弹出提示窗口,让用户决定是否可以访问摄像头。如果用户允许访问,且设备可用,则调用 gotLocalMediaStream 方法。

gotLocalMediaStream 方法中,其输入参数为 MediaStream 对象,该对象中存放着 getUserMedia 方法采集到的音视频轨。我们将它作为视频源赋值给 HTML5 的 video 标签的 srcObject 属性。这样在 HTML 页面加载之后,就可以在该页面中看到摄像头采集到的视频数据了。

getUserMedia API 控制设备的参数及其含义如下:

原文 WebRTC(一)getUserMedia 使用

相关推荐

写作排版简单三步就行-工具篇(作文排版编辑软件)

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

CSS继承的元素属性小总结(css 继承性)

所有元素可继承:visibility和cursor内联元素和块级元素可继承:letter-spacingword-spacingwhite-spaceline-heightcolorfontfont-...

Cube 技术解读 | Cube 小程序技术详解

作者:曾维宏(恒实)“本文为《Cube技术解读》系列第三篇文章,之前上线的《支付宝新一代动态化技术架构与选型综述》《Cube卡片技术栈解读》欢迎大家回顾。”小程序作为动态化或者跨端开发的一种技术栈...

“战斗民族”这样为新生儿检查?(战斗民族)

<fontface="近日,一条被称为“俄罗斯新生儿检查”的视频在微博疯传,视频中检查者粗鲁的动作让网友们纷纷感染“怪不得是战斗民族”。视频真实性有待考证,但宝宝出生后确实需要马不停蹄地做一系...

实测,大模型谁更懂数据可视化?(实测,大模型谁更懂数据可视化技术)

大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

「Python爬虫」:破解网站字体加密和反反爬虫

前言:字体反爬,也是一种常见的反爬技术,例如58同城,猫眼电影票房,汽车之家,天眼查,实习僧等网站。这些网站采用了自定义的字体文件,在浏览器上正常显示,但是爬虫抓取下来的数据要么就是乱码,要么就是变成...

转录组及可视化分析——样本间相关性绘图

背景介绍在进行正式的转录组分析之前,一般可以先对样本的相关性进行绘图,用于观察各个组之间或组内样本的相关性。数据介绍数据的话我们采用的是送样测序公司反馈给我们的gene_count文件,格式如下:...

阿里巴巴矢量图标库 iconfont 的使用方法

xx-blog主题使用的图标库是阿里巴巴的iconfont,因此这里介绍一下此主题库的用法。首先去iconfont主题库,注册一个账号,然后就可以找自己喜欢的图标了,找到后点击添加购物车,就回到了右侧...

五行取名(五行取名的正确方法)

1、五行的分类原则以方位来论:东方属木;南方属火;西方属金;北方属水;中央属土。以季节来论:春季属木;夏季属火;秋季属金;冬季属水;季末属土。以气候来论:风属木;暑属火;燥属金;寒属水;湿属土。以颜色...

4K显示器软件界面字体过小解决方法

用4K显示器(win10或者win11下)的朋友会发现一些软件并不能随着系统的字体放大而放大字体,用起来很不方便。譬如常用的ps或者行业专用软件。笔者经过摸索,发现这样设置一下可以解决。下面以Psc...

VBA之Word应用:利用Range方法进行字体及对齐方式设置

《VBA之Word应用》(版权10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后...

办公小技巧:告别侵权 PPT字体自己造

很多朋友还不知道,我们每天面对的字体都是有版权保护的,如果对这方面的内容不了解,一不小心就可能造成侵权。那么我们在日常设计PPT文稿的时候,如何避免字体侵权呢?首先我们得懂得如何查看版权信息,另外还需...

显示器颜色显示有偏差?你校准过吗?

编辑:晴晨购物、拍照、做视频、玩游戏……看似不一样的操作都怕一件事:颜色有偏差。购物时商品颜色有出入,毫不知情的情况下把责任推给了商家,那么拍照、做视频、玩游戏呢?我们先来看看某网友的诉苦:“我的是台...

设计字体那些事(设计字体种类大全图)

做设计几年,平均每年都能遇见好多因为字体侵权的事情,今天就结合我自己的经验和了解简单介绍下字体那些事#毒角SHOW角角用了这款字体,竟被送律师函赔偿10万https://www.douyin.com...

LCD智能显示模块-绘图板(lcd显示模块流程图)

TOPWAY智能模块(SmartLCD)是专门为工业显示应用而设计的TFT液晶显示模块。我司自主研发的界面编辑软件RGTools/SGTools提供了18个控件,通过些控件能实现丰富的显...