音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit)

简介: 音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit)

公司项目需要实现一个只是rtsp推流和rtsp拉流的业务机制,据说ZLMediaKit能满足rtsp推拉流的相关业务。

对ZLMediaKit流媒体服务器进行安装以及了解。

0:从开源库Readme中对其功能进行了解

简单认识ZLMediaKit,了解ZLMediaKit能实现的基本功能,我的理解是他就是一个流媒体服务器。

1:ZLMediaKit环境搭建

使用linux虚拟机环境进行环境搭建,并启动:

#ZLMediaKit采⽤了C++11的语法和库,要求编译器⽀持完整的C++11标准。
sudo apt-get install cmake
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit.git
cd ZLMediaKit/
#注意一定要执行
git submodule update --init
mkdir build
sudo cmake ..
make -j4
#相关依赖库 这里先测试基础功能 只安装openssl库
sudo apt-get install libssl-dev
 #除了openssl,其他其实都可以不安装
#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
#在release 目录下生成相关的可执行文件 这里暂时作为测试只关注MediaServer 主进程文件
hlp@ubuntu:~/ZLMediaKit/release/linux/Debug$ pwd
/home/hlp/ZLMediaKit/release/linux/Debug
./MediaServer -h  #查看相关参数
sudo ./MediaServer -d & #启动 
#注意观察日志,启动逻辑正常

2:对rtsp,rtmp,rtp推流和拉流进行测试

ZLMediaKit作为一个流媒体服务器,使用ffmpeg/obs,ffplay/vlc等工具作为推流端或者拉流端,进行基础功能的测试。

2.1:测试rtsp推流和拉流:使用ffmpeg推流,vlc/ffplay拉流测试

2.1.1: ffmpeg进行推流,vlc拉流进行测试

启动ZLMediaKit, 使用ffmpeg推流命令

ffmpeg -re -i "time.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://192.168.0.110/live/test
#rtsp进行推流 推流用的tcp

vlc拉流进行验证,会发现播放正常:

2.1.2:如果使用ffplay进行测试,试试用rtsp/rtmp拉流。

使用ffplay进行拉流相关命令:

#这里应该用的默认端口
ffplay -rtsp_transport tcp rtsp://192.168.0.110/live/test
ffplay -rtsp_transport udp rtsp://192.168.0.110/live/test
ffplay rtmp://192.168.0.110/live/test

拉流相关现象如下图,会发现rtsp以及rtmp拉流时,实时性有一定的差异。

2.2:使用rtmp进行推流和拉流测试:

2.2.1:ffmpeg 使用rtmp推流命令

-re 表示按时间戳读取文件
-vcodec vedio编码格式
-acodec audio编码格式
-f  表示输出格式
#使用rtmp进行推流命令
ffmpeg -re -i "time.mp4" -vcodec h264 -acodec aac -f flv rtmp://192.168.0.110/live/test

使用vlc简单测试拉流,播放成功,同时发现,使用rtmp,rtsp(udp、tcp的rtp方式),时间戳差异变化也挺大的:

2.2.2:如果使用ffmpeg推流,用ffplay进行拉流测试一下。

#使用rtmp进行推流命令
ffmpeg -re -i "time.mp4" -vcodec h264 -acodec aac -f flv rtmp://192.168.0.110/live/test
#ffplay拉流播放命令
ffplay -rtsp_transport tcp rtsp://192.168.0.110/live/test
ffplay -rtsp_transport udp rtsp://192.168.0.110/live/test
ffplay rtmp://192.168.0.110/live/test

也简单对比一下时间戳:

2.3:使用rtp进行推拉流测试

2.3.1 使用ffmpeg进行rtp推流

rtp的推流和拉流个人有些许的知识盲点,这里暂时遗留

