WebRTC介绍

WebRTC提供三类API:

  • MediaStream,即getUserMedia
  • RTCPeerConnection
  • RTCDataChannel

getUserMedia已经由Chrome, Opera和Firefox支持。

RTCPeerConnection目前则由Chrome, Opera和Firefox支持。Chrome和Opera提供的接口名字为webkitRTCPeerConnection,Firefox则命名为mozRTCPeerConnection。

RTCDataChannel则只有Chrome 25, Opera 18和Firefox 22及以上版本才支持。

一个WebRTC应用需要做如下几件事情

  • 获取流(Streaming),包括音频,视频,以及其它数据
  • 获取网络信息,如IP和端口(PORT),并与其它WebRTC Client交换信息,有的时候还需要穿越防火墙或NAT
  • 信令(Signaling),用于报告错误、初始化或关闭会话
  • 交换多媒体以及Client的支持能力信息,比如分辩率、编解码信息等
  • 流通信

MediaStream(getUserMedia)

每一个MediaStream都有一个输入(Input)和输出(Output)。输入可以是由navigator.getUserMedia()生成的多媒体流。输出则可以是html5的video元素或者一个RTCPeerConnection。

咱们看一个简单的示例。

index.html文件内容如下:

<!DOCTYPE html>
<html>
<head>
<meta name="keywords" content="WebRTC, HTML5, JavaScript" />
<meta name="description" content="WebRTC Demo" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<base target="_blank">
<title>getUserMedia</title>
<link rel="stylesheet" href="../../css/main.css" />
</head>
<body>
<div id="container"> <h1><a href="#" title="WebRTC samples homepage">WebRTC samples</a> <span>getUserMedia</span></h1> <!--video元素,视频将输出到这里--//>
<video autoplay></video> <p>在video元素中显示<code>getUserMedia()</code>生成的视频流。</p> <p><code>MediaStream</code>对象<code>window.stream</code>是全局对象。 <code>getUserMedia()</code> callback对window.stream赋值。你可以在控制台中查看他的值。</p> <a href="#" title="View source for this page on Github" id="viewSource">源代码</a>
</div> <!--getUserMedia示例代码--//>
<script src="js/main.js"></script>
</body>
</html>

index.html主要由一个video元素和一个main.js文件构成。video元素负责输出getUserMedia生成的MediaStream;main.js是主要的代码代码逻辑。

main.js文件内容如下:

// 全局变量,inspector的console中可以查看
video = document.querySelector("video"); // get video element ref
constraints = {audio: false, video: true}; // only need video
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; /**
* successCallback
* getUerMedia成功获得一个MediaStream时,会回调此方法
**/
function successCallback(stream){
window.stream = stream; // stream available to console
if (window.URL) { // 生成视频流的地址,将其做为video的输入
video.src = window.URL.createObjectURL(stream);
} else {
video.src = stream;
}
} function errorCallback(error){
console.log("navigator.getUserMedia error: ", error);
} navigator.getUserMedia(constraints, successCallback, errorCallback);

点击看DEMO。

getUserMedia()方法需要三个参数:

  • 一个约束对象,如main.js中的constraints

  • 一个success callback,成功时,会回调此方法,参数是一个MediaStream

  • 一个error callback,失败时,会回调此方法,参数是一个error对象

MediaStream由id,label,MediaStreamTracks(video tracks和audio tracks)构成。读者可以在console中查看window.stream对象,了解其构成及方法。

在Chrome和Opera中,URL.createObjectURL()方法把一个MediaStream转化为一个Blob Url。这样,Video元素就可以使用此地址作为其输入。

WebRTC Demo - getUserMedia()的更多相关文章

  1. webRTC demo

    准备: 信令服务 前端页面用于视频通话 demo github 地址. 前端页面 为了使 demo 尽量简单,功能页面如下,即包含登录.通过对方手机号拨打电话的功能.在实际生成过程中,未必使用的手机号 ...

  2. [转] HTML5利用WebRTC的getUserMedia获取摄像头信息模拟拍照及视频(完整示例)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  3. Qt WebRTC demo

    This is a very simple demonstration of how to stream from a native application to the browser using ...

  4. WebRTC–getUserMedia & Canvas

    下面是一个使用getUserMedia接口和Canvas的drawImage方法实现的截图功能(截取视频中的一帧). 基本思路是这样子的: getUserMedia获取一个MediaStream, s ...

  5. WebRTC学习与DEMO资源一览

    一. WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/webrtc/ ...

  6. WebRTC学习笔记_Demo收集

    1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中增加了webrtc源代码,放在/external/w ...

  7. WebRTC 简介及服务搭建、测试

    WebRTC主要解决如下三个问题 1.获取音频和视频. 可以访问输入设备,如话筒.(网络)摄像机(头),可以从上述设备获取媒体数据流.目前需要硬件设备支持VP8/VP9,如果设备仅仅支持H.264/H ...

  8. WebRTC学习

    1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/web ...

  9. 同网页的WebRTC实现与源码分析

    基本按照Real time communication with WebRTC搭建(下面简称该网站为官方tutorial) 本文重视WebRTC的基于同页面通信的代码实现,主要讲述顺序是WebRTC的 ...

随机推荐

  1. ASP.NET页面之间数据传递的几种方法

    1)Request.QueryString   在ASP时代,这个是较常用的方法,到了ASP.NET,好像用的人不多了,但是不管怎么说,这是一个没有过时,且很值得推荐的方法,因为不管是ASP还是ASP ...

  2. objective-C学习笔记(九)ARC

    ARC叫自动引用计数Automatic Reference Counting.针对堆上的对象,管理对象的创建和释放. 哪些对象受ARC管理: OC对象指针 Block指针 使用_attribute_( ...

  3. jsp 有哪些动作?作用分别是什么?

    答:JSP 共有以下 6 种基本动作jsp:include: 在页面被请求的时候引入一个文件.jsp:useBean: 寻找或者实例化一个 JavaBean.jsp:setProperty: 设置 J ...

  4. hive premanent udf 发布...

    起因: hive premanent udf 发布成功,但是hue 无法加载使用(但是cli 是可用的) ,处理半天,依然不可用!后来发现重启hiveserver2 就可以了     具体步骤如下:  ...

  5. UVA 10798 - Be wary of Roses (bfs+hash)

    10798 - Be wary of Roses You've always been proud of your prize rose garden. However, some jealous f ...

  6. 梳理下phpmyadmin改root密码后登录不上的问题。

    一, 登陆phpmyadmin,然后点击左侧进入mysql数据库,在顶部点击“mysql”进入sql输入界面.输入以下命令: update user set password=password('12 ...

  7. datatable,查询,排序,复制等操作

    DataTable排序,检索,合并详解 一.排序 获取DataTable的默认视图 对视图设置排序表达式 用排序后的视图导出的新DataTable替换就DataTable (Asc升序可省略,多列排序 ...

  8. 10.PHP 教程_PHP If...Else 语句

    条件语句用于根据不同条件执行不同动作. PHP 条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作.您可以在代码中使用条件语句来完成此任务. 在 PHP 中,提供了下列条件语句: if 语 ...

  9. [转] iOS多线程编程之NSOperation和NSOperationQueue的使用

    <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是用定义好 ...

  10. GC算法之串行并行并发

    串行收集器: 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器也可以用在小数据量(100M左右)情况下的多 ...