• ZLMediaKit启用webrtc编译


    一、centos7 环境

    编译机器: centos 7.9.2009

    gcc version 5.4.0 (GCC)

    cmake version 3.20.5

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

    gcc安装

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

    yum remove gcc

     解压 .tar.bz2 依赖库

    yum -y install bzip2

    编译 gcc 5.4.0依赖库

    yum install gcc-c++
    1. # 如果下载慢 可以浏览器输入地址下载
    2. curl https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.bz2 -O
    3. # j对应bz2编码 J对应gz编码
    4. tar xvfj gcc-5.4.0.tar.bz2
    5. yum install gmp-devel mpfr-devel libmpc-devel
    6. mkdir gcc-5.4.0-build
    7. cd gcc-5.4.0-build
    8. ../gcc-5.4.0/configure --enable-languages=c,c++ --disable-multilib
    9. make -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 解决方法

    1. su root
    2. cd /usr/local/lib64
    3. # 下载最新版本的libstdc.so_.6.0.26
    4. sudo wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
    5. unzip libstdc.so_.6.0.26.zip
    6. # 将下载的最新版本拷贝到 /usr/lib64
    7. cp libstdc++.so.6.0.26 /usr/lib64
    8. cd /usr/lib64
    9. # 查看 /usr/lib64下libstdc++.so.6链接的版本
    10. ls -l | grep libstdc++
    11. libstdc++.so.6 ->libstdc++.so.6.0.19
    12. # 删除/usr/lib64原来的软连接libstdc++.so.6,删除之前先备份一份
    13. sudo rm libstdc++.so.6
    14. # 链接新的版本
    15. sudo ln -s libstdc++.so.6.0.26 libstdc++.so.6
    16. # 查看新版本,成功
    17. strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
    18. ...
    19. GLIBCXX_3.4.18
    20. GLIBCXX_3.4.19
    21. GLIBCXX_3.4.20
    22. GLIBCXX_3.4.21
    23. GLIBCXX_3.4.22
    24. GLIBCXX_3.4.23
    25. GLIBCXX_3.4.24
    26. GLIBCXX_3.4.25
    27. GLIBCXX_3.4.26
    28. GLIBCXX_DEBUG_MESSAGE_LENGTH

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

    依赖准备

    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 夏楚/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都行。

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

    测试推拉流

            ffmpeg推流 ,vlc或ffplay播放流。

    ffmpeg推流

    1. ffmpeg -re -i "./sample.flv" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test 如果ffmpeg不支持h264编码 那么需要安装此编码
    2. 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默认转换流媒体源。

    1. ​rtsp://192.168.41.252/live/test
    2. rtmp://192.168.41.252/live/test
    3. http://192.168.41.252/live/test.live.flv
    4. ws://192.168.41.252/live/test.live.flv
    5. http://192.168.41.252/live/test/hls.m3u8
    6. http://192.168.41.252/live/test.live.ts
    7. http://192.168.41.252/live/test.live.mp4
    8. 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

    首先使用/index/api/startRecord 接口启用 mp4录制 可以max_second参数设置mp4录制文件的长度。接口wiki MediaServer支持的HTTP API · ZLMediaKit/ZLMediaKit Wiki

    拼接播放地址。找到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

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

    重新编译 ffmpeg

    1. # 下载ffmpeg
    2. wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 --no-check-certificate
    3. tar xjf ffmpeg-snapshot.tar.bz2
    4. cd ffmpeg/
    5. ./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/lib
    6. make && make install
    7. # 将下面两行添加到 /etc/ld.so.conf 的最后
    8. echo /usr/local/ffmpeg/lib/ >> /etc/ld.so.conf
    9. /usr/local/lib/ >> /etc/ld.so.conf
    sudo ldconfig 

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

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

    问题解决

    • 提示 gmake[3]: *** No rule to make target /usr/lib64/libssl.so', needed by ../release/linux/Debug/MediaServer'. Stop.

      1. cd /usr/local/openssl/lib
      2. cp -r ./* /usr/lib64/

      Q And A(播放问题) ?

    • obs 推流 rtc 播放一卡一卡?

      web的rtc h264 不支持B帧,需要去掉B帧

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

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

    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实现。

    1. rtsp://192.168.41.252/live/test
    2. rtmp://192.168.41.252/live/test
    3. http://192.168.41.252/live/test.live.flv
    4. ws://192.168.41.252/live/test.live.flv
    5. http://192.168.41.252/live/test/hls.m3u8
    6. http://192.168.41.252/live/test.live.ts
    7. http://192.168.41.252/live/test.live.mp4
    8. http://192.168.41.252:8091/index/api/webrtc?app=live&stream=test&type=play
    9. http://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转推直播流到其他服务器接口 

    推流

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

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

    调用ZLMediaKit转推接口转推流到指定地址 /index/api/addStreamPusherProxy

    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规则来播放即可。

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

  • 相关阅读:
    Python Parser 因子计算性能简单测试
    redis bitmap数据结构之java对等操作
    R语言data.table包进行数据分组聚合统计变换(Aggregating transforms)、计算dataframe数据的分组标准差(sd)
    LED显示屏安全亮度参数设置方法和防护
    面经记录—浩x
    arcgis 栅格数据处理2——栅格转地级市(栅格转矢量图)
    ES6中const注意点
    【深入理解Typescript】—— 第一章:为什么要使用Typescript
    排序-快排算法对数组进行排序
    【数据结构与算法】用队列实现栈&&用栈实现队列&&设计循环队列
  • 原文地址:https://blog.csdn.net/m0_60259116/article/details/126876136