行业解决方案:WebRTC录采集平面数据

优采云 发布时间: 2022-10-20 18:39

  行业解决方案:WebRTC录采集平面数据

  1. 网络交易采集

  WebRTC中有一个可用于获取桌面的API:获取显示媒体

  var promise = navigator.mediaDevices.getDisplayMedia(constraints);

  约束是可选的 约束约束与 getUser 媒体函数中的约束一致。

  2. 采集平面数据

  采集平面数据:此功能在 Chrome 中是实验性的。

  在实际战斗之前,我们需要打开浏览器并进行设置 chrome://flags/#enable-experimental-web-platform-features

  如下图所示:

  接下来,让我们看一下具体的js代码,如下所示:

  C++音频和视频开发

  学习地址:免费]FFMPEG/WebRTC/RTMP/NDK/安卓音视频流高级开发

  【文章福利】:免费C++音视频学习包、技术视频、内容包括(音视频开发、大厂面试问题、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免费分享,如有必要,可以添加君阳接收! ~学习交流俊阳994289133点击加入即可接收信息包

  'use strict'

var audioSource = document.querySelector('select#audioSource');

var audioOutput = document.querySelector('select#audioOutput');

var videoSource = document.querySelector('select#videoSource');

// 获取video标签

var videoplay = document.querySelector('video#player');

// 获取音频标签

var audioplay = document.querySelector('audio#audioplayer');

//div

var divConstraints = document.querySelector('div#constraints');

// 定义二进制数组

var buffer;

var mediaRecorder;

//record 视频录制 播放 下载按钮

var recvideo = document.querySelector('video#recplayer');

var btnRecord = document.querySelector('button#record');

var btnPlay = document.querySelector('button#recplay');

var btnDownload = document.querySelector('button#download');

//filter 特效选择

var filtersSelect = document.querySelector('select#filter');

//picture 获取视频帧图片相关的元素

var snapshot = document.querySelector('button#snapshot');

var picture = document.querySelector('canvas#picture');

picture.width = 640;

picture.height = 480;

// deviceInfos是设备信息的数组

function gotDevices(deviceInfos){

// 遍历设备信息数组, 函数里面也有个参数是每一项的deviceinfo, 这样我们就拿到每个设备的信息了

deviceInfos.forEach(function(deviceinfo){

// 创建每一项

var option = document.createElement('option');

option.text = deviceinfo.label;

option.value = deviceinfo.deviceId;

if(deviceinfo.kind === 'audioinput'){ // 音频输入

audioSource.appendChild(option);

}else if(deviceinfo.kind === 'audiooutput'){ // 音频输出

audioOutput.appendChild(option);

}else if(deviceinfo.kind === 'videoinput'){ // 视频输入

videoSource.appendChild(option);

}

})

}

// 获取到流做什么, 在gotMediaStream方面里面我们要传人一个参数,也就是流,

// 这个流里面实际上包含了音频轨和视频轨,因为我们通过constraints设置了要采集视频和音频

// 我们直接吧这个流赋值给HTML中赋值的video标签

// 当时拿到这个流了,说明用户已经同意去访问音视频设备了

function gotMediaStream(stream){

<p>

// audioplay.srcObject = stream;

videoplay.srcObject = stream; // 指定数据源来自stream,这样视频标签采集到这个数据之后就可以将视频和音频播放出来

// 通过stream来获取到视频的track 这样我们就将所有的视频流中的track都获取到了,这里我们只取列表中的第一个

var videoTrack = stream.getVideoTracks()[0];

// 拿到track之后我们就能调用Track的方法

var videoConstraints = videoTrack.getSettings(); // 这样就可以拿到所有video的约束

// 将这个对象转化成json格式

// 第一个是videoConstraints, 第二个为空, 第三个表示缩进2格

divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);

window.stream = stream;

// 当我们采集到音视频的数据之后,我们返回一个Promise

return navigator.mediaDevices.enumerateDevices();

}

