WebRTC Demo - getUserMedia()

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元素就可以使用此地址作为其输入。

时间: 2024-11-07 08:14:39

WebRTC Demo - getUserMedia()的相关文章

WebRTC–getUserMedia &amp; Canvas

下面是一个使用getUserMedia接口和Canvas的drawImage方法实现的截图功能(截取视频中的一帧). 基本思路是这样子的: getUserMedia获取一个MediaStream, stream stream作为video的输入源 提供一个button按钮.当用户点击时,使用canvas的drawImage方法绘制video的一帧数据 源代码位于gitlab上 index.html代码 <!DOCTYPE html> <html> <head> <

WebRTC学习笔记_Demo收集

1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中添?了webrtc源代码,放在/external/webrtc/,可是Android并没实用到它,更没有被浏览器使用.当时试图在Android 2.3(Gingerbread)高通平台的手机上用H.264 硬件codec替换掉WebRTC缺省使用的VP8软codec,费了不少劲勉强换掉后效果非常差仅仅得放弃. 近期得知Google最新版的Chrome

webrtc学习(一): webrtc开始

一. 编译webrtc 1. 预先准备 1)  vpn. 用于同步代码. 这里给一个大概的估计吧. windows端包含vs2013 win8sdk wdk chromium源码等等, 总共需要至少8G. android端还需要android ndk sdk以及大量的依赖库, 大致也是10G往上. 所以需要网速不好的话, 同步一天也是很正常. 2. 同步代码及编译 http://www.webrtc.org/reference/getting-started 参考这个链接, 很详细, 需要认真看

webrtc学习———记录一

最近导师让研究一下webrtc,希望将来用到我们的ICT2系统中. 但是从来没有过做web的基础,无论前端还是后端,html.js全都从头学起.html还好说,没有太过复杂的东西. js就有点难度了,大致翻了一下js权威指南的书,了解了一下基本的语法,也算足够应付.但是对其中浏览器内置的各种对象,完全不了解. 只能慢慢熟悉,一步一步来. 第一部分 获取webcamera 这个比较简单,主要使用了getUserMedia()这个函数.下面是从网上获取的资料: 1.navigator.getUser

Android IOS WebRTC 音视频开发总结(六二)-- 大数据解密国外实时通讯行业开发现状

本文主要介绍国外实时通讯行业现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 上篇文章我们采用百度搜索指数来分析国内webrtc现状,得到不少同行认同,所以我们今天决定采用同样的方法来分析国外webrtc现状,不过这次的数据源来自google趋势,另外分析的同时会将国内与国外进行比对,让大家更好地了解两者之间的差异: 图表1:2005年-21015年的搜索趋势 分析说明: 1.整体趋势与国内一样,2011年

web即时通信1--WebSocket与WebRTC的三种实现方式对比

转自:http://demo.netfoucs.com/jrn1012/article/details/41982971 最近应项目组要求研究了下WebRTC(目前支持Firefox和Chrome),WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术.WebRTC使得开发者在浏览器无需安装任何插件就可

[IOS_HTML5]IOS7下HTML5的各种坑

 这些天 Apple 已经推出了 iOS 7 以及 iPhone 5S 和 iPhone 5C .Apple 面向 web 开发者仅仅发布了 10% 的所需信息,我可以说这是自 1.0 以来,bug 最多的 Safari 版本嘛.文本我将介绍新的 API 和特性,以及如果你有网站或 webapp ,马上需要处理的大多数问题. 简而言之 没有时间读这篇长文? UI 变化:工具栏色彩,新的全屏导航问题,新的主屏图标尺寸:iPhone 未使用 <title>:可能与新手势冲突. 新设备:对 web

使用Chrome采集摄像头并生成视频下载

主要使用2个技术点:WebRtc 的 getUserMedia 和 MediaRecorder 注意点 开始录制调用 start 方法要传入一个采样间隔,这样录制的媒体会按照你设置的值进行分割成一个个单独的区块, 而不是以默认的方式录制一个非常大的整块内容. demo地址:https://young-cowboy.github.io/gallery/MediaRecorder.html 参考资料 https://developer.mozilla.org/en-US/docs/Web/API/M

HTML5 Video P2P技术研究(转)

说明:之前在Flash时代,可以基于其实现P2P的技术,也就是现在主流的视频网站用的视频技术,不过要实现P2P技术,在Flash时代有点难,且要服务器支持等等:但是现在基于HTML5技术的P2P技术使用WebRTC实现,API相对简单,且集成也非常方便,现在主流网站正在逐步转向HTML5去实现P2P.注意,WebRTC不只可以实现P2P,同时也支持实时浏览器点对点的通讯,比如聊天.视频聊天等等. 一.背景 节约带宽,减少缓冲时间,提升服务质量,处理峰值流量, 视频观看的人越多,播放越流畅. 二.