背景

最近在做流媒体相关的一些东西, 比较了一些开源的流媒体服务, 目前 srsZlmediaKit 项目是评价比较高的, 今天主要在 Ubuntu18.04 上编译 ZlmediaKit, 并支持 webrtc 协议.

准备

源码准备

下载 zlmediakit 源码及其依赖组件源码.


git clone --depth 1 https://github.com/ZLMediaKit/ZLMediaKit.git # 下载依赖组件源码
git submodule update --init

安装或编译依赖

查询是否已经安装 openssl 1.1.1 及以上版本, 一般 ubuntu18.04 应该已经有了.

# 查看 openssl 的版本
openssl version -a

下载 libsrtp 源码, 用于编译 webrtc 时所依赖.

wget 'https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0'
tar -xvzf libsrtp-2.3.0.tar.gz
cd libsrtp-2.3.0
./configure --enable-openssl
make -j8
sudo make install

使用 apt-get 安装其它相关依赖.

sudo apt-get install libssl-dev
sudo apt-get install libsdl-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavutil-dev
sudo apt-get install ffmpeg

编译


cd ./ZLMediaKit
mkdir build
cd build
cmake .. -DENABLE_WEBRTC=true
cmake --build . --target MediaServer

编译路径在项目 release 目录.

[master][~/Downloads/zlmediakit-checkout/ZLMediaKit/release/linux/Debug]$ pwd

# output
/Users/guoxiangxun/Downloads/zlmediakit-checkout/ZLMediaKit/release/linux/Debug

运行

进入到编译结果目录, 直接使用 sh./ 运行. 如果需要后台运行, 可以加上 -d 参数.

./MediaServer -d &

但按以上命令执行, 还会时不时在终端上打印日志, 我最终优化了下, 写了两个脚本用于启动和停止.

启动脚本 start_mediakit.sh


#!/usr/bin/env bash # 把输出丢弃
./MediaServer -d > /dev/null 2>&1 &

停止脚本 kill_mediakit.sh


#!/usr/bin/env bash # kill 掉所有进程 (可能有 fork 进程)
ps -eaf | grep MediaServer | tr -s " " | cut -d " " -f2 | xargs kill

运行成功后, 使用 chrome 浏览器访问: http://192.168.1.113:8080/webrtc/ 进行测试.

FAQ

  • 启动 MediaServer 时提示端口创建失败, 没有权限.

    需要使用 root 用户或者 sudo 运行.

  • 如果通过 nginx 反向代理访问 mediakit, 开启 hook 无效.

    有可能需要在 config.ini 配置forwarded_ip_header 参数为服务器 ip.

    #可以把http代理前真实客户端ip放在http头中:https://github.com/ZLMediaKit/ZLMediaKit/issues/1388
    #切勿暴露此key,否则可能导致伪造客户端ip
    forwarded_ip_header=xxx.xxx.xxx.xxx

最新文章

  1. ORACLE告警日志文件
  2. C语言退出多层嵌套循环技巧
  3. ASP.NET 操作Cookie详解 增加,修改,删除
  4. Jetty 嵌入式开发(实例)
  5. 佳佳的魔法药水 (vijos 1285)
  6. 用状态矩阵解决有序操作的case爆炸问题(转载)
  7. Git教程(10)git比较复杂的功能
  8. [leetcode-575-Distribute Candies]
  9. WebAssembly:随风潜入夜
  10. 仿滴滴抢单倒计时的Demo
  11. Bootstrap col-md
  12. 利用redis实现分布式锁
  13. Web框架之Bootstrap
  14. 去除swagger ui的红色 error 错误提示
  15. Codeforces Round #131 Div1 B
  16. css按钮口诀 - CSS BUG顺口溜
  17. laravel 5.4在控制器构造函数中获取auth中间件失败
  18. 【剑指offer】替换空格
  19. PM2使用及介绍
  20. BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】

热门文章

  1. devexpress中searchLookUpEdit赋值不显示
  2. React综合使用联系
  3. day08 final关键字&面向对象——多态&抽象类、方法&向上、向下转型
  4. 架构解析:Dubbo3 应用级服务发现如何应对双11百万集群实例
  5. 将 Vue.js 项目部署至静态网站托管,并开启 Gzip 压缩
  6. 【Day03】Spring cloud:源码讲解与容器化初探
  7. 1分钟理清楚C++类模板和模板类区别
  8. 【FAQ】申请Health Kit权限的常见问题及解答
  9. 1、debug调试
  10. 对于goland相对较新一些版本新建项目时没用go mod模式选项的坑