WebRTC–getUserMedia-filter

示例说明:抓取MediaStream的一帧数据,并对该帧数据使用Css滤镜效果。

步骤:

1. 由getUserMedia方法获取一个可用的MediaStream

2. canvas方法drawImage抓取MediaStream的一帧数据

3. 根据用户点击操作,对canvas元素使用滤镜效果的css样式

在webkit内核中,css滤镜有blur, grayscale, invert, sepia等

参见示例Demo

步骤:

定义滤镜,下面是相应的CSS代码(以下滤镜为webkit内核提供的)

<style>
  .blur {
    -webkit-filter: blur(3px);
  }
  .grayscale {
    -webkit-filter: grayscale(1);
  }
  .invert {
    -webkit-filter: invert(1);
  }
  .sepia {
    -webkit-filter: sepia(1);
  }
  button {
    width: 8.1em;
  }
  button#snapshot {
    margin: 0 1em 1em 0;
  }
</style>

页面代码

<video autoplay></video>
  <button id="snapshot">截图</button>
  <button id="filter">使用滤镜</button>
  <canvas></canvas>

js代码

snapshotButton = document.querySelector("button#snapshot");	//截图按钮
filterButton = document.querySelector("button#filter"); //滤镜铵钮
video = document.querySelector("video"); //video标签
canvas = document.querySelector("canvas"); //canvas画布

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

// 滤镜数组
var filters = [‘blur‘, ‘grayscale‘, ‘invert‘, ‘sepia‘];

// 截图
snapshotButton.onclick = function snap(){
  canvas.getContext("2d").drawImage(video, 0, 0, canvas.width, canvas.height);
}

// 应用滤镜(循环使用)
filterButton.onclick = function(){
  var newIndex = (filters.indexOf(canvas.className) + 1) % filters.length;
  canvas.className = filters[newIndex];
}

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

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

// MediaStream作为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);
时间: 2024-08-30 17:54:33

WebRTC–getUserMedia-filter的相关文章

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 - getUserMedia()

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

WEBRTC基本介绍

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

《Getting Started with WebRTC》第一章 WebRTC介绍

? 本章是对WebRTC做概念性的介绍. 阅读完本章后.你将对下面方面有一个清晰的理解: .  什么是WebRTC .  怎样使用它 .  哪些浏览器支持 1.1. WebRTC介绍 World Wide Web(WWW)是出如今1990年代的早期, 它是建立在使用HREF超链接的以页面为中心的模型上. 在这个网页的早期模型中,浏览器从一个网页到还有一个网页是通过更新HTML内容来实现的. 到了2000年,一种新的网页浏览方式开发出来了, 且在后面变成了一个标准.即 XMLHttpRequest

《Getting Started with WebRTC》第二章 WebRTC技术介绍

本章作WebRTC的技术介绍,主要讲以下的概念: .  如何建立P2P的通信 .  有效的信令选项 .  关键API的关系 2.1 设置通信 尽管WebRTC通信的基础是P2P的, 但设置这个通信的初始步骤是要求一些协作的. 这些动作通常由Web服务器和/或信令服务器提供. 这个协作可以允许两个或多个WebRTC设备或端找到彼此,交换通信的细节, 协商定义了他们如何通信的会话, 最后建立它们之间的直播P2P媒体流. 2.2 一般流程 应用场景其实是很多的,从简单的页面DEMO到多方会议. 这里只

Android IOS WebRTC 音视频开发总结(七)

前面写的一系列总结都是讲webrtc如何下载,编译,开发的,有些人可能有点云里雾里了,WEBRTC不是用来搞跨浏览器开发的吗,怎么我讲的这些跟浏览器扯不上任何关系,其实看看下面这个架构图,你就明白了(本系列文章转载请说明出处:http://www.cnblogs.com/lingyunhu). 我前面讲的这些内容都封装在browser里面了,如音视频的采集,编码,传输,回声消除,丢包重传.所以如果你想将这些功能集成到你的产品里面就必须理解这些东西. 如果你只想做基于浏览器的视频通话功能,上面这些

WebRTC in the real world: STUN, TURN and signaling

What is signaling? Signaling is the process of coordinating communication. In order for a WebRTC application to set up a 'call', its clients need to exchange information: Session control messages used to open or close communication. Error messages. M

腾讯IVWEB团队:WebRTC 点对点直播

WebRTC 全称为:Web Real-Time Communication.它是为了解决 Web 端无法捕获音视频的能力,并且提供了 peer-to-peer(就是浏览器间)的视频交互.实际上,细分看来,它包含三个部分: MediaStream:捕获音视频流 RTCPeerConnection:传输音视频流(一般用在 peer-to-peer 的场景) RTCDataChannel: 用来上传音视频二进制数据(一般用到流的上传) 但通常,peer-to-peer 的场景实际上应用不大.对比与去

Android IOS WebRTC 音视频开发总结(四九)-- ffmpeg介绍

本文主要介绍ffmpeg,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,个人微信公众号blacker,更多详见www.rtc.help 说明: ps1:如果直接从webrtc开始学习音视频,你可能没听过ffmpeg,也不需要用到,但随着个人能力提升,你会发现这套东西确实很有用. 就我目前接触到的音视频企业,还没有碰到过没用过ffmpeg的(视频厂商都会对用户上传的视频文件做转码,因为他们的客户端在播放的时候需要根据不同客户端的网络带宽适配不同分辨率,或做些自定义开发),由此可