【Webkit Blog翻译】深入研究WebRTC | 内有福利
WebKit博客中宣布了对High Sierra平台和iOS中Safari的WebRTC支持。现在,我们希望能够带领大家深入实现其中的一些细节,并且为您网站中的WebRTC应用带来一些建议。
Safari技术预览版34向开发者展示了一些选项,可以更容易的测试他们的WebRTC网站或将Safari集成到持续集成系统中,入口在开发>WebRTC子菜单中。
HTTPS域。由于在本地开发和测试时可能会很麻烦,因此可以通过在
"在不安全的站点上允许使用媒体摄像头"来旁路HTTPS限制。
>WebRTC菜单中,可以选择"使用模拟摄像头设备"来替代真实的摄像头设备。如下所示,模拟循环一个bip-bop AV流。当用作传入流时,模拟的可预测数据可以轻松评估流媒体播放的各个方面,包括同步,延迟和输入设备的选择。
getUserMedia的提示,可以通过Safari
...>网站面板将网站的摄像头和麦克风策略设置为允许。
ICE候选项限制
ICE候选项在WebRTC连接的早期阶段进行信息交换,以识别两个对等连接之间的所有可能的网络路径。为此,WebKit必须将每个对等连接的ICE候选项暴露给网站并共享它们。ICE候选项公开IP地址,特别是那些可以用于跟踪的主机IP地址。
菜单中启用"禁用ICE候选限制",然后重新加载页面。
WebRTC及媒体流API
RTCPeerConnection API以各种方式逐步改进。API从最初基于回调,到变为完全基于promise,从最初专注于将MediaStream,移动到专注于MediaStreamTrack。感谢WebRTC in WebKit团队的努力,RTCPeerConnection API的改进与这两个主要变化保持一致。
>WebRTC菜单中启用"启用旧版WebRTC API"来达到目的。ui更准确地说,以下API仅在打开旧版API开关时可用,并提供了有关如何更新的建议:
partial interface Navigator {
// Switch to navigator.mediaDevices.getUserMedia
void getUserMedia(MediaStreamConstraints constraints, NavigatorUserMediaSuccessCallback successCallback, NavigatorUserMediaErrorCallback errorCallback);
};
partial interface RTCPeerConnection {
// Switch to getSenders, and look at RTCRtpSender.track
sequence<MediaStream> getLocalStreams();
// Switch to getReceivers, and look at RTCRtpReceiver.track
sequence<MediaStream> getRemoteStreams();
// Switch to getSenders/getReceivers
MediaStream getStreamById(DOMString streamId);
// Switch to addTrack
void addStream(MediaStream stream);
// Switch to removeTrack
void removeStream(MediaStream stream);
// Listen to ontrack event
attribute EventHandler onaddstream;
// Update to promise-only version of createOffer
Promise<void> createOffer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional RTCOfferOptions options);
// Update to promise-only version of setLocalDescription
Promise<void> setLocalDescription(RTCSessionDescriptionInit description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
// Update to promise-only version of createAnswer
Promise<void> createAnswer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback);
// Update to promise-only version of setRemoteDescription
Promise<void> setRemoteDescription(RTCSessionDescriptionInit description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
// Update to promise-only version of addIceCandidate
Promise<void> addIceCandidate((RTCIceCandidateInit or RTCIceCandidate) candidate, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
};
var pc = new RTCPeerConnection();
pc.addTransceiver('audio');
pc.addTransceiver('video');
var offer = await pc.createOffer();
await pc.setLocalDescription(offer);
// send offer to the other party
...
var stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
var pc = new RTCPeerConnection();
var audioSender = pc.addTrack(stream.getAudioTracks()[0], stream);
var videoSender = pc.addTrack(stream.getVideoTracks()[0], stream);
var offer = await pc.createOffer();
await pc.setLocalDescription(offer);
// send offer to the other party
...
videoSender.track.applyConstraints({width: 1280, height: 720});
videoSender.track.enabled = false;
videoSender.track.enabled = true;
renderWithEffects(video, canvas);
videoSender.replaceTrack(canvas.captureStream().getVideoTracks()[0]);
Safari允许用户完全控制网站对其摄像设备的访问权限。
navigator.mediaDevices.enumerateDevices
WebKit通过返回与实际可用设备集不一定对应的默认设备列表,来避免暴露这些附加信息。此外,根据规范,设备缺少标签。一旦访问权限被授予,即可获得完整的设备列表及其标签。
·如果网页已在捕获,则MediaStream支持的媒体将自动播放。
·如果网页已播放音频,则MediaStream支持的媒体将自动播放。但仍然需要用户手势来激活音频回放。
WebRTC是一个非常强大的特性,可以衍生许多应用程序。我们都知道,强大的力量带来了巨大的责任。设计WebRTC应用程序需要从一开始就考虑到效率。 CPU,内存和网络都可能严重影响用户体验。Web引擎和Web应用程序都应该解决此问题。在Web应用程序方面,已经有各种机制可供选择:选择正确的视频分辨率和帧速率,选择正确的视频编解码器配置文件,使用CVO,在源处将媒体轨静音,以及在客户端执行WebRTC统计数据的监视。
【Webkit Blog翻译】深入研究WebRTC | 内有福利的更多相关文章
- [翻译]60,000毫秒内对Linux进行性能诊断
原文链接:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html 原文作者:Brendan Gregg,L ...
- WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/
为了确保这篇文章所写内容尽可能的准确,我决定请来Philipp Hancke来作为此篇文章的共同作者. 当你想要找到你WebRTC产品中的问题时,webrtc-internals是一个非常棒的工具,因 ...
- Python协程爬取妹子图(内有福利,你懂得~)
项目说明: 1.项目介绍 本项目使用Python提供的协程+scrapy中的选择器的使用(相当好用)实现爬取妹子图的(福利图)图片,这个学会了,某榴什么的.pow(2, 10)是吧! 2.用到的知 ...
- 单独编译使用WebRTC的音频处理模块
块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...
- WebRTC 音视频开发
WebRTC 音视频开发 webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- WebRTC音频预处理单元APM的整体编译及使用
正文 行的gnu静态库链接路径是针对NDK版本 r8d 的,如读者版本不匹配,请自行找到 libgnustl_static.a 静态库的路径进行替换. 3)本示例并不打算编译 WebRTC 的测试工程 ...
- Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析
本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...
- webrtc 的回声抵消(aec、aecm)算法简介(转)
webrtc 的回声抵消(aec.aecm)算法简介 webrtc 的回声抵消(aec.aecm)算法主要包括以下几个重要模块:1.回声时延估计 2.NLMS(归一化最小均方自适应算法) ...
随机推荐
- Network Function Virtualization for a Network Device
An apparatus for performing network function virtualization (NFV), comprising: a memory, a processor ...
- Single-stack real-time operating system for embedded systems
A real time operating system (RTOS) for embedded controllers having limited memory includes a contin ...
- matlab 三维图像的绘制
1. 基本绘图函数 plot3() scatter3() 2. 修饰与点缀 但仅使用默认的配置,调用这些绘图函数,不会很丑,但也漂亮不到哪里去. view(az, el),调整视野和视角:
- Python实例讲解 -- 获取本地时间日期(日期计算)
1. 显示当前日期: print time.strftime('%Y-%m-%d %A %X %Z',time.localtime(time.time())) 或者 你也可以用: print list ...
- Vhost Architecture
在前面的文章中在介绍virtio机制中,能够看到在通常的应用中一般使用QEMU用户态程序来模拟I/O訪问,而Guest中的数据要通过Guest到Host Userspace的第一次拷贝,再经过Host ...
- Matlab随笔之模拟退火算法
问题描述: 我方有一个基地,经度和纬度为( 70,40).假设我方飞机的速度为 1000 公里/小时. 我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地.在敌方每一目 标点的侦察时间不计 ...
- Selenium-简介
一.简介 Selenium是UI自动化的一个框架. Selenium1.0时代就是用js注入技术与浏览器交互. Selenium WebDriver就是调用浏览器原生的API来实现的操作.他是Clie ...
- 【Gerrit】持续集成工具Jenkins的安装配置与使用过程中遇到的问题整理
1.下载war包 https://jenkins.io/download/ 2.安装 java -jar jenkins.war Error: Feb 21, 2019 2:17:25 AM wins ...
- 微信小程序把玩(四)应用生命周期
原文:微信小程序把玩(四)应用生命周期 App() 函数用来注册一个小程序,注意必须在 app.js 中注册,且不能注册多个. 使用方式也跟Android中的Application中初始化一些全局信息 ...
- WPF 调用API修改窗体风格实现真正的无边框窗体
原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...