ZLMediaKit 的安装及使用介绍

ZLMediaKit 介绍

ZLMediaKit是一个基于C++开发的开源流媒体服务器。它提供了高性能的音视频处理能力,支持常见的流媒体协议,如RTSP、RTMP、HLS和HTTP-FLV,并且具有低延迟和高并发处理能力。

开源地址:https://github.com/xia-chu/ZLMediaKit

在这里插入图片描述

 ZLMediaKit的一些主要特点和功能:

  • 基于C++11开发,避免使用裸指针,代码稳定可靠,性能优越。
  • 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/Websocket-FLV/GB28181/MP4),支持协议互转。
  • 使用多路复用/多线程/异步网络IO模式开发,并发性能优越,支持海量客户端连接。
  • 代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。 支持linux、macos、ios、android、windows全平台。
  • 支持画面秒开、极低延时(500毫秒内,最低可达100毫秒)。 提供完善的标准C API,可以作SDK用,或供其他语言调用。
  • 提供完整的MediaServer服务器,可以免开发直接部署为商用服务器。 提供完善的restful api以及web hook,支持丰富的业务逻辑。 打通了视频监控协议栈与直播协议栈,对RTSP/RTMP支持都很完善。
  • 全面支持H265/H264/AAC/G711/OPUS。

总之,ZLMediaKit是一个功能强大且高性能的开源流媒体服务器,适用于构建实时音视频传输和处理的应用,如直播、视频会议、视频监控等。它提供了多种流媒体协议的支持,具有低延迟和高并发处理能力,同时支持动态转码和跨平台运行。 

linux下编译安装

安装:

#国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init
# 安装gcc
sudo apt-get install build-essential
# 安装cmake
sudo apt-get install cmake
# 安装依赖库
#除了openssl,其他其实都可以不安装
sudo apt-get install libssl-dev -y
# 构建和编译项目
cd ZLMediaKit
mkdir build
cd build
cmake ..
# 如果编译release版本 使用 cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4

运行:

cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &

ZLMediaKit的HTTP API

ZLMediaKit的HTTP API是一组通过HTTP协议访问的接口,用于控制和管理ZLMediaKit流媒体服务器的功能和状态。

通过以下访问可查看api列表:

http://127.0.0.1/index/api/getApiList

获取服务器配置: /index/api/getServerConfig

获取流列表: /index/api/getMediaList

详细文档: mirrors / xia-chu / zlmediakit · GitCode

通过HTTP API,您可以实现以下功能:

1. 控制流媒体的启动和停止:您可以通过HTTP API发送请求来启动和停止流媒体的播放和推流,控制流媒体的开始和结束。

2. 获取流媒体的状态信息:您可以使用HTTP API获取流媒体服务器的状态信息,包括当前的连接数、流媒体的运行状态、带宽使用情况等。

3. 获取流媒体的统计信息:HTTP API提供了获取流媒体服务器的统计信息的接口,包括每个流的码率、帧率、丢包率等统计数据。

4. 配置流媒体服务器参数:您可以使用HTTP API设置和修改流媒体服务器的配置参数,如网络端口、转码参数、录制参数等。

5. 控制录制和截图功能:通过HTTP API,您可以控制流媒体服务器进行录制和截图操作,包括开始录制、停止录制、获取录制文件列表等。

6. 实时监控和日志查看:HTTP API提供了实时监控流媒体服务器的接口,可以查看实时的日志信息和运行状态。 通过使用ZLMediaKit的HTTP API,您可以通过编写简单的HTTP请求来实现对流媒体服务器的控制和管理,方便地集成和扩展流媒体服务器的功能,满足特定的应用需求。

ffmpeg推流

UDP推流

ffmpeg -re -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

TCP推流

ffmpeg -re -i input.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream

轮回推流

ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

此中:

-re 为以流的方法读取;

-stream_loop 为轮回读取视频源的次数,-1为无穷轮回;

-i 为输入的文件;

-f 为格局化输出到那里;

使用 -stream_loop -1 选项,可以循环播放一个视频或音频文件。这在需要循环播放特定内容的应用中非常有用,比如在展示会议或展览中播放循环视频或音频。

使用 -stream_loop -1 选项,可以循环推送一个流到RTMP或其他流媒体服务器。这在需要连续推送特定内容的应用中非常有用,比如直播、视频监控等。

使用举例,tcp方式推流:

ffmpeg -re -i input.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://114.115.170.245/live/test

ZLMediaKit 如何实现点播

ZLMediaKit的点播一般通过 mp4 文件来实现,推荐大家使用 http mp4点播,这样是最简单,服务器也无需解复用 mp4 文件,当然 ZLMediaKit目前也支持 rtsp、rtmp、http-flv、websocket-flv 的 mp4 点播, 对应的 url 跟直播 url 类似
要在ZLMediaKit 中实现点播,只需要将 mp4 文件放到 www/record下,默认情况下,路径名是 record,可以在 config.ini 中修改。

