在 EasyRTC-SFU 版本的开发过程中,很多配置需要存储在配置文件中。开发人员经常使用的配置文件有 ini、json、xml、yaml 等格式,在综合分析各种文件格式的优劣后,我们最终确认使用 toml 格式作为配置文件格式。
ini 文件格式是最传统的配置文件格式,其书写格式如下:
[http]
; 是否开启登陆输入错误,则锁定用户 n 分钟的功能,true/false
http_open_lock_error_user=true
; 登录错误 7 次
http_error_numbers=7
; Sqlite3数据库文件路径
dir_data=data/db
.ini 文件格式提供了一种简单的配置文件方案,但是在使用过程中会出现部分问题。比如对于布尔类型的值,既可以是true/false,又可以使0/1,会使人产生混乱的情况。并且对于字符串变量也未添加“”明确表示其为字符串变量。对于多层嵌套和数组的配置支持也不不是很完善。
.json 文件格式在数据存储和传输的时候非常方便,在需要网络传输以及序列化反序列化操作时常用,其基本格式如下:
{"a": "a","b": "b","c":{"x": "","y": ""},"e":[{ "x":"e[0].x", "y":"e[0].y" },{ "x":"e[1].x", "y":"e[1].y" }]}
json 格式虽然支持很多种操作,但是无法添加注释,并且如果程序员误操作,经常会让文件中的配置全部缩写在一起,导致查看困难的问题。
.xml 文件是一种可扩展标记语言,其基本写法如下:
<?xml version="" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
xml 被设计用来传输和存储数据,但是由上文可以看出编写 xml 文件比其他配置文件都要多写很多字符,不符合便捷的需求。
.yaml 文件是目前最常用最流行的配置文件格式。它支持对象、数组等很多复杂数据,大小写敏感,缩进不允许使用 tab,必须使用空格。其格式如下
languages:- Ruby- Perl- Python
websites:YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
yaml 虽然很适合,但是它的语法过于复杂,并且强制使用缩进表示层级关系,对于部分无编辑器的机器非常不友好。
因此最终确认采用 .toml 文件作为配置文件。其基本格式如下:
[http]
# HTTP 服务端口,非安全的方式,正式使用请填写 false
httpEnable = true
httpAddr = ""
# HTTPS 服务端口,安全考虑仅支持 HTTPS
httpsAddr = ""
# HTTPS 公有证书
certFile = "./certs/"
# HTTPS 私有秘钥
privateKeyFile = "./certs/"
# 是否开启 API 验证
apiAuth = true# 接口调用token或sid 有效时间 单位(秒), 86400 为 24 小时,24*60*60
tokenTimeout = 86400
该种格式的配置文件比 ini 文件更强大,比 .yaml 更简单,不采用缩进、括号等方式,可读性和可编辑性非常好,因此最终采用此种格式作为项目的配置文件。
toml 文件的官方网址为。感兴趣的人可以去官网继续学习更多的用法。
最后再来讲一下EasyRTC-SFU版本的特点。SFU架构特点是不对音视频进行混流,收到某个终端共享的音视频流后,就直接将该音视频流转发给房间内的其他终端。EasyRTC-SFU版使用该方案能够对CPU资源实现低消耗,且有很大的灵活性,能够更好地适应不同的网络状况和终端类型。
如若想了解更多内容,欢迎访问TSINGSEE青犀视频,也可以随时咨询我们。