# WebRTC **Repository Path**: jfq123/web-rtc ## Basic Information - **Project Name**: WebRTC - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-09 - **Last Updated**: 2021-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## (一) 环境搭建 ### 2 安装nodejs brew install nodejs ### 3 安装依赖库 brew install npm ### 4 创建一个简单的http服务 - require 引入http模块 - 创建http服务 - 监听端口 ``` var http = require('http'); var app = http.createServer(function(req, res){ res.writeHead(200, {'Content-Type':'text/plain'}); res.end('Hello World\n'); }).listen(8080, '0.0.0.0'); ``` ### 5 启动服务 ``` node server.js ``` 至此一个简单的服务端程序就完成了,在浏览器中输入域名和对应的端口好就可以看到屏幕中输出Hello World。 ### 6 引入其他模块 功能强大的框架 ``` npm install express ``` 批量发布框架 ``` npm install serve-index ``` ### 7 创建一个https服务 申请摄像头麦克风的使用权限必须是有https的服务。 ``` 'use strict' var https = require('https'); var fs = require('fs'); var options = { key :fs.readFileSync('./cert/test.key'), cert:fs.readFileSync('./cert/test.pem') } var app = https.createServer(options, function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World!\n'); }).listen(443, '0.0.0.0'); ``` ## (二) 设备信息获取 ### 1 html代码,用于显示当前设备的信息 ``` WebRTC get audio and video devices
``` ### 2 js代码,用于获取当前设备信息 ``` 'use strict' var audioSource = document.querySelector("select#audioSource"); var audioOutput = document.querySelector("select#audioOutput"); var videoSource = document.querySelector("select#videoSource"); if(!navigator.mediaDevices || !navigator.mediaDevices.emurateDevices){ console.log('emurateDevices is not support!'); }else{ navigator.mediaDevices.emurateDevices .then(gotDevices) .catch(handleError); } function gotDevices(devicesInfo){ devicesInfos.forEash(function(deviceInfo)){ console.log(deviceInfo.kind + ": label = "+deviceInfo.label + ": id = " + deviceInfo.deviceId + ": groupId = " + deviceInfo.groupId); var option = document.createElement('option'); option.html = deviceInfo.label; option.value = deviceInfo.deviceId; if(devicesInfo.kind === 'audioinput'){ audioSource.appendChild(option); }else if(devicesInfo.kind === 'audiooutput'){ audioOutput.appendChild(option); }else if(){ videoSource.appendChild(option); } } } function handleError(err){ console.log(err.name + “ : ” + err.message); } ``` ### 3 js打印结果 ``` audioinput: label = : id = default: groupId = c8c3ef9c92cf11acba2a3a50b317b9bf2cf30f5d401f9874445ed51e731ef4bd client.js:17 audioinput: label = : id = b12c633cd7017ae872295cc07950aa4f72c8dfcbb038481cda0a0ef3d0cc2f09: groupId = c8c3ef9c92cf11acba2a3a50b317b9bf2cf30f5d401f9874445ed51e731ef4bd client.js:17 videoinput: label = : id = b95c88c72235c31f445c13258cdb2d4ab5a774225b3757281d58b453fc14b0c0: groupId = cb329ecdbf1a92f2eadd2c3c5e6ca0cfbdb6a2ae3f93d5a2967c830444503c4b client.js:17 audiooutput: label = : id = default: groupId = c8c3ef9c92cf11acba2a3a50b317b9bf2cf30f5d401f9874445ed51e731ef4bd client.js:17 audiooutput: label = : id = a8c76b962c5b479073378dbde69fcf8edc05f125aa58d885a231bfc608c0cae2: groupId = c8c3ef9c92cf11acba2a3a50b317b9bf2cf30f5d401f9874445ed51e731ef4bd ``` 可以看到label没有值,这是因为没有获取到音频设备的权限。 通过下一节调用如下方法即可拿到权限。 ### 4 获取权限方法 ``` navigator.mediaDevices.getUserMedia ``` ## (三) 音视频数据采集及处理 ### html代码,用于显示视频 ``` WebRTC capture video and audio ``` ### js代码,用于获取视频流 ``` 'use strict' //后去到video标签 var videoplay = document.querySelector('video#player'); //将流赋值给video标签 function gotMediaStream(stream){ videoplay.srcObject = stream; } //打印错误日志 function handleError(err){ console.log('getUserMedia error : ', err); } if(!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia){ console.log('getUserMedia is not supported'); }else{ var constraints = { video : true, audio : true } navigator.mediaDevices.getUserMedia(constraints) .then(gotMediaStream) .catch(handleError) } ``` 通过以上js和html代码,就能将采集出摄像头的数据和音频数据。 但是以上方法是有浏览器的兼容性的问题。所以需要在js里面加入以下开源库 ``` https://webrtc.github.io/adapter/adapter-latest.js ``` 完整html代码 ``` WebRTC capture video and audio ```