rtsp://114.115.170.245/record/test.mp4

您可以使用HTTP协议来访问点播媒体文件。在浏览器中输入以下URL进行点播:

http://服务器IP地址:服务器端口/文件相对路径

使用ffmpeg拉取点播文件并存储到本地:

ffmpeg -i rtsp://114.115.170.245/record/input.mp4  -c copy output.mp4

使用ffplay播放流:

ffplay rtsp://127.0.0.1:8554/stream

如需用VLC拉流,需装置VLC播放器。

 FFmpeg拉流保留成视频:

ffmpeg -stimeout 30000000 -i rtsp://127.0.0.1:8554/stream -c copy output.mp4

-stimeout 30000000 为等候RTSP 流衔接的时光,单元为us微秒,30000000 为等候 30 秒,假如衔接掉败则退出。特殊留神该字段要放在rtsp地点之前,否者有效。 

音频推拉流播放实例

查看音频设备

要查看Linux下的音频设备,可以使用以下命令:

1. 使用`aplay -l`命令查看已安装的音频设备列表。这将显示所有的音频设备,包括声卡和其他音频设备。每个设备都有一个标识符,如`hw:0`、`hw:1`等。

2. 使用`cat /proc/asound/cards`命令查看已检测到的音频设备列表。这将显示已检测到的声卡设备及其标识符。

3. 使用`pactl list short sinks`命令查看当前系统中的音频输出设备。这将显示所有可用的音频输出设备及其标识符。

关于`hw:0`,它是一个标识符,表示系统中的第一个音频设备。在Linux中,音频设备通常使用`hw:X`的格式进行标识,其中X是设备的编号。因此,`hw:0`表示第一个音频设备,`hw:1`表示第二个音频设备,以此类推。

设备录音和播放

##录音
 ffmpeg  -f alsa -i hw:0  out.wav
##录音并指定格式
ffmpeg -f alsa -i default -c:a libmp3lame output.mp3
##播放
aplay out.wav
##使用ffmpeg播放
ffmpeg -i nf.mp3  -f alsa hw:0

注意使用imax6ul板子设备录音前 需配置下MIC口的设置。

执行脚本为:mic_in_config.sh,脚本内容:

#!/bin/sh
#ALIENTEK
#设置捕获的音量
amixer cset name='Capture Volume' 63,63

#PCM
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256

#耳机/喇叭(扬声器)设置播放音量,直流/交流
#Turn on Headphone
amixer sset 'Headphone Playback ZC' on
#Set the volume of your headphones(98% volume,127 is the MaxVolume)
amixer sset Headphone 125,125
#Turn on the speaker
amixer sset 'Speaker Playback ZC' on
#Set the volume of your Speaker(98% volume,127 is the MaxVolume)
amixer sset Speaker 125,125
#Set the volume of your Speaker AC(80% volume,100 is the MaxVolume)
amixer sset 'Speaker AC' 4
#Set the volume of your Speaker AC(80% volume,5 is the MaxVolume)
amixer sset 'Speaker DC' 4

#音频输入,左声道管理
#Turn on Left Input Mixer Boost
amixer sset 'Left Input Mixer Boost' on
amixer sset 'Left Boost Mixer LINPUT1' on
amixer sset 'Left Input Boost Mixer LINPUT1' 127
amixer sset 'Left Boost Mixer LINPUT2' on 
amixer sset 'Left Input Boost Mixer LINPUT2' 127
#Turn off Left Boost Mixer LINPUT3
amixer sset 'Left Boost Mixer LINPUT3' off
amixer sset 'Left Input Boost Mixer LINPUT3' 0

#音频输入,右声道管理,全部关闭
#Turn on Right Input Mixer Boost
amixer sset 'Right Input Mixer Boost' off
amixer sset 'Right Boost Mixer RINPUT1' off
amixer sset 'Right Input Boost Mixer RINPUT2' 0
amixer sset 'Right Boost Mixer RINPUT2' off
amixer sset 'Right Input Boost Mixer RINPUT2' 0
amixer sset 'Right Boost Mixer RINPUT3' off
amixer sset 'Right Input Boost Mixer RINPUT3' 0

如果使用是line,则先执行下line_in_config.sh脚本: 

#!/bin/sh
#正点原子@ALIENTEK
#设置捕获的音量
amixer cset name='Capture Volume' 63,63
#PCM
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256

