FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。
ZLMediaKit是一款国产的开源流媒体服务器,它基于C++11开发,支持多种流媒体协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持的音视频编码标准包括H265、H264、AAC、G711、OPUS等。
通过结合FFmpeg与ZLMediaKit,可以很方便地测试音视频的推拉流。接下来以华为的欧拉系统为运行环境,介绍如何编译、安装、调试ZLMediaKit,详细的操作步骤说明如下。
一、编译安装ZLMediaKit
1、登录Linux服务器(比如华为云的欧拉系统),运行下列命令安装ZLMediaKit的依赖包。
yum install git
yum install openssl
yum install libsrtp
2、执行下面命令从gitee下载ZLMediaKit的源码。
cd /usr/local/src
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
3、进入ZLMediaKit的源码目录,执行下面命令更新ZLMediaKit的依赖模块源码。
cd ZLMediaKit
git submodule update --init
4、依次运行下面命令配置ZLMediaKit。
mkdir build
cd build
cmake .. -DENABLE_WEBRTC=on
5、运行下面命令编译ZLMediaKit。
make
6、编译完成后,运行下面命令安装ZLMediaKit。
make install
命令执行完毕,ZLMediaKit的可执行程序将安装到ZLMediaKit源码路径的release/linux/Debug目录下。
二、编译安装FFmpeg
在Linux系统编译安装FFmpeg的详细步骤参见《FFmpeg开发实战:从零基础到短视频上线》一书的“1.2 Linux系统安装FFmpeg”,这里不再赘述。
三、启动ZLMediaKit
1、进入ZLMediaKit的安装目录:
cd /usr/local/src/ZLMediaKit/release/linux/Debug
2、打开配置文件config.ini,把http标签下的sslport值改为8443,如下所示。
sslport=8443
把http标签下的port值改为8080,如下所示。
port=8080
修改完毕,保存并退出config.ini。
3、执行下面命令,启动MediaServer服务。
./MediaServer -d &
若想启用安全协议SSL,则执行下面命令,启动带默认https证书的MediaServer服务。
./MediaServer -d -s ./default.pem &
4、检查服务器是否开启了下列端口:
554端口,用于rtsp协议,访问“rtsp://”开头的直播地址需要。
1935端口,用于rtmp协议,访问“rtmp://”开头的直播地址需要。
8080端口,用于http协议,访问“http://”开头的直播地址需要。
8443端口,用于https协议,访问“https://”开头的直播地址需要。
四、检查ZLMediaKit的视频推拉流
视频推流有RTSP和RTMP两种常见的流媒体协议。其中RTSP全称为“Real Time Streaming Protocol”(实时流传输协议),它由RealNetworks和网景公司共同提交。RTSP协议支持双向传输,允许服务器端和客户端之间实时通信,常用于需要播放、暂停、快进、快退等控制操作的视频点播场合。
RTMP全称为“RTMP Real Time Messaging Protocol”(实时消息传输协议),它由Adobe公司提交。RTMP协议只支持单向传输,只允许从服务器端传输信息到客户端,常用于实时性较强的视频直播,比如带货直播、视频会议、在线课堂等场合。
下面通过ffmpeg把视频源推流给ZLMediaKit,并使用VLC播放器观察视频拉流效果。
1、执行以下命令,将本地视频通过RTSP协议推流给ZLMediaKit。
ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f rtsp rtsp://127.0.0.1/live/test
若想将本地视频通过RTMP协议推流给ZLMediaKit,则需执行以下命令。
ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f flv rtmp://127.0.0.1/live/test
2、打开VLC播放器,依次选择菜单“媒体”→“打开网络串流”,在网络URL框中输入下列任一地址,观看能否正常播放视频画面。
rtsp://124.***.***.***/live/test
rtmp://124.***.***.***/live/test
http://124.***.***.***:8080/live/test/hls.m3u8
http://124.***.***.***:8080/live/test.live.ts
http://124.***.***.***:8080/live/test.live.mp4
http://124.***.***.***:8080/live/test.live.flv
注意需要把上述地址中的“124.***.***.***”替换为流媒体服务器实际的公网地址。
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流的更多相关文章
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- Django笔记二十六之数据库函数之数学公式函数
本文首发于公众号:Hunter后端 原文链接:Django笔记二十六之数据库函数之数学公式函数 这一篇来介绍一下公式函数,主要是数学公式. 其中 sin,cos 这种大多数情况下用不上的就不介绍了,主 ...
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- Linux学习之CentOS(二十六)--Linux磁盘管理:LVM逻辑卷的创建及使用
在上一篇随笔里面 Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理, ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- BizTalk开发系列(二十六) 使用Web Service
Web Service是在构建SOA平台中广泛使用的技术.在BizTalk开发过程中使用SOAP适配器接收和发送 Web Services 请求.业务流程可以发布为 Web Services 并使用外 ...
- Java基础学习笔记二十六 JDBC
什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,J ...
- 网站开发进阶(二十六)js刷新页面方法大全
js刷新页面方法大全 在项目开发过程中,需要实现刷新页面.经过学习,发现下面这条语句就可以轻松实现. location.reload(); // 刷新页面 有关刷新页面的其它方法,具体学习内容如下,有 ...
- Java开发笔记(十六)非此即彼的条件分支
前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...
- 性能测试二十六:环境部署之Mysql+Redis+Tomcat环境整合
系统中使用了缓存+数据库,通用读取数据规则1.先从缓存读数据,如果有,直接返回数据:2.如果没有,去数据库中读,然后再插入到缓存中,再返回数据 Mysql+Redis+Tomcat环境整合 1.修改P ...
随机推荐
- mysql 重新整理——索引优化explain字段介绍一 [九]
前言 在七种介绍了explain这东西,那么具体来看下它是如何来运行的吧. 正文 id 来看一条语句:EXPLAIN select * from departments,dept_emp,employ ...
- 使用EPLAN做项目的收获点
收获点如下: 1.消息检查功能. 最具有代表性的EPLAN软件的辅助检查功能.通过自带检查可以发现设计的错误和警告. 2.导线表导出功能. 使用导入模版.宏设置,导出对应线号表. 此类接线通过一个导线 ...
- 力扣138(java)- 复制带随机指针的链表(中等)
题目: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点. 构造这个链表的 深拷贝. 深拷贝应该正好由 n 个 全新 节点组成,其 ...
- 【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤
简介: 以测试集群版本为例(EMR-4.4.1)-- Flink SQL Client 集成 Hive 使用文档 作者:林志成,阿里云EMR产品团队技术支持,拥有多年开源大数据经验 1.以测试集群版本 ...
- 一文理解 K8s 容器网络虚拟化
简介:本文需要读者熟悉 Ethernet(以太网)的基本原理和 Linux 系统的基本网络命令,以及 TCP/IP 协议族并了解传统的网络模型和协议包的流转原理.文中涉及到 Linux 内核的具体实现 ...
- 还在为多集群管理烦恼吗?RedHat 和蚂蚁、阿里云给开源社区带来了OCM
简介: 为了让开发者.用户在多集群和混合环境下也能像在单个 Kubernetes 集群平台上一样,使用自己熟悉的开源项目和产品轻松开发功能,RedHat 和蚂蚁.阿里云共同发起并开源了 OCM(Ope ...
- [ML] 通过llama.cpp与羊驼聊天的网页界面- 详解 Serge 的启动使用
Serge 虽然能够让我们在笔记本上跑起来 7B模型, 但实际运行非常消耗CPU,对话生成响应非常非常慢. 1. 官方指导是使用如下命令直接运行: $ docker run -d -v weigh ...
- dotnet 启动进程传入不存在的文件夹作为工作目录行为变更
本文记录在 dotnet 下,启动进程,传入不存在的文件夹作为进程的工作目录,分别在 .NET Framework 和 .NET Core 的行为 在 dotnet 6 下,可以使用 ProcessS ...
- WPF 在 .NET Core 3.1.19 版本 触摸笔迹偏移问题
在更新到 .NET 6 发布之前的,在 2021.11.02 的 .NET Core 版本,都会存在此问题.在 WPF 应用里面,如果在高 DPI 下,进行触摸书写,此时的笔迹将会偏移.核心原因是在这 ...
- .Net项目部署到Docker
.Net项目部署到Docker 环境 linux docker .Net 7 步骤 编写Dockerfile 上传项目文件到linux 运行项目文件到docker 一.设置项目端口 在Program. ...