WebRTC学习笔记六 兼容性 adapter.js

news2024/11/25 18:52:48

一、adapter.js发展背景

    adapter.js自2012年底或者2013年初WebRTC早期的时候就已经出现了。它最初是Google的apprtc demo的一部分。原始版本仍可在Chrome tree中找到。它是一个非常小的项目,还没有150行。主要功能是隐藏像webkitRTCPeerConnection和mozRTCPeerConnection这样的前缀差异,并提供函数将MediaStream附加到HTML的<audio>或<video>元素。

    在WebRTC自由发展的日子里,每个人都在编写自己的库,使WebRTC更加简单。这在2015年中期开始发生变化,当时微软的Edge浏览器也出现了。虽然Edge浏览器不需要getUserMedia的前缀,但将MediaStream附加到视频元素仍然可以在三种不同的实现中使用。这表明有必要出现一种标准化的行为。另外,正如微软的Bernard Aboba指出的那样,书籍中出现的API的前缀版本—这是错误的引导。

    随着复杂性的增加(目前超过2200行代码),对adapter.js代码本身进行更改的测试面临着更多的问题。最初由Selenium提供支持的测试已经分解为单元测试和端到端测试,这些测试使用标准测试工具,如karma,mocha,和chai,在Travis-CI上的各种浏览器中运行时做出决定,并将结果与以前的运行结果做比较。这体现了测试WebRTC库的最新技术水平,并一杯其他项目采用。

    在2017年的大部分时间里,主要关注点都在Chrome中填充track-based API。这是向WebRTC 1.0 API迈出的一大步,在Mozilla的这篇博文中有所描述,同样也在adapter.js中。这些测试测试证明确保API的一致性是非常棘手的,因为现有代码可能依赖于与旧API的某些交互,并且该API未被指定。正如往常一样,在大量变化中也有一些回归—但是,在JavaScript库中发现可以固定版本的那些回归比使用本机生成的回归更好。在2018年初,Chrome 64版将会变得更稳定,原生的addTrack版本将会替代产生。注意:由于与getStats相关的错误,addTrack还没有完全准备好作为产品。直到Chrome M65的出现之前,shim还将是首选—确保你的adapter版本在更改后进行了更新。

二、adapter.js基本用法

1.在HTML中引入

https://webrtc.github.io/adapter/adapter-latest.js

引入指定的版本

https://webrtc.github.io/adapter/adapter-1.0.2.js

2.npm引入

npm install webrtc-adapter

3.使用

import adapter from 'webrtc-adapter';

看一下浏览器信息

adapter.browserDetails.browser
adapter.browserDetails.version

4.检查是否支持WebRTC,检查是否定义了RTCPeerConnection

!!window.RTCPeerConnection

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:

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

 

三、WEBRTC能力测试

参考
https://webrtc.qq.com:8687/
http://qcloudtrtc.com/webrtc-samples/abilitytest/index.html
https://www.qcloudtrtc.com/webrtc-samples/index.html
https://main.qcloudimg.com/raw/document/product/pdf/647_16862_cn.pdf

1.页面准备

视频播放的媒介是 H5 提供的 Video(音视频)和 Audio(纯音频)。
video 和 audio 的 muted autoplay playsinline 属性都是需要注意的,请看下面的代码注释

<body >
<!-- 音视频 -->
<!--
本地视频流
muted:
本地视频流的video必须置为静音(muted),否则会出现啸叫/回声等问题
Mac / iPhone / iPad 需要用js设置muted属性
autoplay:必须为激活状态
playsinline:保证在ios safari中不全屏播放
-->
<video id="localVideo" muted autoplay playsinline></video>
<!-- 远端视频流 -->
<video id="remoteVideo" autoplay playsinline></video>
<!-- 纯音频 -->
<!-- 本地音频流 / 这种场景下,localaudio 其实没有播放的必要了,可以用来调试 -->
<!-- <audio id="localAudioMedia" muted autoplay></audio> -->
<!-- 远端音频流 -->
<!-- <audio id="remoteAudioMedia" autoplay ></audio> -->
<script src="https://sqimg.qq.com/expert_qq/webrtc/3.0/WebRTCAPI.min.js"></script>
</body>

