This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
环境
编译机器:
centos 7.6
gcc version 5.4.0 (GCC)
cmake version 3.20.5
依赖准备
-
openssl 安装 (openssl版本要求1.1以上)
$ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz $ tar -xvzf openssl-1.1.1k.tar.gz $ yum install -y zlib zlib-devel perl-CPAN $ ./config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl $ make && make install $ echo "/usr/local/lib64/" >> /etc/ld.so.conf $ echo "/usr/local/openssl/lib" >> /etc/ld.so.conf $ ldconfig $ ln -s /usr/local/openssl/bin/openssl /usr/local/bin/openssl # 替换系统openssl,非必须 $ openssl version -a -
libsrtp安装
点击这里下载安装
$ tar -xvzf libsrtp-2.3.0.tar.gz $ cd libsrtp-2.3.0 $ ./configure --enable-openssl --with-openssl-dir=/usr/local/openssl $ make -j8 && make install对于一些比较新的编译环境(如GCC 10+),编译 libsrtp-2.3.0 可能会存在问题,可以考虑切换到 2.5.0 版本,即
$ wget https://github.com/cisco/libsrtp/archive/refs/tags/v2.5.0.tar.gz $ tar -xvzf libsrtp-2.5.0.tar.gz $ cd libsrtp-2.5.0
编译
-
下载zlm源码
#国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init -
编译
$ mkdir build $ cd build $ cmake .. -DENABLE_WEBRTC=true -DOPENSSL_ROOT_DIR=/usr/local/openssl -DOPENSSL_LIBRARIES=/usr/local/openssl/lib $ cmake --build . --target MediaServer # 最终输出 [ 96%] Built target test_rtcp_fci [ 96%] Building CXX object tests/CMakeFiles/test_rtp.dir/test_rtp.cpp.o [ 97%] Linking CXX executable ../../release/linux/Debug/test_rtp [ 97%] Built target test_rtp [ 97%] Building CXX object tests/CMakeFiles/test_wsServer.dir/test_wsServer.cpp.o [ 97%] Linking CXX executable ../../release/linux/Debug/test_wsServer [ 97%] Built target test_wsServer [ 97%] Building CXX object tests/CMakeFiles/test_server.dir/test_server.cpp.o [ 97%] Linking CXX executable ../../release/linux/Debug/test_server [ 97%] Built target test_server [ 98%] Built target jsoncpp [ 98%] Linking CXX executable ../../release/linux/Debug/MediaServer [100%] Built target MediaServer
修改配置文件
由于webrtc协议需要告知播放器服务器所在ip,如果该ip对播放器不可见,会导致webrtc无法联通。请修改配置文件中rtc.externIP为播放器可见ip,如果不设置该配置项,zlmediakit将获取网卡ip(一般是内网ip),那么将无法跨域nat使用webrtc。
[rtc]
#rtc播放推流、播放超时时间
timeoutSec=15
#本机对rtc客户端的可见ip,作为服务器时一般为公网ip,置空时,会自动获取网卡ip
externIP=
#rtc udp服务器监听端口号,所有rtc客户端将通过该端口传输stun/dtls/srtp/srtcp数据,
#该端口是多线程的,同时支持客户端网络切换导致的连接迁移
#需要注意的是,如果服务器在nat内,需要做端口映射时,必须确保外网映射端口跟该端口一致
port=8000
#设置remb比特率,非0时关闭twcc并开启remb。该设置在rtc推流时有效,可以控制推流画质
rembBitRate=1000000
测试
最新的zlmediakit源码自带有效的ssl证书default.pem,对应的域名是default.zlmediakit.com,该域名解析到的ip为127.0.0.1,用户在浏览器中打开 https://default.zlmediakit.com/webrtc/即可开始测试。请先推流后,再测试播放。如果webrtc无法播放,
请参考此issue
问题解决
-
提示
gmake[3]: *** No rule to make target/usr/lib64/libssl.so', needed by../release/linux/Debug/MediaServer'. Stop.cd /usr/local/openssl/lib cp -r ./* /usr/lib64/ -
ubuntu编译
可以参考网友大神自制这里
-
windows编译
可以参考网友大神自制这里
还有这里
Q And A(播放问题) ?
-
obs 推流 rtc 播放一卡一卡?
web的rtc h264 不支持B帧,需要去掉B帧, 使用FFmpeg时需要添加
-bf 0参数,或者指定h264 profile为baseline -
rtsp 推流,rtc 播放不成功?
rtsp 推流需要把zlm的配置文件中的directProxy 设置为0
-
webrtc 视频或者音频播放不出来?
web客户端的rtc 支持h264,opus/48000/2,pcma/8000,pcmu/8000等编码格式,检查一下编码格式是否正确,一般都是音频不支持,需要使用transcode 分支来转码(视频不会转码)
测试文档
使用教程
- 代码依赖与版权声明
- 快速开始
- vcpkg安装zlmediakit
- 服务器的启动与关闭
- GB28181教程
- 推流播放测试
- RESTful 接口
- RESTful 接口 postman自动生成
- Web Hook 接口
- 配置文件详解
- 播放URL规则
- 按需拉流
- 按需推流
- 播放鉴权
- 推流鉴权
- 怎样创建直播流
- webrtc编译与使用
- webrtc信令交互格式
- 怎么开启https相关功能
相关文档和资源
- zlmediakit独家特性
- zlmediakit的hls高性能之旅
- 高并发实现原理
- RTSP推流流程
- 流媒体相关技术介绍
- 直播延时的本质
- rtmp对H265/opus的支持
- ssl自签名证书测试
- 视频会议相关资源