最近导师让研究一下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. zip压缩解压缩 项目icsharpcode-SharpZipLib-e012155

    大家可以到http://www.icsharpcode.net/opensource/sharpziplib/ 下载SharpZiplib的最新版本,支持Zip, GZip, BZip2 和Tar格式 ...

  2. 【HDOJ】5288 OO’s Sequence

    二分寻找对于指定pos的最左因数点和最右因数点. /* 5288 */ #include <iostream> #include <string> #include <m ...

  3. git rebase实战

    在develop分支上rebase另外一个分支master,是将master作为本地,develop作为远端来处理的. 最后的效果是,develop分支看起来像是在master分支的最新的节点之后才进 ...

  4. asp.net中的<%%>的几种形式的用法

    转自:http://blog.csdn.net/wang379275614/article/details/9625911 在asp.net中经常出现包含这种形式<%%>的html代码,总 ...

  5. (转载)mysql decimal、numeric数据类型

    (转载)http://www.cnblogs.com/qiantuwuliang/archive/2010/11/03/1867802.html 可能做程序的人都知道,float类型是可以存浮点数(即 ...

  6. Excel和XML文件导入

    using System;using System.Collections;using System.Collections.Generic;using System.Configuration;us ...

  7. jQuery获取属性之自己遇到的问题

    刚开始是这种写法  用的 attr  结果获取不到 if($("#reg_username_span").attr("display") == 'block') ...

  8. Web---字节输出流和字符输出流的共存问题、转发、重定向、请求包含知识点讲解

    本章博客的知识点: 1.字节输出流和字符输出流的共存问题 2.转发时,两个servlet都输出信息的问题 详细知识,见OneServlet和TwoServlet源代码中的注释 转发:传参,访问顺序(d ...

  9. 传输层之TCP

    ---恢复内容开始--- 坞无尘水槛清,相思迢递隔重城. 秋阴不散霜飞晚,留得枯荷听雨声.    --李商隐 上一篇中我们了解了socket编程是基于TCP或者UDP,所以我们有必要对TCP,和UDP ...

  10. Hadoop之Pig安装

    Pig可以看做是Hadoop的客户端软件,使用Pig Latin语言可以实现排序.过滤.求和.分组等操作. Pig的安装步骤: 一.去Pig的官方网站下载.http://pig.apache.org/ ...