技术前言

通过上次课程“WebRTC简介”我们知道了WebRtc技术主要是为了实现网页之间的实时通讯,本次课程我们将用一个简单实例展开讲解WebRTC调取本地摄像头的具体方法及原理。

接口方法

语法
navigator.getUserMedia(constraints,successCallback, errorCallback );
参数
1. constraints
MediaStreamConstaints对象指定了请求使用媒体的类型,还有每个类型的所需要的参数。例如下面只获取视频而不获取音频:
var constraints = {
audio: false,
video: true
}
2. successCallback
当调用成功后,successCallback中指定的函数就被调用,包含了媒体流的MediaStream对象作为它的参数。
例如 getUserMedia() 函数执行成功, 摄像头视频流可以设置为video标签的src属性资源:

function successCallback(stream) {window.stream = stream; // stream available to consoleif (window.URL) {video.src = window.URL.createObjectURL(stream);} else {video.src = stream;}
}

3. errorCallback
当调用失败,errorCallback中指定的函数就会被调用,MediaStreamError对象作为它唯一的参数。

滤镜处理

.videoStyle1 {-webkit-filter: blur(4px) invert(1) opacity(0.5);}.videoStyle2 {filter: hue-rotate(180deg) saturate(200%);-moz-filter: hue-rotate(180deg) saturate(200%);-webkit-filter: hue-rotate(180deg) saturate(200%);}

实例代码

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"><title>WebRTC获取视频流</title><style type="text/css">video {border: 1px solid black;max-width: 100%;width: 320px;}.videoStyle1 {-webkit-filter: blur(4px) invert(1) opacity(0.5);}.videoStyle2 {filter: hue-rotate(180deg) saturate(200%);-moz-filter: hue-rotate(180deg) saturate(200%);-webkit-filter: hue-rotate(180deg) saturate(200%);}</style><script src="../js/lib/jquery-1.11.1.min.js"></script><script type="text/javascript">(function($) {$.fn.video = function(msc, streamAction) {const setting = {video: true,audio: false};jQuery.extend(setting, msc);this.get(0).addEventListener('loadedmetadata', function() {console.log("视频加载完成");});navigator.mediaDevices.getUserMedia(setting).then(stream => {this.get(0).srcObject = stream;if(typeof(streamAction) == "function") {streamAction(stream);}}).catch(e => console.log('navigator.getUserMedia error: ', e));}})(jQuery);</script><script type="text/javascript">$(function() {$("input").click(function() {switch(this.id) {case "Openvideo":$("#localVideo").video();break;default:$("#localVideo").attr('class', this.id);break;}});})</script></head><body><h1>WebRTC获取视频流</h1><div><input type="button" value="打开视频" id="Openvideo" /><input type="button" value="样式1" id="videoStyle1" /><input type="button" value="样式2" id="videoStyle2" /></div><video id="localVideo" autoplay playsinline></video></body></html>

注意代码中不要忘记在 video 标签添加 autoplay 属性. 否则, 你将只能看到一张图片而不是动态视频!
为了确保video标签大小不会超出父容器.添加了 width 和 max-width 来设置video标签的首选尺寸和最大尺寸. 浏览器将会自动计算其高度.

运行结果

用Chrome 浏览器打开以上实例代码页面得到如下结果

WebRTC实践历程:

1. WebRTC实践简介
2. WebRTC实践获取视频流
3. WebRTC实践传输视频流
4. WebRTC实践信令服务
5. WebRTC实践点对点通信
6. WebRTC实践视频聊天室
7. WebRTC实践总结

