在Ubuntu上编译和运行ZLMediaKit

摘要

本文描述了如何在Ubuntu上构建ZLMediaKIt项目源码,以及如何体验其WebRTC推流和播放功能。

实验环境

操作系统版本:Ubuntu 22.04.3 LTS
gcc版本:11.4.0
g++版本:11.4.0

依赖库安装

#让ZLMediaKit媒体服务器具备WebRTC流转发功能的必备依赖包
sudo apt install cmake pkg-config gcc g++ libssl-dev libsrtp2-dev libusrsctp-dev
#其它可选依赖包,请根据实际需要决定是否安装。
sudo apt install libsdl-dev libavcodec-dev libavutil-dev ffmpeg

#检查已安装的必备依赖库的版本
#示例版本为3.0.2
pkg-config --modversion libcrypto libssl
#示例版本为2.4.2
pkg-config --modversion libsrtp2
#示例版本为0.9.5.0
pkg-config --modversion usrsctp

获取ZLMediaKit源码

ZLMediaKit官方建议使用git克隆ZLMediaKit的代码,示例如下:

#国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init

生成ZLMediaKit构建脚本

cd ZLMediaKit
mkdir -p build
cd build

#采用默认条件编译参数,生成Makefile文件
cmake -S .. -B .

在上述构建脚本生成过程中,cmake会输出一系列提示信息,请确保可以看到如下信息:

注意红色箭头指向的信息,如果没有看到,则WebRTC功能必然不能正常使用。

构建ZLMediaKit

#用cmake命令并行编译
cmake --build . -j 16
#或者用make命令并行编译
make -j16
#耐心等待编译进度走到[100%]。

修改MediaServer配置

在新版本ZLMediaKit中,官方要求修改secret密钥配置。

用文本编辑器打开MediaServer的配置文件ZLMediaKit/release/linux/Debug/config.ini,搜索secret配置项,将默认密钥修改一下。

用文本编辑器打开ZLMediaKit/release/linux/Debug/www/webrtc/index.html,搜索secret关键词,确保url的密钥参数和config.ini中的一致,否则后续实验会遇到直播流列表始终为空的问题。

运行MediaServer

#cd到ZLMediaKit的构建输出目录
cd release/linux/Debug

#通过-h可以了解启动参数
./MediaServer -h

#在调试时,不带参数启动,方便观察控制台输出,退出请按Ctrl+C。
./MediaServer

#正式部署时,官方建议以守护进程模式启动
./MediaServer -d &

#杀死MediaServer守护进程的方法
killall -2 MediaServer

WebRTC推流实验

在MediaServer运行的主机上,打开一个浏览器实例(或标签),在地址栏输入:

#示例为了避免端口冲突,将config.ini中的[http]节区的port修改为8080
http://localhost:8080/webrtc/

#如果未修改过默认的http服务端口,则应输入如下地址:
http://localhost/webrtc/

在浏览器的WebRTC测试网页中,可以设置摄像头分辨率(resolution)。

做为WebRTC推流端,method选项选push,勾选datachannel,然后点击开始按钮。

不出意外,你可以看到如下画面:

 看到上图中的画面,说明已经开始推流,可开始WebRTC播放实验。

WebRTC播放实验

再打开一个浏览器实例(或标签),在地址栏输入和WebRTC推流实验一样的地址。

做为WebRTC播放端,method选项选play,勾选datachannel,然后点击开始按钮。

不出意外,你可以看到如下画面:

 看到上图中的画面,说明基于ZLMediaKit媒体服务器的WebRTC推流和播放实验已经成功,恭喜你已经迈入WebRTC应用开发的门槛。

RSTP推流和播放实验

本节介绍如何通过RTSP协议将一个本地的mp4文件推流到ZLMediaKit媒体服务器,并让用户可在浏览器中通过WebRTC播放器观看。

修改服务器配置:

打开媒体服务器配置文件config.ini,将directProxy配置项的值改为0,示例如下:

[rtsp]
#此配置项必须设置为0,否则WebRTC播放会失败。
directProxy=0

用ffmpeg推流:

#参数“-re”表示模拟实际播放的速度进行推流。
#参数“-stream_loop -l”表示循环播放test.mp4。
#参数“-bf 0”表示视频编码时,BFrame数量为0,即禁止使用B帧,避免WebRTC播放时卡顿。
#参数“-b:v 1500000”表示视频编码码率为1.5Mbps,码率越高,视频画面越清晰,对网络带宽要求越高,可省略此参数,采用默认编码码率。
#参数“-b:a 96000”表示音频编码码率为96Kbps,可省略此参数,采用默认编码码率。
ffmpeg -re -stream_loop -1 -i "test.mp4" -bf 0 -vcodec h264 -acodec libopus -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test

用VLC观看直播流:

在MediaServer中观察流地址(比如:.../rtp/36731AF0)。
打开VLC播放器,在【媒体】菜单中选择【打开网络串流】,输入如下网络 URL:
rtsp://127.0.0.1/live/test
点击【播放】按钮。

用浏览器端观看直播流:

播放方法和【WebRTC播放实验】一致,在浏览器中输入如下URL:

http://127.0.0.1/webrtc

点击WebRTC播放器页面左侧的直播流列表即可开始观看。

总结

ZLMediaKit功能齐全,性能优异,跨平台能力强,属于商用级别的流媒体应用解决方案,同时也是学习流媒体应用开发和C++11编程的优秀范例,值得深入研究和领会。

猜你喜欢

转载自blog.csdn.net/bigwave2000/article/details/132268733
今日推荐