WebRTC–getUserMedia & Canvas

下面是一个使用getUserMedia接口和Canvas的drawImage方法实现的截图功能(截取视频中的一帧)。

基本思路是这样子的

  1. getUserMedia获取一个MediaStream, stream
  2. stream作为video的输入源
  3. 提供一个button按钮。当用户点击时,使用canvas的drawImage方法绘制video的一帧数据

源代码位于gitlab上

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 to canvas - Snapshot</title>
<link rel="stylesheet" href="../css/main.css" />
</head>
<body>
<div id="container">

  <h1><a href="#" title="WebRTC Demo homepage">WebRTC Demo</a> <span>getUserMedia to canvas - 拍照</span></h1>

  <video autoplay></video>
  <button>拍照</button>
  <canvas></canvas>

  <p>使用canvas元素的<code>drawImage()</code>方法绘制video元素的一帧数据。</p>

  <p><code>canvas</code>, <code>video</code> and <code>stream</code>三个变量是全局的,用户可以从console中查看。</p>

  <a href="#" title="在gitlab上查看源代码" id="viewSource">查看源代码-gitlab.baidu.com</a>
  </div>

  <script src="js/main.js"></script>
</body>
</html>

main.js代码

// 全局变量
button = document.querySelector("button");
video = document.querySelector("video");
canvas = document.querySelector("canvas");

canvas.width = 480;
canvas.height = 360;

// 点击事件处理
// 在canvas上画一帧画像
button.onclick = function(){
  canvas.getContext("2d").drawImage(video, 0, 0, canvas.width, canvas.height);
}

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

var constraints = {audio: false, video: true};
var video = document.querySelector("video");

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

function errorCallback(error){
  console.log("navigator.getUserMedia error: ", error);
}

navigator.getUserMedia(constraints, successCallback, errorCallback);
 

drawImage方法定义如下:

context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

img - 规定要使用的图像、画布或视频

sx - 开始剪切的x位置

sy - 开始剪切的y位置

swidth - 被剪切的宽度

sheight - 被剪切的高度

时间: 2024-08-30 13:36:21

WebRTC–getUserMedia & Canvas的相关文章

qrcode render 二维码扫描读取

著名的 qrcode 是 zxing https://github.com/zxing/zxing 基于 java, java 真的是轮子多啊... zxing 的 javascript 版本是 https://github.com/LazarSoft/jsqrcode 这个版本的代码非常的 old school. 一上来就是十几行 script, 完全没有模块管理概念. 一堆全局变量 no npm, no typescript. 不过运行是 ok 的, 所以大家可以放心用. 主要的功能是 qr

WebRTC Demo - getUserMedia()

WebRTC介绍 WebRTC提供三类API: MediaStream,即getUserMedia RTCPeerConnection RTCDataChannel getUserMedia已经由Chrome, Opera和Firefox支持. RTCPeerConnection目前则由Chrome, Opera和Firefox支持.Chrome和Opera提供的接口名字为webkitRTCPeerConnection,Firefox则命名为mozRTCPeerConnection. RTCDa

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

参考资料: http://bucephalus.org/text/CanvasHandbook/CanvasHandbook.html#getcontext2d https://developer.mozilla.org/zh-CN/docs/Web/HTML/Canvas http://www.w3school.com.cn/html5/html5_canvas.asp https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasEle

Android WebRTC 音视频开发总结

www.cnblogs.com/lingyunhu/p/3621057.html 前面介绍了WebRTCDemo的基本结构,本节主要介绍WebRTC音视频服务端的处理,,转载请说明出处(博客园RTC.Blacker). 通过前面的例子我们知道运行WebRTCDemo即可看到P2P的效果,实际应用中我们不可能让用户自己去里面设置对方的IP和音视频端口, 而且即使设置了对方的IP和端口也不一定能运行起来,因为P2P如果双方不在同一个网段则还需穿透NAT,那服务端具体该如何部署呢? 1.信令服务: 想

关于webRTC中video的使用实践

此次demo使用chrome49调试测试 前端在操作视频输入,音频输入,输出上一直是比较弱的,或者说很难进行相关的操作,经过我最近的一些研究发现,在PC上实际上是可以实现这一系列的功能的,其实现原理主要是得益于google的webRTC技术. 什么是webRTC WebRTC,名称源自网页即时通讯(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API.它于2011年6月1日开源并在Google.Mozilla.Opera支持

HTML5新特性之WebRTC[转]

原文:http://www.cnblogs.com/jscode/p/3601648.html?comefrom=http://blogread.cn/news/ 1.概述 WebRTC是“网络实时通信”(Web Real Time Communication)的缩写,它主要用来让浏览器实时获取和交换视频.音频和数据. WebRTC共分三个API. MediaStream(又称getUserMedia) RTCPeerConnection RTCDataChannel getUserMedia主

WebRTC–getUserMedia-filter

示例说明:抓取MediaStream的一帧数据,并对该帧数据使用Css滤镜效果. 步骤: 1. 由getUserMedia方法获取一个可用的MediaStream 2. canvas方法drawImage抓取MediaStream的一帧数据 3. 根据用户点击操作,对canvas元素使用滤镜效果的css样式 在webkit内核中,css滤镜有blur, grayscale, invert, sepia等 参见示例Demo 步骤: 定义滤镜,下面是相应的CSS代码(以下滤镜为webkit内核提供的

WebRTC系列(1)-手把手教你实现一个浏览器拍照室Demo

1.WebRTC开发背景 由于业务需求,需要在项目中实现实时音视频通话功能,之前基于浏览器开发的Web项目要进行音视频通话,需要安装flash插件才能实现或者使用C/S客户端进行通信.随着互联网技术的驱动下,在很多场景下需要进行音视频通信,在生活中我们现在使用电话越来越少,使用微信和视频越来越多.在一些行业也需要进行音视频实时通信,如:在线教育,远程医疗,保险理赔等等.有了WebRTC,可以开发一些好的网页应用,使得音视频通话越来越简单,无需安装任何插件,只需打开网页,就能实现音视频通话,方然也

WEBRTC基本介绍

“WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术,Google开源了这项技术!” 就 冲着6000多万美金的技术,就很值得研究一下!WebRTC提供了视频会议的核心技术,包括音视频采集.编解码.网络传输.显示等功能,并且还支持跨平 台:Windows,Linux,Mac,Android,尤其是在实