FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,图像资源包5000点
简介: 《FFmpeg开发实战》书中介绍轻量级流媒体服务器MediaMTX,但其功能有限,不适合生产环境。推荐使用国产开源的ZLMediaKit,它支持多种流媒体协议和音视频编码标准。以下是华为欧拉系统下编译安装ZLMediaKit和FFmpeg的步骤,包括更新依赖、下载源码、配置、编译、安装以及启动MediaServer服务。此外,还提供了通过FFmpeg进行RTSP和RTMP推流,并使用VLC播放器拉流的示例。

​《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.xxx.xxx.xxx”替换为流媒体服务器实际的公网地址。

目录
相关文章
|
1月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
109 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
8天前
|
编解码 监控 网络协议
如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频
本文详细介绍了如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频。内容涵盖环境搭建、编码配置、服务器端与客户端实现等方面,适合视频监控系统和直播平台等应用场景。通过具体命令和示例代码,帮助读者快速上手并实现目标。
27 6
|
26天前
|
Java 数据安全/隐私保护
Java ffmpeg 实现视频加文字/图片水印功能
【10月更文挑战第22天】在 Java 中使用 FFmpeg 实现视频加文字或图片水印功能,需先安装 FFmpeg 并添加依赖(如 JavaCV)。通过构建 FFmpeg 命令行参数,使用 `drawtext` 滤镜添加文字水印,或使用 `overlay` 滤镜添加图片水印。示例代码展示了如何使用 JavaCV 实现文字水印。
|
27天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
75 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
计算机视觉 Python
FFMPEG学习笔记(一): 提取视频的纯音频及无声视频
本文介绍了如何使用FFmpeg工具从视频中提取纯音频和无声视频。提供了具体的命令行操作,例如使用`ffmpeg -i input.mp4 -vn -c:a libmp3lame output.mp3`来提取音频,以及`ffmpeg -i input.mp4 -c:v copy -an output.mp4`来提取无声视频。此外,还包含了一个Python脚本,用于批量处理视频文件,自动提取音频和生成无声视频。
40 1
|
1月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
156 0
|
2月前
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
3月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
43 6
|
23天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
93 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
30天前
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
48 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频

热门文章

最新文章