最近导师让研究一下webrtc,希望将来用到我们的ICT2系统中。

但是从来没有过做web的基础,无论前端还是后端,html、js全都从头学起。html还好说,没有太过复杂的东西。

js就有点难度了,大致翻了一下js权威指南的书,了解了一下基本的语法,也算足够应付。但是对其中浏览器内置的各种对象,完全不了解。

只能慢慢熟悉,一步一步来。

第一部分 获取webcamera

这个比较简单,主要使用了getUserMedia()这个函数。下面是从网上获取的资料:

1、navigator.getUserMedia()

提示用户需要权限去使用像摄像头或麦克风之类的媒体设备.如果用户提供了这个权限,successCallback函数会被调用,且接收一个LocalMediaStream 对象作为参数.

navigator.getUserMedia ( constraints, successCallback, errorCallback );

示例

下面使用浏览器前缀来调用getUserMedia().

 
 navigator.getMedia = ( navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia); navigator.getMedia ( // constraints
{
video: true,
audio: true
}, // successCallback
function(localMediaStream) {
var video = document.querySelector('video');
video.src = window.URL.createObjectURL(localMediaStream);
video.onloadedmetadata = function(e) {
// Do something with the video here.
};
}, // errorCallback
function(err) {
console.log("The following error occured: " + err);
} );
 

参数

参数  是否必须  描述 
constraints 必须 successCallback中传入的 LocalMediaStream对象所支持的媒体类型。
successCallback  必须 当应用中传递LocalMediaStream对象时触发的函数。
errorCallback 可选 当调用媒体设备失败时触发的函数.

constraints

constraints参数是一个 MediaStreamConstraints 对象,包含两个值为布尔值的成员: video 及 audio. 这个参数描述了被 LocalMediaStream对象所支持的媒体类型,使用时,需要在constraints参数里指定某个类型或者两个类型.如果某特定类型不被浏览器所支持, getUserMedia 会调用errorCallback函数,并传入错误类型NOT_SUPPORTED_ERROR. 如果浏览器不能得到特定类型的音频或者视频流, getUserMedia 会调用 errorCallback 函数,并传入错误类型MANDATORY_UNSATISFIED_ERR.

若某种媒体类型未被指定,他的值默认为false。下面的例子描述了如何去设置constraints函数接收audio与video:

{ video: true, audio: true }
 

successCallback

getUserMedia 函数会调用successCallback 并传入LocalMediaStream 对象,这个对象包含媒体流。你可以将这个对象分配给适合的元素,之后处理,就像下面例子所做的一样。

 function(localMediaStream) {
var video = document.querySelector('video');
video.src = window.URL.createObjectURL(localMediaStream);
video.onloadedmetadata = function(e) {
// Do something with the video here.
};
},

errorCallback

getUserMedia 函数调用errorCallback 时会包含一个 code 参数,如下所示:

Error  Description 
PERMISSION_DENIED  用户拒绝了浏览器请求媒体的权限
NOT_SUPPORTED_ERROR  constraint中指定的媒体类型不被支持
MANDATORY_UNSATISFIED_ERROR  指定的媒体类型未接收到媒体流


参考https://developer.mozilla.org/zh-CN/docs/WebRTC/navigator.getUserMedia

2、 获取html标签

html中添加<video id = “videoid” autoplay></video>。在js中需要获取标签使用:

var video = document.getElementById(“videoid”)

或者

var video = document.querySelector(“video”).

3、 设置video的src

如第一部分中所示,使用

video.src = window.URL.createObjectURL(localMediaStream);

window.URL.createObjectURL()

概述

创建一个新的对象URL,该对象URL可以代表某一个指定的File对象或Blob对象.

语法

objectURL
= window.URL.createObjectURL(blob);
  • blob参数是一个File对象或者Blob对象.

  • objectURL是生成的对象URL.通过这个URL,可以获取到所指定文件的完整内容.

示例

查看使用对象URL显示图片.

附注

