参考资料

ZLMediaKit github https://github.com/ZLMediaKit/ZLMediaKit

ZLMediaKit 微信公众号 可查看视频教程

ZLMediaKit qq群号: 690854210

ZLMediaKit issue、wiki https://github.com/ZLMediaKit/ZLMediaKit/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

一、centos7 环境

编译机器: centos 7.9.2009

gcc version 5.4.0 (GCC)

cmake version 3.20.5

gcc安装

gcc -v查看是否已安装旧版本gcc 如果有 删除;

yum remove gcc

解压 .tar.bz2 依赖库

yum -y install bzip2

编译 gcc 5.4.0依赖库

yum install gcc-c++
# 如果下载慢 可以浏览器输入地址下载
curl https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.bz2 -O# j对应bz2编码 J对应gz编码
tar xvfj gcc-5.4.0.tar.bz2yum install gmp-devel mpfr-devel libmpc-develmkdir gcc-5.4.0-buildcd gcc-5.4.0-build../gcc-5.4.0/configure --enable-languages=c,c++ --disable-multilibmake -j$(nproc) && make install # note: nproc is the number of threads (e.g.2or 4 or 8 )

cmake安装

步骤一、安装gcc等必备程序包(已安装则略过此步)上面已安装gcc

$ yum install -y gcc gcc-c++ make automake

步骤二、安装wget (已安装则略过此步)

$ yum install -y wget

步骤三、获取CMake源码包

$ wget https://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5.tar.gz

步骤四、解压CMake源码包

$ tar -zxvf cmake-3.20.5.tar.gz

步骤五、进入目录

$ cd cmake-3.20.5

步骤六 编译安装

$ ./bootstrap && make -j4 && sudo make install

到此 CMake 命令安装完成。