2.H5 支持的平台

操作系统平台浏览器/webview版本要求备注
iOSSafari ( 只支持Safari )11.1.2由于苹果 Safari 仍有偶现的 bug,产品化方案建议先规避,待苹果解决后再使用对于iOS可以考虑使用我们的小程序解决方案
AndroidTBS (微信和手机QQ的默认Webview)43600微信和手机QQ默认内置的浏览器内核为TBS。TBS 介绍
AndroidChrome60+需要支持 H264
MacChrome47+
MacSafari11+
Windows(PC)Chrome52+
Windows(PC)QQ浏览器10.2

function checkTBSVersion(ua) {
//ua = "Mozilla/5.0 (Linux; Android 7.1.1; vivo X9 Build/NMF26F; wv) 
//AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 
//Mobile MQQBrowser/6.2 TBS/043501 Safari/537.36 
//MicroMessenger/6.5.13.1100 NetType/WIFI Language/zh_CN";
    var list = ua.split(" ");
    for (var i = 0; i < list.length; i++) {
        var item = list[i];
        if (item.indexOf("TBS") !== -1 || item.indexOf("tbs") !== -1) {
            var versionStr = item.split("/")[1];
            var version = parseInt(versionStr) || 0;
            if (version <= 43600) {
                alert("您的TBS版本号(" + versionStr + ")过低,不支持WebRTC,请升级!");
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取

〇、参考资料 1、hutool介绍 https://blog.csdn.net/abst122/article/details/124091375 2、Spring BootMybatis实现登录注册 https://www.cnblogs.com/wiki918/p/16221758.html 3、Spring Boot读取自定义配置文件 https://www.yisu.com/zixun/366877.html 4、Spring Boot读取p…

医院用故障电弧探测器AAFD 安科瑞 时丽花

摘 要&#xff1a; 医院运行中对于用电方面的要求越来越高&#xff0c;为了更好地体现用电价值&#xff0c;首先应该确保用电的安全性&#xff0c;尤其是对 于越来越繁杂的医院用电系统。基于此&#xff0c;在未来医院用电过程中应该加大关注力度&#xff0c;切实做好相关管理工…

Compose学习-> Text()

设置文本&#xff1a;text xxx 直接设置 Text(text "我是一个Text")引用资源文件&#xff1a;stringResource Text(text stringResource(id R.string.string_text))设置字体颜色&#xff1a;color xxx 引用系统自带的颜色 Text(text "我是一个Text"…

【技术分享】NB860+Lierda云平台=上电即上云——云管端协作让万物互联更简单(二)

随着物联网行业的快速发展&#xff0c;越来越多的物联网云服务平台涌现。如何快速实现应用开发&#xff0c;如何管理&#xff0c;如何让设备快速上云&#xff0c;成为关注的焦点。 第一期中我们介绍了基于MQTT协议快速接入利尔达物联网全连接云平台&#xff0c;本期我们将介绍如…

ManageEngine 第六次入选 Gartner® 安全信息和事件管理魔力象限™!

今天&#xff0c;我们很高兴地宣布&#xff0c;ManageEngine 已在2022年 Gartner 安全信息和事件管理 (SIEM) 魔力象限中获得认可&#xff0c;今年已经是其连续第六次出现在Gartner中。ManageEngine非常高兴再次获得这一认可。 在过去两年中&#xff0c;互联网向云计算的转变不…

svn的常规使用

svn的常规使用svn的常规使用1 客户端2 svn server3 qt使用svn4 svn项目迁移svn的常规使用 1 客户端 下载地址&#xff1a;官网&#xff0c;中文简体语言包在其下方 分别安装客户端可语言包&#xff0c;在安装语言包的时候勾选应用&#xff0c;svn便可变成中文了&#xff0c;或…

改革后IB数学该如何选?

IB数学&#xff0c;作为一个IB课程里必选科目&#xff0c;让无数IB学霸为之自豪&#xff0c;他们能解出外教都不会做的题。另一方面&#xff0c;也让很多同学&#xff08;自称“学渣”&#xff09;避之不及。 从2019年起&#xff0c;IB数学教学大纲发生重大改革。▲图源&#x…

Android -- 每日一问:如何理解 Android 中的 Context,它有什么用?

经典回答 官方文档对于 Context 的解释&#xff1a; Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and cla…

[附源码]SSM计算机毕业设计学生宿舍设备报修JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

光格科技将于12月6日上会:拟募资6亿元,姜明武为实控人

近日&#xff0c;苏州光格科技股份有限公司&#xff08;下称“光格科技”&#xff09;在上海证券交易所科创板递交招股书&#xff08;上会稿&#xff09;。据贝多财经了解&#xff0c;光格科技将于2022年12月6日接受科创板上市委的现场审议。 公开信息显示&#xff0c;光格科技…

微信小程序开发笔记

微信小程序开发笔记html条件渲染列表渲染按钮组件 buttoncss单位 rpx、px、vw、vh、rem定位方法设置图片为页面的背景自定义按钮的图标js全局变量底部导航栏 tabBar其他配置config.js带参数跳转页面云数据库的使用初始化查找地图组件 map从云数据库中调用经纬度&#xff0c;并且…

【附源码】计算机毕业设计JAVA资源循环利用

【附源码】计算机毕业设计JAVA资源循环利用 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

数字化门店| 美业/医美门店管理系统 | 医美小程序

近些年来&#xff0c;随着人们消费升级和颜值经济的不断驱动&#xff0c;美业发展非常迅速&#xff0c;而医美行业也顺势规模增长。 当今互联网时代&#xff0c;各行业都在开展门店数字化转型&#xff0c;而这也让不少医美医院愿意构建基于门店会员管理的O2O闭环&#xff0c;并…

Vscode同时开发前后端

VSCode统一前后端文档 一、软件下载 软件地址下载 Documentation for Visual Studio Code 二、软件汉化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0uCKmDL-1669770108463)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALA…

React+Electron快速创建并打包成桌面应用

一、创建react项目 首先使用creat-react-app脚手架来创建一个react项目 # 安装 create-react-app 命令,如果已将安装请忽略 npm install -g create-react-app # 创建 react项目 create-react-app react-electron # 启动项目( create-react-app 真的超级方便啊) cd react-elec…

数仓之hive自定义UDTF函数详解

学习目录一、自定义UDTF函数一、自定义UDTF函数 1.说明文档 A custom UDTF can be created by extending the GenericUDTF abstract class and then implementing the initialize, process, and possibly close methods. The initialize method is called by Hive to notify t…

全局JSON序列化导致prometheus数据格式错乱

现象 现场配置完prometheus端点后&#xff0c;返回数据格式乱了&#xff0c;如下图所示 正常结果数据如下图所示 分析 在单个微服务上访问prometheus端点数据返回格式正常。在小型化化格式返回就错乱了。数据返回格式是由消息转化统一处理的。在小型化工程中&#xff0c;…

有限责任公司股东出资的方式有哪几种

一、有限责任公司股东出资的方式有哪几种 有限责任公司股东出资的方式有以下两种&#xff1a; 1.货币出资方式。股东以货币出资的&#xff0c;应当将货币出资足额存入公司在银行开设的账户&#xff1b; 2.非货币财产作价出资方式。以非货币财产出资的&#xff0c;应当依法办…

Web3中文|连年亏损下,web3能拯救B站吗?

作者 | XiaoZiNFTnews.com 11月15日&#xff0c;百度旗下DuDu Lab发行的DuDu Bear NFT已完成铸造&#xff0c;NFT搭建于以太坊上&#xff0c;铸造价格为0.02ETH&#xff0c;发售价格为0.05ETH&#xff0c;共发行1万个&#xff0c;总价值约为455万人民币&#xff0c;目前已售罄…

【JavaScript对象】

JavaScript对象1 本节目标2 对象2.1 什么是对象2.2 为什么需要对象3 创建对象的三种方式3.1 利用字面量创建对象3.2 利用new Object创建对象3.3 利用构造函数创建对象3.4 变量、属性、函数、方法总结3.5 构造函数和对象4 new关键字5 遍历对象属性1 本节目标 说出为什么需要对象…