JiWang ExtraHW
杨:
三天时间, 每天睡5h, 从6.16晚上开始从零开始学习webrtc+JavaScript+flask的各种操作和源码, 到6.18晚上好像完成了大部分
6.19出现莫名其妙的bug, 因为着急准备算法期末考试, 实在是整不明白bug在哪里.
整了6.19一整天, 没整出来, 6.19晚上决定摆烂
6.22: 渣哥居然把ddl延长到这么远, 赞美渣哥, 上午重新研究bug, 发现是websocket发送事件有顺序问题, 成功解决
6.22 晚上: 真的把webrtc实现了, 还好这连着三天时间没白费, 如果提前一个月做, 做的效率有这三天的50%~60%, 大概能做的很好罢.
这几天的vscode的工作时间达到了惊人的44h, 除去4h是vscode干别的
平均到4天(6.16晚~6.19晚 + 6.22全天)
里, 平均每天工作10H
感觉死神在朝我招手
将ssl的证书文件整合到本目录下不干了, 就绝对地址罢
先安装mariadb
- 数据库的用户要求是
root
(后期可能会改) - 数据库的密码要求是
A6080o--a__TtVFR
mariadb初始化: 执行python ./initdatabase.py
即可
initdatabase.py
默认使用./user.sql
, 如果要另外指定sql文件需要使用命令行参数
python initdatabase.py <文件名>
运行init.py的时候如果遇到如下错误
ModuleNotFoundError: No module named 'MySQLdb' flask
需要执行如下指令
pip install mysqlclient
默认配置文件为./webrtc-Tony.conf
, 直接执行python init.py
的话就会使用这个配置文件
如果想要使用其他的配置文件, 可以使用命令行参数
python init.py <文件名>
配置文件中现在支持的内容有, 配置文件中不出现的内容使用默认值, 默认值及配置文件示例如下
[root_dir]
dir = /home/webrtc/video # 录像保存位置, 暂时还用不到
[frame]
width=1920
high = 1080 # 高度
rate = 15 ;每秒帧率
[断联时间]
disconnect=15 #断联15s后提示
[ssl]
crt = /etc/pki/tls/certs/cert.crt # crt文件的位置
key = /etc/pki/tls/private/cert.key # key文件的位置
使用socketIO
C接受S的信息:(C端写法)
在客户端的js文件里添加如下内容
socket = io() //声明变量
//data和callback是两个变量名
//创建的这个function会在客户端收到Server发的事件的时候执行
socket.on('事件名', function(data, callback){
...
//data的格式是{name:value}的格式
//可以通过data['name']或者data.name的格式访问传送的内容
//callback可以不写, 是回调函数, 大概率用不上
//客户端收到信息后调用callback(参数), 服务端如果定义了对应的函数的话, 服务端会有对应的处理
//callback的例子: 客户端执行callback("event received!");
//如果服务端的对该callback的定义是print(arg), 那服务端就会输出上面的字符串
});
S接受C的信息:(C端写法)
在客户端的js文件里添加如下内容
socket = io() //同上, 一个变量只需要一次这个
//格式为socket.emit('事件名', data, callback);
//例子:
socket.emit('client_event', {num1 : 114514, str1: "1919810"}, function(data){
console.log("server received data", data);
}
//server会收到名为'client_event'的事件
//server会收到{num1 : 114514, str1: "1919810"}数据包,
//server如果执行了callback函数, 则客户端会受到反馈, 在控制台上输出内容
如果没有python
和pip
命令, 可以试一试有没有python3
, pip3
pip install Flask
pip install configparser
pip install Flask-SocketIO
pip install Flask-SQLAlchemy
pip install mysqlclient # 运行init.py的时候如果提示没有MySQLdb, 需要运行这个
pip install pyOpenSSL
python init.py
安装完python的库就可以直接运行init.py
了
需要先自己生成https的签名, 用http协议webrtc好像不好使
ssl生成的两个文件位置和文件名需要固定~~(因为路径写死了)~~, 否则需要在init.py文件中改ssl_certificate
和ssl_certificate_key
的值
生成的.crt文件必须是/etc/pki/tls/certs/cert.crt
生成的.key文件必须是/etc/pki/tls/private/cert.key
写的html文件需要放在templates文件夹下, 可以有子文件夹, 支持由服务端在打开一个html的时候提供一些信息, 如下
学号: <input type="number" name="ID" value="{{user_id}}"> <br>
{{变量名}}
这种格式的变量会在flask显示html的时候填充提供的信息, 服务端使用的python函数为``render_template("index.html", user_id=user_id)
上面一行在显示的时候会将value的 {{user_id}}
替换为python传入的user_id
变量的值, 可以是空, 具体样式为