#使用rtp进行推流的命令: 但是我没有测通怎么播放
ffmpeg -re -i "time.mp4" -vcodec h264 -acodec aac -f rtp_mpegts rtp://192.168.0.110:10000
#测试通过的一个逻辑: 
#借助ffmepg进行rtp推流以及基于ffplay进行播放的逻辑:(不需要借助服务器)
ffmpeg -re -i time.mp4 -vcodec copy -f rtp rtp://127.0.0.1:1234>test.sdp
ffplay -protocol_whitelist "file,udp,rtp" -i test.sdp    #会发现播放成功
#如下命令却没有播放成功 暂时遗留问题
#ffplay -protocol_whitelist "file,udp,rtp" -i rtp://127.0.0.1:1234

3:用wireshark抓包一下,熟悉流程:

简单抓一下包,熟悉学习流程,这里使用rtsp udp进行推流,使用rtsp tcp进行拉流:

ffmpeg -re -i "time.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport udp rtsp://192.168.0.110/live/test
ffplay -rtsp_transport tcp rtsp://192.168.0.110/live/test

3.1:使用ffmpeg进行推流时 抓包如下:

OPTION:查询服务器端可⽤⽅法

ANNOUNCE: 发送媒体描述信息

SETUP:建⽴RTSP会话

RECORD:请求传送数据

RTP:数据推

TEARDOWN:关闭会话,退出

3.2:拉流抓包流程分析如下:

OPTION:查询服务器端可⽤⽅法

DESCRIBE:得到服务器媒体描述信息,一般时sdp信息

SETUP:建⽴RTSP会话

PLAY:请求开始传送数据

RTP:数据传送播放中

TEARDOWN:关闭会话,退出

3.3:rtsp推流和拉流流程总结

第一步: 查询服务器端可用方法 option

第二步: 交互媒体信息SDP,推流:ANNOUNCE; 拉流:DESCRIBE

第三步:请求建立会话,这里基于tcp和基于udp的差异 SETUP,

第四步:触发开始推流或者开始拉流,推流:RECORD;拉流:PLAY,

第五步:数据传输,只是方向刚好相反,真正的推流或者拉流 rtp

第六步:关闭会话:TEARDOWN

4:总结

想要对rtsp推拉流做了解,先实践做练习,为后面做准备

对ZLMediaKit流媒体服务器以及相关推拉流进行测试。

下一步计划:obs软件基本使用(obs是一个功能很强大的软件,本来想试着操作一下,但发现有些困难)

音视频相关理论学习及实践参考:推荐免费订阅

目录
相关文章
|
11天前
|
弹性计算 运维
新 企业级ECS集群运维管理训练营 打卡学习领好礼
新 企业级ECS集群运维管理训练营 打卡学习领好礼
51 3
|
1月前
服务器迁移上云训练营打卡学习领好礼
服务器迁移上云训练营打卡学习领好礼
46 4
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
53 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
2月前
服务器迁移上云训练营打卡学习领好礼
服务器迁移上云训练营打卡学习领好礼
40 6
|
3月前
|
存储 缓存 安全
学习服务器硬件基础知识
服务器是指一种高性能计算机,提供计算、存储和通信服务。通常运行在网络环境中,为计算机、设备或用户提供资源共享、数据存储和处理等服务。服务器可以是专门设计的硬件设备,也可以是在普通计算机上运行的特定软件。
81 6
|
4月前
|
编解码 监控 网络协议
采用Qt+Live555搭建RTSP服务器
Live555是一个跨平台的流媒体开发库,支持多种流媒体协议,包括RTSP、SIP、RTP等,可以帮助我们快速实现视频流的传输和处理。
335 1
采用Qt+Live555搭建RTSP服务器
|
4月前
|
存储 编解码 应用服务中间件
|
4月前
|
存储
流媒体服务器与视频服务器有什么区别?
总的来说,流媒体服务器和视频服务器的主要区别在于,流媒体服务器更注重实时性和并发性,而视频服务器更注重存储和分发。
174 2
|
3月前
|
JavaScript 前端开发 关系型数据库
Vue 开源项目:一款实用的个人音乐流媒体服务器,轻松打造属于自己的音乐天堂!!!
Vue 开源项目:一款实用的个人音乐流媒体服务器,轻松打造属于自己的音乐天堂!!!
|
5月前
|
网络协议
逆向学习网络篇:心跳包与TCP服务器
逆向学习网络篇:心跳包与TCP服务器
88 0