# WebRTC **Repository Path**: karven_wang/web-rtc ## Basic Information - **Project Name**: WebRTC - **Description**: 在开源流媒体服务器 SRS 的基础上,修改代码完成了流媒体服务器的定制化开发。之后在网页端,采用浏览器提供的 webrtc 的接口。实现了支持直播与录像的网页的编写,支持直播,录像,监考,线上聊天等多种应用场景。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-08-29 - **Last Updated**: 2023-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # webrtc项目 ### 项目背景 持续 2 年多的新冠疫情给我们的生活带来了很大的改变,非接触式交流行为成为日常生活的一部分,对各位同学而言,从网课到在线面试,都属于非接触式交流。在线考试是非接触式交流行为中比较重要的一个应用,在疫情期间可以做到遵守防疫要求+保持正常学习两不误;非疫情期间远程在线考试也可以方便公司灵活安排考试时间,节约大家往返面试公司的时间和费用。为了尽量保证在线考试时的公平公正,目前比较主流的做法是采用双机位,在使用电脑进行考试的同时,再额外使用两台设备做主副机位,分别拍到人和考试屏幕。这种方式也有明显的缺点:1、需要额外的 2 台设备;2、设备在考试过程中出现问题(手机没电、断线)等情况时,又因为需要即时沟通而打断考生的思路;3、拍摄的角度会不正会导致图像不够清晰。 基于上述问题,提出在线考试监控的另一种思路,用考生考试用的电脑直接开启两路视频,一路是直接在考生电脑上开启录屏,另一路是开启电脑的摄像头(90%+的机器有内置摄像头,少部分可用外置摄像头),将考生的人像信息进行实时录制。同时将两路视频流实时传送到远端服务器,方便随时查看及事后追查。 ### 项目技术介绍 **1.** 使用插件即与功能介绍 本系统功能的完成主要依赖与两款开源软件——SRS与go-oryx **SRS开源流媒体服务器**,我们使用其进行视频流的收集与转发工作。即用户向其推流,之后SRS开源流媒体服务器会将所有的视频流信息反馈给各个监控端。选择流媒体服务器的主要原因是为了节省学生端负载,同时提高处理视频数据的能力,争取做到多开监控端。 **go-oryx 代理软件**: http代理的开源软件,是SRS服务器推荐的插件,其主要解决了SRS服务针对HTTPS实现的功能不完全的缺陷开发的,其实现了HTTP向HTTPS的网络代理。 **2.** 监控端,学生端,服务端的数据流,控制信令的关系 **学生端登录**,注册/监控端登录,注册:此时数据相关的文本数据由监控端/学生端直接发送给服务端处理,flask处理完后。会将控制信令传输给注册/监控端。 **学生端点击开始录制**:此时,学生端发送两份控制信号,一份发给服务端的1985端口(SRS服务端口),用来获取与服务器建立SDP链接所需的控制信息。另一份发给Flask服务端,用来更新自己的学生状态。 **学生端录制过程**:此时学生端的数据流会不断的通过SDP协议传输给服务端的,同时学生端会保证5s一次向Flask服务端发送保活的控制信令。 **学生端结束录制**:此时,学生端会主动断开自己维持的SDP连接。同时发送结束信息发给F服务端5001Flask端口,用来更新自己的学生状态。 **学生端被结束录制**:在5s一次的保活信号发出后,当学生端在返回信息中读取到了Flask服务端记录的强行终止信号,学生端自动进行结束录制操作。 **监控端查看所有学生状态**:监控端向服务端的5001端口(Flask端口)发送查看信息请求,服务端发挥数据库中所有学生状态。 **监控端查看某个学生的连接状态** :监控端向服务端1985端口(SRS端口)发送查看某用户请求,获取其SRS连接的状态。 **监控端查看某学生的录屏** :监控端向服务端1985端口(SRS端口)发送连接请求,获取到与服务器建立SDP连接所需要的信息。之后数据流信息通过SDP协议传输到监控端。 **监控端终止学生录屏** :监控端向服务端1985端口(SRS端口)发送DELETE请求,将学生端连接直接终止,同时向服务端5001端口(Flask端口)发送请求,更新学生状态。 **3. 视频编码即解码标准** 本系统的实现过程是完全采用了WebRTC的相关标准: 因此系统在推流时采用的RTC流,在拉流时采用的也是RTC流的拉流形式。 所录制视频的视频编码格式为H.264 音频编码格式为ACC编码 **4.** **帧率,码率,采样率的设置** 采用的是配置文件配置的方式进行(但是系统进行了一定的优化,即系统努力达到上述设置,但是,可能会因带宽受限/文件IO受限等问题降低上述设置,即系统努力接近上述设置,但不保证一定可以坚持上述设置) ### 安装文档 1. 安装git 首先使用yum安装git,同时安装Python3 ```sh yum install -y git yum install python3 ``` 2. 安装SRS源码 进入 root目录,受限于自启动脚本限制,因此需要下载到root目录 ```sh cd /root git clone https://gitee.com/Zhiyuan_Chen/srs ``` 完成下载到root目录之后,代码文件比较大(230MB左右),使用install.sh很容易在这个步骤崩溃掉 3. 安装SRS服务器 进入/root/srs/trunk目录中,使用configure与make命令编译运行SRS服务器 ```sh cd /root/srs/trunk ./configure make ``` 4. 下载go语言环境(用于编译运行代理工具go-oryx) ```sh yum install -y go ``` 5. 下载go-oryx源码 ```sh cd /root git clone https://github.com/ossrs/go-oryx.git ``` 6. 编译go-oryx的源码 ```sh cd /root/go-oryx/httpx-static cd go-build -mod=vendor . ``` 至此整个go-oryx代码编译通过。 7. 配置webrtc-.conf文件中的内容 主要是修改其中ip的值为对应的值。 8. webrtc的flask文件到/root目录,为了保证自启动文件能够正常运行 ```sh cp `path`/1953116/990101/source /root cd /root mv source webrtc ``` 9. 复制配置文件 进入config目录复制三个文件到对应的位置 ```sh cp srs.conf /root/srs/trunk/conf cp webrtc-.conf /etc/ cp httpx-static.service /etc/systemd/system cp server.crt /root/httpx-static cp server.key /root/httpx-static ``` 至此,系统安装已经完成,运行source目录下的start.sh即可完成系统的后台启动。 注意:在start.sh中有一个指令有 systemctl start httpx-static。 该命令在自启动服务中会失败,配置开机自启动一定要注释掉上面一行,之后使用systemctl enable httpx-static。 ### 实现效果与使用手册 Webrtc使用手册 学生端: **登录:** 输入正确的年级学号密码,点击登录即可 **打开/关闭录屏/摄像头:** 点击对应按钮即可!最后一定要点退出登录! 监控端: **登录:** 输入正确的年级学号密码,点击登录即可,年级0000,账号9999999 **查看学生状态:** 登陆后即可看到学生状态,点击监控按钮即可监控。 ***\*监控学生:\**** 点击停止录像,即可远程停止 服务端: 配置文件的位置在/etc/webrtc-.conf,在程序中写死了,请勿修改。 最终的视频文件在配置文件的路径,即/home/webrtc/video