在每次调用createObjectURL()方 法的时候,都会创建一个新的对象URL,即使参数中的这个对象已经有了自己的对象URL.在你不需要这些对象URL的时候,你应该通过调用 window.URL.revokeObjectURL()方法来释放它们所占用的内容.虽然即使你不主动释放它们,浏览 器也会在当前文档被卸载的时候替你释放,不过,考虑到更好的性能和更少的内存占用,你应该在安全的时候主动施放它们.


参考:
https://developer.mozilla.org/zh-CN/docs/Web/API/URL.createObjectURL
测试使用的代码:
main.js
 var video = document.getElementById("video");
var constraints= {
audio: true,
video: true
};
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
if(navigator.getUserMedia){
if(navigator.webkitURL){
navigator.getUserMedia(constraints,
function(stream){
video.src = window.webkitURL.createObjectURL(stream);
},
function(error){ alert(error);}
);
alert("webkitURL not existed!");
}
else{
navigator.getUserMedia(constraints,
function(stream){
video.src = window.webkitURL.createObjectURL(stream);
},
function(error){ alert(error);}
);
alert("webkitURL is existed!");
}
}
else{
alert("navigator.getUserMedia Error!!!");
}

getUserMedia.html

 <!DOCTYPE html>
<html>
<head>
<meta lang = "en">
<meta charset = "gb2312"/>
<title>webRTC test1 ---[use webcam]</title>
</head>
<body>
<video autoplay id = "video"></video>
<script src = "main.js">
</script>
</body>
</html>

webrtc学习———记录一的更多相关文章

  1. webrtc学习———记录三:mediaStreamTrack

    参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...

  2. webrtc学习———记录二:canvas学习

    参考资料: http://bucephalus.org/text/CanvasHandbook/CanvasHandbook.html#getcontext2d https://developer.m ...

  3. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  4. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  5. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  6. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  7. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  8. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  9. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

随机推荐

  1. git ignore 的使用

    http://www.barretlee.com/blog/2015/09/06/set-gitignore-after-add-file/ 需要注意的 **: 如果一个 pattern 以 ** 开 ...

  2. bzoj1558

    好题,初看以为只要差分然后维护相同的段数目但是请注意下面的情况2 3 5 8 9 1 2 3 4 这显然答案是3而不是4因此我们还要再维护ld,rd表示左右单独的段长度和s表示不包括左右单独的段,中间 ...

  3. [zz] makefile中=和:=的区别

    转载自:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html 在Makefile中我们经常看到 = := ?= +=这几个赋 ...

  4. 1116 HTML CSS

    1. JPEG和GIF在使用时的注意事项: JPEG可以连续调次(复制品中有中间层次,如照片)图像中获得最好效果:JPEG可以用1600万色显示图像,是有损格式,不支持透明. GIF适用于几种纯色组成 ...

  5. HDU4283:You Are the One(区间DP)

    Problem Description The TV shows such as You Are the One has been very popular. In order to meet the ...

  6. CentOS6.6从头到尾部署nginx与tomcat多实例 转

    前提条件: 1.需要一个全新的centos系统(本文中用到是centos6.6) 2.vmware虚拟机 3.vmware下安装centos系统,以NAT方式与宿主机相连 4.在centos系统中pi ...

  7. Maven配置 settings.xml 转

    https://my.oschina.net/qjx1208/blog/201085 摘要: 记录settings.xml的配置,理解mirror.repository.profile的关系 本地仓库 ...

  8. 解决SDK下载时速度过慢的问题

    1.打开android sdk manager 2.打开tool->options,如图所示 3.将Proxy Settings 里的HTTP Proxy Server和HTTP Proxy P ...

  9. JDBC——事物管理

    案例:银行转账问题,数据库如下 相关API setAutoCommit(boolean autoCommit)  将此连接的自动提交模式设置为给定状态.设置事务是否自动提交如果设置为false,表示手 ...

  10. 无法打开SQL Server的连接

       机房收费系统重构版的登陆敲了好几天了,总算把登陆窗口敲完了,代码调试的差点儿相同了,问题就处在数据库了.    SQL Server配置管理里的SQL  Server服务都启动了,可是还是报这个 ...