#录音前应该设置耳机或者扬声器的音量为0(下面并没有设置)防止干扰
#耳机/喇叭(扬声器)设置播放音量,直流/交流
#Turn on Headphone
amixer sset 'Headphone Playback ZC' on
#Set the volume of your headphones(98% volume,127 is the MaxVolume)
amixer sset Headphone 125,125
#Turn on the speaker
amixer sset 'Speaker Playback ZC' on
#Set the volume of your Speaker(98% volume,127 is the MaxVolume)
amixer sset Speaker 125,125
#Set the volume of your Speaker AC(80% volume,100 is the MaxVolume)
amixer sset 'Speaker AC' 4
#Set the volume of your Speaker AC(80% volume,5 is the MaxVolume)
amixer sset 'Speaker DC' 4

#音频输入,左声道管理
#Turn off Left Input Mixer Boost
amixer sset 'Left Input Mixer Boost' off
#关闭其他通道输入
amixer sset 'Left Boost Mixer LINPUT1' off
amixer sset 'Left Input Boost Mixer LINPUT1' 0
#关闭麦克风左声道输入
amixer sset 'Left Boost Mixer LINPUT2' off 
amixer sset 'Left Input Boost Mixer LINPUT2' 0
#Line_in右声道输入关闭
amixer sset 'Left Boost Mixer LINPUT3' off
amixer sset 'Left Input Boost Mixer LINPUT3' 0


#音频输入,右声道管理
#Turn on Right Input Mixer Boost
amixer sset 'Right Input Mixer Boost' on
amixer sset 'Right Boost Mixer RINPUT1' off
amixer sset 'Right Input Boost Mixer RINPUT1' 0
amixer sset 'Right Boost Mixer RINPUT2' off
amixer sset 'Right Input Boost Mixer RINPUT2' 0

#要想设置成音频输入,请打开RINPUT3,看原理图可知
#其他的声道通过上面的配置可关闭,这样是为了避免干扰,需要的时候就打开
#RINPUT3打开(关键点)
amixer sset 'Right Boost Mixer RINPUT3' on
amixer sset 'Right Input Boost Mixer RINPUT3' 127

使用自带的arecord 录音,aplay播放:

#!/bin/sh
#正点原子@ALIENTEK
#录音前应该设置耳机和扬声器的音量为0,防止干扰
amixer sset 'Headphone Playback ZC' off
#Set the volume of your headphones(98% volume,127 is the MaxVolume)
amixer sset Headphone 0,0
#Turn on the speaker
amixer sset 'Speaker Playback ZC' off
#Set the volume of your Speaker(98% volume,127 is the MaxVolume)
amixer sset Speaker 0,0

#录音
arecord -r 44100 -f S16_LE -c 2 -d 10 record.wav

#再打开耳机和扬声器
amixer sset 'Headphone Playback ZC' on
#Set the volume of your headphones(98% volume,127 is the MaxVolume)
amixer sset Headphone 125,125
#Turn on the speaker
amixer sset 'Speaker Playback ZC' on
#Set the volume of your Speaker(98% volume,127 is the MaxVolume)
amixer sset Speaker 125,125

#播放录音
aplay record.wav

 服务推拉流

一台设备向服务器推流:

root@ATK-IMX6U:~/test#ffmpeg -re -i nf.mp3 -acodec aac -f rtsp -rtsp_transport tcp rtsp://114.115.170.245/live/test 

一台设备从服务器拉流并播放:

root@ATK-IMX6U:~/test# ffmpeg -i rtsp://114.115.170.245/live/test  -f alsa hw:0

linux查看端口占用情况

Linux下如何查看进程占用?在部署项目实时会遇到端口被占用的情况,需要我们先停下占用端口的进程,然后才能开启新的服务来使用这个端口,那么Linux如何查看端口占用?分享一下:

1、lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000

 # lsof -i:8000
 COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
 lwfs    22065 root    6u  IPv4 4395053      0t0  TCP *:irdmi (LISTEN)

可以看到8000端口已经被轻量级文件系统转发服务lwfs占用。lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具。

2、netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,netstat -tunlp |grep 8000

-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名

其他资源

音视频开发5. ZLMediaKit库入门使用 编译安装_zlmediakit 编译_编程圈子的博客-CSDN博客

2 ZLMediaKit流媒体服务器 基本使用 - 简书

rtsp服务器搭建使用操作! - 知乎

ZLMediaKit 推/拉流_zlmediakit 拉流_La-La-La-La-La vida的博客-CSDN博客

使用FFmpeg工具进行推流、拉流、截图、变速、转换,及常见问题处理_ffmpeg 推流_FarryNiu的博客-CSDN博客

 基于FFmpeg进行rtsp推流及拉流(详细教程)--技术员007 ଘ(੭ˊᵕˋ)੭

ZLMediaKit视频推流和播放步骤_ywxuan的博客-CSDN博客

常见流媒体服务器方案对比分析 - 知乎 

EasyDarwin ffmpeg+EasyDarwin开源流媒体服务器平台试用笔记(视频流rtsp)_FakeOccupational的博客-CSDN博客

  • 10
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特立独行的猫a

您的鼓励是我的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值