ZLmediakit的https(rtmps/rtsps/webrtc/wss)功能使用记录
1官方教程
https://github.com/ZLMediaKit/ZLMediaKit/wiki/%E6%80%8E%E4%B9%88%E5%BC%80%E5%90%AFhttps%E7%9B%B8%E5%85%B3%E5%8A%9F%E8%83%BD
https://gitee.com/xia-chu/ZLMediaKit/wikis/%E6%80%8E%E4%B9%88%E5%BC%80%E5%90%AFhttps%E7%9B%B8%E5%85%B3%E5%8A%9F%E8%83%BD
2 实际测试和使用记录
2.1 下载和编译ssl
zlmediakit的https(另外还包括rtmps/rtsps/webrtc/wss)功能依赖openssl库,在编译zlmediakit时,应该先在系统默认环境安装openssl库:
sudo apt-get install libssl-dev
如果您的系统默认openssl版本太老,可以选择自行编译安装openssl到自定义路径;此时,在编译zlmediakit时可以通过以下命令指定openssl自定义安装路径:
cd ZLMediaKit
mkdir build
cd build
cmake .. -DOPENSSL_ROOT_DIR=/path/to/your/new/openssl/install/root/dir
make -j$(nproc)
如果你是安装到别的位置了,也可以通过改cmakelists来设置ssl库的路径,请在代码的主cmakelists.txt 的openssl配置部分,设置正确的头文件和库目录(include_directories头文件的路径 .so的路径)
2.2编译好的mediaServer是否携带ssl库
cmakelists.txt中的 option(ENABLE_OPENSSL "Enable OpenSSL" ON)要记得打开;
由于我是直接使用执行程序的,所以 ldd -r MediaServer 就就可以查看是否把ssl编译进MediaServer了;
2.3 将默认的default.pem文件放到执行目录(或者上一级目录)
如果你还没购买域名,可以使用自签名证书或zlmediakit自带默认证书default.pem
测试。default.pem这个文件源码中有提供;
pem证书是存储公钥和私钥的数字证书,用于验证通过SSL或TLS加密连接传输的数据的完整性。 PEM格式是一种文本文件格式,可以直接查看证书的详细信息,包括颁发者、有效期、公钥等信息。
2.4 开始测试https
2.4.1 在zlm的配置文件config.ini中设置https的sslport,用于接收https的连接请求,创建httpsSession,这里注意config.ini中有多个sslport分别对应不同的流媒体协议,最好不要使用相同的sslport;
- 修改 [http] #https服务器监听端口 sslport=7443
- 重启MediaServer·,看到日志中开始监听7443端口,并有打印(MediaServer安装在172.*.*.*上)
- 控制台查看端口状态
- 找另一个服务器(我本地ip:10.*.*.*),通过webrtc客户端访问 https://172.*.*.*:7443/webrtc/index.html 发现页面无响应
- telnet 链接一下
- 抓包看一下为什么无法连接 ,目标不可达,检查防火墙策略
- 在172.*.*.*上看看是不是防火墙不允许传输协议使用这个端口:firewall-cmd --zone=public --list-ports;如果防火墙策略问题,则开通端口,重启防火墙
firewall-cmd --zone=public --add-port=7443/tcp --permanent ; systemctl restart firewalld 再次检查,应该端口就可以用了
- 这次我们在试试https访问;看到页面是这个样子就可以访问了
- 结果有画面啦,注意搜索栏也要用7443端口,webrtc的url也要用7443端口
2.4.2 测试rtsps,使用与上边一样的逻辑,修改172.*.*.* 配置文件rtsp:sslport =8443(与http的sslport是两个东西),注意防火墙,然后在10.*.*.* 测试拉流 rtsps://172.*.*.*:8443/live/c82就能看到画面了,出来的会有点迟;
这个rtsps的拉取可以用vlc ,ffplay都能测试