version `GLIBCXX_3.4.20‘ not found 解决方法

su root
cd /usr/local/lib64
# 下载最新版本的libstdc.so_.6.0.26
sudo wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
# 将下载的最新版本拷贝到 /usr/lib64
cp libstdc++.so.6.0.26 /usr/lib64
cd  /usr/lib64
# 查看 /usr/lib64下libstdc++.so.6链接的版本
ls -l | grep libstdc++
libstdc++.so.6 ->libstdc++.so.6.0.19
# 删除/usr/lib64原来的软连接libstdc++.so.6,删除之前先备份一份
sudo rm libstdc++.so.6
# 链接新的版本
sudo ln -s libstdc++.so.6.0.26 libstdc++.so.6
# 查看新版本,成功
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
...
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_DEBUG_MESSAGE_LENGTH

依赖准备

  • 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

注意:.

/config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl 不能和解压缩目录一致 此处为指定安装地址。 否则报错 cp: './include/openssl/aes.h' and '/opt/openssl/openssl-1.1.1o/include/openssl/aes.h' are the same file

  • 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

编译

  • 下载zlm源码

    #如果没安装git 那么安装
    yum install -y git
    #国内用户推荐从同步镜像网站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 

修改配置文件

(1)由于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

(2)config.ini 配置文件

注意,如果用不到hook,不要开启。开启后,所有的推拉流都会进行鉴权。

测试webrtc

最新的zlmediakit源码自带有效的ssl证书default.pem,对应的域名是default.zlmediakit.com,该域名解析到的ip为127.0.0.1,用户在浏览器中打开 https://default.zlmediakit.com/webrtc/即可开始测试。如果ZLMediaKit部署在其他主机,地址为 http://192.168.41.252:8091/webrtc/ 。8091为config.ini文件中http配置的port。

请先推流后,再测试播放。如果webrtc无法播放, 请参考此issue。推流可以使用ffmpeg推流rtmp rtsp都行。

测试推拉流

ffmpeg推流 ,vlc或ffplay播放流。

ffmpeg推流 

查看ZLMediaKit wiki可知 ZLMediaKit推流测试 · ZLMediaKit/ZLMediaKit Wiki · GitHub

ffmpeg -re -i "./sample.flv" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test 如果ffmpeg不支持h264编码 那么需要安装此编码ffmpeg -re -i "./sample.flv" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test

播放url规则

查看ZLMediaKit wiki 播放url规则 · ZLMediaKit/ZLMediaKit Wiki · GitHub 。一般而言,下面url在ZLMediaKit都有效,都可以使用播放器播放,因为ZLMediaKit默认转换流媒体源。

​rtsp://192.168.41.252/live/test
rtmp://192.168.41.252/live/test
http://192.168.41.252/live/test.live.flv
ws://192.168.41.252/live/test.live.flv
http://192.168.41.252/live/test/hls.m3u8
http://192.168.41.252/live/test.live.ts
http://192.168.41.252/live/test.live.mp4
http://192.168.41.252:8091/index/api/webrtc?app=live&stream=test&type=play

webrtc播放

http://192.168.41.252:8091/webrtc/ 可以播放webrtc流 播放url: http://192.168.41.252:8091/index/api/webrtc?app=live&stream=test&type=push

点播url

  1. 首先使用/index/api/startRecord 接口启用 mp4录制 可以max_second参数设置mp4录制文件的长度。接口wiki https://github.com/zlmediakit/ZLMediaKit/wiki/MediaServer%E6%94%AF%E6%8C%81%E7%9A%84HTTP-API
  2. 拼接播放地址。找到ZLMediaKit/release/linux/Debug/www/record/ 目录下的视频,然后拼接即可得到播放地址。示例如下图:

下图对应播放地址可为

rtsp://192.168.41.252/record/live/test/2022-05-24/06-15-46.mp4、rtmp://192.168.41.252/record/live/test/2022-05-24/06-15-46.mp4等多个协议的播放url。具体参考"播放url规则"的wiki

centos7安装ffmpeg

1.官网下载 ffmpeg source code,或者download页面下拉查找对应版本tar压缩包下载

2.使用finalshell将源码包ffmpeg-4.1.tar.xz上传至linux主机(本教程上传至/soft/ffmpeg目录)

3、解压压缩包

cd /soft/ffmpeg

tar xvJf ffmpeg-4.1.tar.xz

4、安装gcc和yasm编译器

cd ffmpeg-4.1

yum install gcc

yum install yasm

5、指定安装目录/soft/ffmpeg

./configure --enable-shared --prefix=/soft/ffmpeg 注意:此处prefix指定的安装目录不是下载的目录,需要是不同文件夹。

6、执行make

make

7、执行make install

make install

8、修改文件/etc/ld.so.conf

echo " /soft/ffmpeg/lib/" >> /etc/ld.so.conf

9、使修改的文件/etc/ld.so.conf生效

ldconfig

10、查看版本

./ffmpeg -version

11、配置环境变量

vim /etc/profile

export PATH=$PATH:/soft/ffmpeg/bin

12、使环境变量生效

source /etc/profile

13、查看ffmpeg版本

ffmpeg -version

安装ffmpeg h264编码

如果报错不支持h264 ,那么需要安装x264

下载并安装x264

git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --help
# 报缺少asm 时 可加入--disable-asm
./configure --enable-shared --enable-static --disable-asmmake
# x264将会安装到 :/usr/local/ 目录下
sudo make install

重新编译 ffmpeg

# 下载ffmpeg
wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 --no-check-certificatetar xjf ffmpeg-snapshot.tar.bz2cd ffmpeg/./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/x264/include --extra-ldflags=-L/usr/local/x264/libmake && make install# 将下面两行添加到 /etc/ld.so.conf  的最后
echo /usr/local/ffmpeg/lib/ >> /etc/ld.so.conf
/usr/local/lib/ >> /etc/ld.so.conf
sudo ldconfig 

ffmpeg -formats | grep h26 可以查看支持的编码

问题解决

  • 提示 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帧

  • rtsp 推流,rtc 播放不成功?

    rtsp 推流需要把zlm的配置文件中的directProxy 设置为0

二、ubuntu环境

参考ZLMediaKit 公众号视频教程

(1)下载zlm源码如上

(2)cmake .. -DENABLE_WEBRTC=on
(3)安装srtp apt-cache search | grep srtp

三、ZLMediaKit推拉流

ZLMediaKit推拉流

1.下载源码,编译。运行。如果要启动webrtc,需要编译时指定开启。编译后,config.init 和启动程序生成在ZLMediaKit/release/linux/Debug目录。编译参考上面的章节。

2.设置config.ini配置文件。如果不使用hook,不要开启,开启后所有推拉流都需要鉴权,会导致推拉流都报错权限不够。wvp只要连接了ZLMediaKit,就会修改配置文件开启hook。

3. ./MediaServer启动程序

4.ffmpeg推流 vlc、ffplay播放流。

ffmpeg -re -i "./sample.flv" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test 如果ffmpeg不支持h264编码 那么需要安装此编码,安装参考我的csdn博客。

一般而言,下面url在ZLMediaKit都有效,因为ZLMediaKit默认转换流媒体源,包括gb28181。zlm中gb28181可以使用ffmpeg推rtp流到ZLMediaKit模拟,也可以使用wvp实现。

​
rtsp://192.168.41.252/live/testrtmp://192.168.41.252/live/testhttp://192.168.41.252/live/test.live.flvws://192.168.41.252/live/test.live.flvhttp://192.168.41.252/live/test/hls.m3u8http://192.168.41.252/live/test.live.tshttp://192.168.41.252/live/test.live.mp4http://192.168.41.252:8091/index/api/webrtc?app=live&stream=test&type=playhttp://192.168.41.252:8091/webrtc/ 可以播放webrtc流

6.点播url 首先使用

ffmpeg推流或者通讯终端推流。

/index/api/startRecord 接口启用 mp4录制 可以max_second参数设置mp4录制文件的长度。

拼接播放地址。找到www目录下的播放地址,然后拼接即可。例如: rtsp://192.168.41.252/record/live/test/2022-05-24/06-15-46.mp4

ZLMediaKit转推直播流到其他服务器接口

  1. 推流

    可以在部署了ZLMediaKit的虚拟机上推流

    ffmpeg -stream_loop -1 -re -i "./sample.flv" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test

  2. 调用ZLMediaKit转推接口转推流到指定地址 /index/api/addStreamPusherProxy
  3. vlc播放转推到流媒体服务器的地址即可播放。

验证:如果推流下线,然后重新上线推流,此时转推不会重连。

WVP+ZLMediaKit转推gb28181到指定服务器

  1. GbtDevice推gb流到wvp。然后登录wvp页面,点击播放,国标设备--播放。点击播放后才会注册流信息到zlm
  2. 此时可以通过查看zlm日志 拼接播放地址

3.比如rtmp rtmp://192.168.41.252:8091/rtp/99000000801320000008_99000000801310000008?vhost=__defaultVhost__ 注意 vhost必须加,否则找不到流

4.比如http-flv http://192.168.41.252:8091/rtp/99000000801320000008_99000000801310000008.live.mp4

5.调用ZLMediaKit转推接口转推流到指定地址 /index/api/addStreamPusherProxy,其中app固定为rtp,stream_id为下图红圈。

6.vlc播放转推到流媒体服务器的地址即可播放。

验证:

(1)gb28181如果推流下线,然后重新上线推流,此时转推不会重连。

(2)gb28181推流,也会自动转为其他格式流。比如rtmp、rtsp等。ZLMediaKit中所有格式的推流,都会被转成多种格式,拉流时可以拉任何格式的流,按照ZLMediaKit wiki中的 播放url规则来播放即可。

ZLMediaKit启用webrtc编译相关推荐

  1. ZLMediaKit webRTC编译与测试

    一.背景 NB的ZLMediaKit开始支持了webrtc,今天有点时间,好奇测试之. 二.代码下载 拉最新的master代码 已经支持webrtc git pull origin master 编译 ...

  2. ZLMediaKit webRTC编译

    ZLMediaKit webrtc编译 安装编译环境 代码下载 编译器要求 编译器安装 运行ZLMediaKit 测试webrtc 参考 最近公司要提高流媒体视频的播放性能,多方查询资料后,发现ZLM ...

  3. FreeSwitch中启用WebRTC

    FreeSWITCH是一个开源的电话交换软件平台,它允许用户建立语音.视频和即时消息通信系统.FreeSWITCH可以在多个操作系统上运行,包括Linux.Windows.MacOS等,并且支持多种语 ...

  4. 从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图

    标题:从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 升级.NET 5及启用预编译视图 作者:Lamond Lu 地址:https://www.cnblogs.com/lwql ...

  5. webrtc编译中的错误解决

    webrtc编译记录 ·错误1:该错误的意思是python的安装路径要和你此时的webrtc源码的编译路径相同. 解决方法:将python的安装路径和webrtc编译源码的路径放在同一个磁盘下. 错误 ...

  6. webrtc 编译汇编文件时错误

    webrtc 编译汇编文件时错误 @ This file was created from a .asm file 解决办法: 把OS=ios target_arch=armv7 改为target_a ...

  7. WebRTC编译Android

    WebRTC编译问题修复: 编译出现下列问题: Error: Could not create the Java Virtual Machine. Error: A fatal exception h ...

  8. Windows平台WebRTC编译-VS2017

    转载网站:https://blog.jianchihu.net/webrtc-build-vs2017.html 在音视频领域,想深入研究的话,必定会接触WebRTC.WebRTC是一个庞大的工程,就 ...

  9. WebRTC编译篇之Ninja 编译系统 二

    且让我们从WebRTC的实例来继续分析Ninja. 下载编译WebRTC, 首先要下载Chromium depot_tool,  Ninja就在deopt tool 之中. WebRTC的代码可以支持 ...

最新文章

  1. 代码荣辱观-以运用风格为荣,以随意编码为耻
  2. 20年来最不靠谱的五大互联网预言
  3. python add configuration_idea 中add configuration
  4. 读书笔记之MySQL技术内幕
  5. Linux LVM卷挂载
  6. EPOCH batchsize
  7. C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦
  8. Do not mutate vuex store state outside mutation handlers.
  9. 程序员是一盏省油的灯
  10. 两万字深度介绍分布式系统原理,一篇通透
  11. thinkphp v5.0.11漏洞_thinkphp 5.0 代码执行漏洞
  12. wxpython textctrl绑键盘事件_wxPython控件学习之TextCtrl(三)响应文本控件事件
  13. 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统3
  14. VI全屏文本编辑器的命令总结
  15. 多个app用同一个签名文件_运动设备和运动APP的合理搭配
  16. Oracle VM VirtualBox 使用教程,说实话也就那样吧
  17. 微信商户支付平台微信支付怎么开通
  18. 实验七 TCP/IP协议分析
  19. 查看oracle的SID
  20. 京东实习生招聘面试小记

热门文章

  1. 各种重力场模型下载网站
  2. 关于移动Web性能的5个神话(转)
  3. STO(Security Token Offering)证券型通证、代币发行介绍
  4. js进栈出栈_JavaScript js调用堆栈(一)
  5. 软件工程专业的论文答辩_2015软件工程硕士论文答辩流程
  6. Beta阶段敏捷冲刺前准备
  7. Deep Mutual Learning
  8. python老王卖西瓜_搞不懂Python?大神教你用Python买西瓜!
  9. 彩色图像自动色阶调整和自动对比度调整
  10. win32 015使用菜单和加速键