WebRTC实践获取视频流相关推荐

  1. WebRTC实践视频聊天室

    技术前言 通过前几次教程已经可以轻松的实现两个浏览器之间的文本信令交互和视频对讲功能.本次课程要融合以前所有技术点,做一次综合性实例,采用nodejs实现一个完整的聊天室功能.其界面样式仿照微信的界面 ...

  2. FFmpeg中一个线程获取视频流一个线程执行scale测试代码

    在https://blog.csdn.net/fengbingchun/article/details/94712986 中介绍过如果usb视频流编码类型为rawvideo则无需进行解码,可直接通过a ...

  3. safari 获取视频流_如何在Safari中将RSS feed和社交媒体合并为一个流

    safari 获取视频流 Safari allows you to subscribe to RSS feeds and add your social media accounts so you c ...

  4. java 人脸识别jar包_java版天网人脸识别系统,获取视频流人脸识识别推送服务器展示...

    java版天网人脸识别系统,获取视频流 进行人脸识别后推送到流媒体服务器实时展示 获取视频流 进行人脸识别后推送到red5服务器(人脸识别技术由虹软®提供) 整个系统共有两个项目组成 red5_hls ...

  5. java读取视频_【转载】Java 后端读取视频文件获取视频流后 前端进行播放/下载...

    /** * 获取视频流 * @param response * @param videoId 视频存放信息索引 * @return * @author xWang * @Date 2020-05-20 ...

  6. 前端获取视频流并播放

    2017-09-05 前端获取视频流并播放  JavaScript html5出来后,前端播放视频瞬间变得方便容易多了,一个<video>标签就可以搞定,只要给src属性正确的文件路径 ...

  7. cv2.VideoCapture从摄像头获取视频流并处理但是处理速度慢

    载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/weixin_40802676/article/details/107012916 cv2.VideoCaptur ...

  8. webrtc 状态获取

    webrtc状态获取 简单调用 回调类 class NRPlayerStatsObserver : virtual public webrtc::RTCStatsCollectorCallback{p ...

  9. 流媒体服务器EasyNVR怎样获取视频流的播放地址?

    很多用户要求在视频直播的过程中,直播画面或者链接是可以进行分享的,以便更多的人能够看到,这一项要求被运用在很多监管平台当中. 在我们的流媒体服务器EasyNVR中可以通过多种方式获得播放地址,本文就为 ...

最新文章

  1. Python2和Python3共存下使用robotframework
  2. uml图工具_UML建模工具更新情况(二)
  3. Qt QWidget实现开关控件SwithButton(SlipButton)
  4. C++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
  5. 小新pro13睡眠后无法唤醒_轻薄的外表狂野的心——联想小新 Pro13 测评
  6. js跳转页面时添加header_鸿蒙应用开发踩坑记之路由跳转
  7. c语言树写入文件,如何安全地实现文件树遍历(C语言)
  8. 贝叶斯公式设b_数据分析经典模型——朴素贝叶斯
  9. 联想服务器重装2008,联想ThinkSystem机器安装2008R2详细教程
  10. Java工作笔记-使用Maven创建Spring Boot并生成war包外部tocamt运行
  11. 首席赚钱省钱专家小程序1.5.8+前端
  12. 【算法】剑指 Offer 12. 矩阵中的路径
  13. 60-10-020-命令-kafka-topics.sh
  14. 每天学一点flash(56)循环的小实验
  15. Sublime个性化配置
  16. Java基础篇:什么是死锁?如何去避免它?
  17. 插入排序详解(Java实现)
  18. tumblr_如何在WordPress中添加Tumblr共享按钮
  19. android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现
  20. hive静态与动态分区理解

热门文章

  1. Python正则表达式 .,[],\d,\w,\s,\S,\D,\W的用法
  2. c语言asinh函数,C ++ STL中的asinh()函数
  3. java 实现SocketIo客户端
  4. 想学怎么把截图的英文翻译成中文?这就教你翻译截图
  5. 【毕业设计】基于的单片机的移动硬盘设计与实现 - stm32 嵌入式 物联网
  6. 基于java web servlet生鲜商城管理系统源码含报告文档
  7. openfeign实现远程调用
  8. python绘制线型图
  9. sublime加动画css3,CSS3 Sublime 代码编辑器模拟
  10. python爬取小说写入txt_零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版...