祝各位道友念头通达
GitHub Gitee 语雀 打赏

rtsp媒体服务搭建, 支持 rtp, rtsp, rtmp

项目需求, 使用 rtp 内网组播推流, 内网需要有一个台机器对 流做存储,转换成 mp4
方案1: 媒体服务器方案, 使用媒体服务器, 可以做到高并发, 协议相互转换, 流存储, 内网直播转外网
方案2: 直接使用 ffmpeg, 按照需求 将直播流转换成 mp4存储,
本项目比较简单,只需要存储, 采用第二个方案 https://www.cnblogs.com/han-guang-xue/p/16056041.html
该文档主要针对方案一
原文档(定期更新): https://gitee.com/han_gx/my_notes/blob/master/nginxRtmp/rtsp-媒体服务器搭建.md

rtsp 媒体服务器选型

1.rtsp-server

主要针对 RTSP协议的轻量级服务器, 由四人组成. 从githubissues
shell https://github.com/revmischa/rtsp-server

2. ZLMediaKit

 https://github.com/ZLMediaKit/ZLMediaKit
 https://gitee.com/ZLMediaKit/ZLMediaKit

经过商用长时间验证,性能可靠稳定, 目前由58位多开发人员提供

  1. 支持多种协议(RTP/RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转。
  2. 使用多路复用/多线程/异步网络IO模式开发,并发性能优越,支持海量客户端连接。
  3. 支持linux、macos、ios、android、windows全平台。
  4. 支持画面秒开、极低延时(500毫秒内,最低可达100毫秒)。
  5. 提供完善的标准C API,可以作SDK用,或供其他语言调用
  6. 同时支持 rtsp 和 rtmp
  7. 支持 docker 容器
    ...
    优点甚多,官网介绍很详细

rtsp 性能测试
https://github.com/ZLMediaKit/ZLMediaKit/wiki/RTSP性能优化

3. 环境搭建(ZLMediaKit)

基于 docker 安装

docker安装`https://docs.docker.com/engine/install/centos/#installation-methods`
1. 安装 docker 引擎
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
# 安装 最新的docker版本
yum install docker-ce docker-ce-cli containerd.io
# 列举 docker 版本, 如果需要安装其他版本的docker, 可以使用下面的命令
yum list docker-ce --showduplicates | sort -r
# 安装特定版本的 docker
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# 启动 docker
systemctl status/stop/restart/disable/enable docker
# 开机自启动
sudo systemctl enable/disable docker.service
sudo systemctl enable/disable containerd.service

# docker 相关操作 
docker ps -a             # 查看所有容器
docker run hello-world   # 执行 hello-world 容器
docker search xxxxx      # 查找在线容器
docker pull xxxx:version # 下载容器
docker images            # 查看所有镜像
2. 安装 zlmediakit 镜像并运行, 该镜像由官方提供
docker pull zlmediakit/zlmediakit:Release.last
# -p 本地端口:远程端口
docker run -id -p 1935:1935 -p 8081:80 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp zlmediakit/zlmediakit:Release.last
3. 推流拉流
# rtsp tcp 推流, test1.webm 是一个 8K 测试视频,也可以使用其他的
ffmpeg -re -i "./test1.webm" -vcodec h264 -acodec aac -f rtsp -rtsp_transport udp rtsp://101.43.179.35:8554/live/test
# ffplay 拉流
ffplay http://101.43.179.35:8081/live/test/hls.m3u8

# rtp 推流
ffmpeg -re -i "./test1.webm" -vcodec h265 -acodec aac -f rtp_mpegts rtp://101.43.179.35:10000

可以输入web服务地址查看上传的流文件, 然后通过 ffplay 播放即可

4.基于docker容器如何修改配置文件

目前我并没有发现在容器中如何修改相关配置文件, 不过官方提供了API接口, 通过API配置服务器相关参数, 通过 getServerconfig 和 setServerconfig, 查看和配置服务器, 通过设置参数 on_record_mp4,用来让媒体服务器记录推流为 mp4 格式, 保存视频以固定时长,官方文档并没有提及到,源码安装也同样没提交到相关配置项,不过通过 ffmpeg可以实现大的视频拆分
ffmpeg -ss 00:00:00 -i input.mp4 -c copy -t 1200 output.mp4
服务API接口: https://github.com/zlmediakit/ZLMediaKit/wiki/MediaServer支持的HTTP-API#3indexapigetserverconfig

基于 源码搭建服务

官方文档 https://github.com/ZLMediaKit/ZLMediaKit/wiki/快速开始

环境 Centos8 系统

安装 额外依赖
yum install -y gcc gcc-c++ cmake
安装 ffmpeg, 并且要下载配置使其支持 h264 视频编码
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.gz  ## 安装 x264 需要 nasm
cd nasm-2.14 && ./configure && make && make install

git clone https://code.videolan.org/videolan/x264.git
cd x264 && ./configure --prefix=/usr/x264/ --includedir=/usr/local/include --libdir=/usr/local/lib --enable-shared && make && make install

curl -O http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz  ## 下载依赖
tar -zxvf yasm-1.3.0.tar.gz && cd yasm-1.3.0 && ./configure && make && make install
git clone https://gitee.com/mirrors/ffmpeg
cd ffmpeg && ./configure && make
编译
cd ZLMediaKit
mkdir build
cd build
#macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
cmake ..
make -j4
运行
cd ZLMediaKit/release/linux/Debug # 该目录下有各种运行命令,可以拷贝到其他的地方
./MediaServer  ## 运行项目
./MediaServer -h ## 查看配置文件
config.ini       ## 配置文件,详细配置请查https://github.com/zlmediakit/ZLMediaKit/blob/master/conf/config.ini 
推流记录mp4文件

修改配置文件 config.ini

#是否默认推流时mp4录像,hook接口(on_publish)中可以覆盖该设置
publishToMP4=0
posted @ 2022-03-25 17:56  韩若明瞳  阅读(1417)  评论(0编辑  收藏  举报