function handleError(err){

console.log(&#39;getUserMedia error:&#39;, err);

}

function start() {

// 判断浏览器是否支持

if(!navigator.mediaDevices ||

!navigator.mediaDevices.getDisplayMedia){ // 判断是否支持录屏

console.log(&#39;getUserMedia is not supported!&#39;);

}else{

// 获取到deviceId

var deviceId = videoSource.value;

// 这里是约束参数,正常情况下我们只需要是否使用视频是否使用音频

// 对于视频就可以按我们刚才所说的做一些限制

/**

* video : {

width: 640, // 宽带

height: 480, // 高度

frameRate:15, // 帧率

facingMode: &#39;enviroment&#39;, // 设置为后置*敏*感*词*

deviceId : deviceId ? deviceId : undefined // 如果deviceId不为空直接设置值,如果为空就是undefined

},

*/

var constraints = { // 表示同时采集视频金和音频

video : true,

audio : false

}

// 调用录屏API

navigator.mediaDevices.getDisplayMedia(constraints) // 这样就可以抓起桌面的数据了

.then(gotMediaStream) // 使用Promise串联的方式,获取流成功了

.then(gotDevices)

.catch(handleError);

}

}

start();

// 当我选择*敏*感*词*的时候,他可以触发一个事件,

// 当我调用start之后我要改变constraints

videoSource.onchange = start;

// 选择特效的方法

filtersSelect.onchange = function(){

videoplay.className = filtersSelect.value;

}

// 点击按钮获取视频帧图片

snapshot.onclick = function() {

picture.className = filtersSelect.value;

// 调用canvas API获取上下文,图片是二维的,所以2d,这样我们就拿到它的上下文了

// 调用drawImage绘制图片,第一个参数就是视频,我们这里是videoplay,

// 第二和第三个参数是起始点 0,0

// 第四个和第五个参数表示图片的高度和宽度

picture.getContext(&#39;2d&#39;).drawImage(videoplay, 0, 0, picture.width, picture.height);

}

//

  

function handleDataAvailable(e){ // 5、获取数据的事件函数 当我们点击录制之后,数据就会源源不断的从这个事件函数中获取到

if(e && e.data && e.data.size > 0){

buffer.push(e.data); // 将e.data放入二进制数组里面

// 这个buffer应该是我们在开始录制的时候创建这个buffer

}

}

// 2、录制方法

function startRecord(){

buffer = []; // 定义数组

var options = {

mimeType: &#39;video/webm;codecs=vp8&#39; // 录制视频 编码vp8

}

if(!MediaRecorder.isTypeSupported(options.mimeType)){ // 判断录制的视频 mimeType 格式浏览器是否支持

console.error(`${options.mimeType} is not supported!`);

return;

}

try{ // 防止录制异常

// 5、先在上面定义全局对象mediaRecorder,以便于后面停止录制的时候可以用到

mediaRecorder = new MediaRecorder(window.stream, options); // 调用录制API // window.stream在gotMediaStream中获取

}catch(e){

console.error(&#39;Failed to create MediaRecorder:&#39;, e);

return;

}

// 4、调用事件 这个事件处理函数里面就会收到我们录制的那块数据 当我们收集到这个数据之后我们应该把它存储起来

mediaRecorder.ondataavailable = handleDataAvailable;

mediaRecorder.start(10); // start方法里面传入一个时间片,每隔一个 时间片存储 一块数据

}

// 3、停止录制

function stopRecord(){

// 6、调用停止录制

mediaRecorder.stop();

}

// 1、录制视频

btnRecord.onclick = ()=>{

if(btnRecord.textContent === &#39;Start Record&#39;){ // 开始录制

startRecord(); // 调用startRecord方法开启录制

btnRecord.textContent = &#39;Stop Record&#39;; // 修改button的文案

btnPlay.disabled = true; // 播放按钮状态禁止

btnDownload.disabled = true; // 下载按钮状态禁止

}else{ // 结束录制

stopRecord(); // 停止录制

btnRecord.textContent = &#39;Start Record&#39;;

btnPlay.disabled = false; // 停止录制之后可以播放

btnDownload.disabled = false; // 停止录制可以下载

}

}

// 点击播放视频

btnPlay.onclick = ()=> {

var blob = new Blob(buffer, {type: &#39;video/webm&#39;});

recvideo.src = window.URL.createObjectURL(blob);

recvideo.srcObject = null;

recvideo.controls = true;

recvideo.play();

}

// 下载视频

btnDownload.onclick = ()=> {

var blob = new Blob(buffer, {type: &#39;video/webm&#39;});

var url = window.URL.createObjectURL(blob);

var a = document.createElement(&#39;a&#39;);

a.href = url;

a.style.display = &#39;none&#39;;

a.download = &#39;aaa.webm&#39;;

a.click();

}</p>

  原创链接:WebRTC录制采集平面数据 - 信息中心 - 音视频发展中国网 - 打造中国最权威的音视频技术交流分享论坛

  解决方案:百度seo快速排名工具!

  软件介绍

  百度seo快速排名工具,用来提高百度权重,百度排名的小工具。

  使用场景

  如果您以前没有看过它,您可以先回顾一下。

  就是说做网站一般来说,如果你想做一个高权重的网站,要花很长时间,甚至很多年,如果你想花时间做一个高权重网站,可以刷品牌字。

  

  比如第一次做煎蛋的时候,虽然权重是0,但是必须在上排名第一。

  只是炒蛋网这个词没有索引,所以权重也是0。我们想一想:只要我们把炒蛋网这个词刷出索引,然后把这个词提交到站长家,那么我们可以在短时间内获得高权重。

  另外,一个带有“网上赚钱”等索引的词,搜索这个词,你的网站可能在第10页,普通人找不到你的网站。

  但是如果你用软件,搜索这个词,然后进入你的网站,搜索引擎也会认为你的网站满足了用户的需求,也会提升你的排名。

  指示

  打开软件设置“ip代理api地址”、搜索词、URL。

  

  添加会有点慢。

  也可以直接在文件夹中设置:

  需要注意的是ip代理api地址需要购买和付费,有几个免费的已经测试过,不能使用。

  另外,搜狗搜索也不行。

  如果要刷多个字,可以多打开软件,放在多个文件夹中,全部打开!

  下载链接

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线