项目作者: yf30301200

项目描述 :
这是我学习webrtc时记录的笔记,从捕获音视频,渲染 音视频传输,1v1直播
高级语言: JavaScript
项目地址: git://github.com/yf30301200/webrtc_js.git
创建时间: 2020-05-31T23:14:17Z
项目社区:https://github.com/yf30301200/webrtc_js

开源协议:

下载


WebRtc js client

这是一个webrtc的学习笔记

目录结构

Docker/ 运行环境

webserver/public 静态资源目录和功能实现

运行

Docker运行(推荐)

  1. cd Docker/ && docker-compose up

进入浏览器运行访问

  1. https://127.0.0.1:8888/MediaStream/index.html

安装nodejs环境

依赖

  1. npm install express serve-index socket.io log4js -g

进入webserver/目录

  1. cd webserver/ && node server.js

访问

  1. https://127.0.0.1:8888/MediaStream/index.html

TODO LIST

  • [x] 设备管理 webserver/public/MediaStream/index.html

  • [x] 捕获音视频 webserver/public/MediaStream/getdevice.html

  • [x] 给视频加上特效 webserver/public/MediaStream/index.html

  • [x] 从视频中截取图片 webserver/public/MediaStream/index.html

  • [x] 采集桌面数据 webserver/public/MediaStream/index.html

  • [x] 录制音视频 webserver/public/MediaStream/index.html

  • [x] 聊天室 webserver/public/chatroom/index.html

  • [x] 本地回环 webserver/public/peer/index.html

  • [x] SDP实战 webserver/public/testCreateOffer/index.html

  • [x] 搭建ICE Docker/docker-compose.yaml

  • [x] 信令服务器 webserver/public/server.js

  • [x] 1v1端对端传输 webserver/public/live/room.html

  • [x] 码率控制 webserver/public/bandwidth/index.html

  • [ ] webrtc统计信息

码率控制

通过chrome://webrtc-internals/查看.

搭建ICE

使用docker搭建

编写docker-compose:

  1. version: '3'
  2. services:
  3. coturn:
  4. image: instrumentisto/coturn
  5. tty: true
  6. container_name: coturn_test
  7. volumes:
  8. - ./:/etc/coturn/
  9. ports:
  10. - 3478:3478
  11. - 3478:3478/udp
  12. command: /bin/sh -c "turnserver -c /etc/coturn/turnserver.conf"

编写turnserver.conf:

  1. #中继服务器监听的IP地址,NAT环境下直接写私网IP地址,可以指定多个IP
  2. listening-ip=0.0.0.0
  3. #中继服务器转发地址(本地IP地址将用于传递数据包的给每个端),和监听地址一样
  4. #relay-ip=60.70.80.91
  5. #外部IP,NAT环境下直接写:公网IP/私网IP
  6. external-ip=192.168.1.13/192.168.1.13
  7. #打开fingerprint的注释,使用长期证书机制。
  8. fingerprint
  9. #打开密码验证,使用短期证书机制。
  10. lt-cred-mech
  11. #服务器名称,用于OAuth认证,默认和realm相同,直接填公网ip.部分浏览器本段不设可能会引发cors错误。
  12. server-name=192.168.1.13
  13. # TURN REST API的长期凭证机制范围,同样设为ip,同server-name.
  14. realm=192.168.1.13
  15. #移动的ICE(MICE)的规范支持。
  16. mobility
  17. #快捷的添加用户是使用user=XXX:XXXX的方式,可以添加多个。/var/db/turndb也工作,可以使用turnadmin来管理其中用户,可以添加多个。
  18. user=test:test

检测是否搭建好

可以使用一段简单的检查代码,检查代码如下,直接在chrome浏览器的console执行即可:

  1. function checkTURNServer(turnConfig, timeout){
  2. return new Promise(function(resolve, reject){
  3. setTimeout(function(){
  4. if(promiseResolved) return;
  5. resolve(false);
  6. promiseResolved = true;
  7. }, timeout || 5000);
  8. var promiseResolved = false
  9. , myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection //compatibility for firefox and chrome
  10. , pc = new myPeerConnection({iceServers:[turnConfig]})
  11. , noop = function(){};
  12. pc.createDataChannel(""); //create a bogus data channel
  13. pc.createOffer(function(sdp){
  14. if(sdp.sdp.indexOf('typ relay') > -1){ // sometimes sdp contains the ice candidates...
  15. promiseResolved = true;
  16. resolve(true);
  17. }
  18. pc.setLocalDescription(sdp, noop, noop);
  19. }, noop); // create offer and set local description
  20. pc.onicecandidate = function(ice){ //listen for candidate events
  21. if(promiseResolved || !ice || !ice.candidate || !ice.candidate.candidate || !(ice.candidate.candidate.indexOf('typ relay')>-1)) return;
  22. promiseResolved = true;
  23. resolve(true);
  24. };
  25. });
  26. }
  27. checkTURNServer({
  28. url: 'turn:192.168.1.13',
  29. username: 'test',
  30. credential: 'test'
  31. }).then(function(bool){
  32. console.log('is TURN server active? ', bool? 'yes':'no');
  33. }).catch(console.error.bind(console));

checkTURNServer的地址换为真实地址,用户名密码修改为真实的即可

使用上面的检查代码,检查,返回is TURN server active? yes说明正确,返回no说明有错误。

我的看云地址

https://www.kancloud.cn/idzqj/customer/755817