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

2023-05-16

公司项目需要实现一个只是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是一个功能很强大的软件,本来想试着操作一下,但发现有些困难)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit) 的相关文章

  • 使用ffmpeg+nginx+flvjs实现web播放rtsp视频流

    文章目录 1 简介 2 安装ffmpeg 3 安装nginx 3 1 安装nginx依赖 3 1 1 pcre 3 1 2 zlib 3 1 3 openssl 3 2 编译nginx 3 2 1 下载nginx 3 2 2 下载nginx
  • 收集到的 hls rtmp rtsp 视频流测试地址

    收集到的 hls rtmp rtsp 视频流测试地址 hls https video dev github io streams x36xhzz x36xhzz m3u8 http live hkstv hk lxdns com live
  • ZLMediaKit+wvp-GB28181-pro 安装文档

    文章目录 前言 1 安装zlm 1 1 镜像说明 1 2 docker安装 1 2 1 docker安装命令 1 2 2 docker compose安装 1 3 zlm配置和日志重点说明 2 安装wvp 2 1 目录结构说明 2 1 1
  • Nginx、FFmpeg实现浏览器无插件播放大华IPC、NVR设备视频

    Nginx FFmpeg实现浏览器无插件播放大华IPC NVR设备视频 使用Nginx FFmpeg将rtsp流转换为hls流 web页面通过video js实现视频播放 一 软件安装 1 安装Nginx Windows平台下 下载Ngin
  • H5播放之Rtsp转Websocket点播录像抓拍

    H5播放之Rtsp转Websocket点播录像抓拍 HLS的延时 websocket播放 实现思路 广大网友们 很久没上CSDN了 暨上次RTSP转HLS文章发布以来 一直还有一个问题没有解决 如何避免HLS切片带来的不可避免的高延时 HL
  • OpenCV 中跳过帧并寻找 RTSP 流的末尾

    我在 Raspberry Pi 上的 OpenCV 3 4 2 中捕获并处理 IP 摄像头 RTSP 流 不幸的是 处理需要相当长的时间 每帧大约 0 2 秒 并且流很快就会延迟 我不介意跳过一些帧 因此我正在寻找一种方法在捕获和处理下一帧
  • 如何将 gst-rtsp-server 与自己的管道一起使用?

    我正在编写 gstreamer 应用程序 需要通过 rtsp 传输输出音频 视频流 但在gst rtsp server我建立的例子factory创作仅由gst launch syntax factory gst rtsp media fac
  • 低延迟地从 IP 摄像机获取帧

    我当前正在使用此命令从 RTSP 流获取帧并从标准输出读取帧 ffmpeg nostdin rtsp transport tcp i
  • 在VLC播放器中播放RTSP流

    我正在尝试用java制作一个简单的rtsp流媒体服务器 服务器能够将视频正确地传输到自定义写入播放器 问题是我无法在 vlc 媒体播放器中播放相同的流 当我启动 vlc 媒体播放器并输入流媒体详细信息时 我的服务器显示 vlc 发出的以下请
  • 使用 VLC 通过 RTP 流式传输桌面,延迟尽可能低

    我一直在尝试找出如何使用 VLC 流式传输我的桌面 通过 LAN 并实现尽可能低的延迟 我应该使用什么设置 我尝试了多种方法但尚未成功 编辑 我也愿意使用 VLC 以外的东西 我也用 VLC 尝试过同样的操作 但延迟始终无法低于 3 秒 F
  • 在 Android 中从字节流播放视频

    有没有办法在 Android 中播放字节流视频 我正在使用特定的通信中间件 因此我不能仅将 http rtsp 链接传递到 MediaPlayer 对象 我想知道是否可以使用本地 http rtsp 链接包装我的流 以便我可以播放流 而不是
  • RTSP YouTube 链接

    我已经查遍了谷歌 但无法从 YouTube 视频中获取 rtsp 链接 给定 VIDEO ID 我对如何使用该 id 然后解析 google 的链接感到困惑 感谢您的时间和精力 我找到了这个博客条目 http gdatatips blogs
  • H.264 over RTP - 识别 SPS 和 PPS 帧

    我有来自 IP 摄像机的原始 H 264 流 封装在 RTP 帧中 我想将原始 H 264 数据放入文件中 以便我可以将其转换为ffmpeg 因此 当我想将数据写入原始 H 264 文件时 我发现它必须如下所示 00 00 01 SPS 0
  • ffmpeg:在流 #1 中找不到编解码器的标签,容器当前不支持编解码器

    我正在尝试在命令行中使用 ffmpeg 从我的 ip 摄像机流录制视频 fmpeg rtsp transport tcp gt i rtsp 192 168 0 250 stream1 gt c copy gt map 0 gt f seg
  • Android 4.x 是否支持通过 TCP 传输 RTSP 流?

    我已经在 Android 中使用 VideoView 在 wowza 上成功播放视频 现在我要处理我的服务器 UDP 端口似乎被阻止 以openRTSP命令证明 gt openRTSP rtsp 61 218 52 250 554 live
  • 使用 RTSP 的视频流:Android

    我正在尝试在我的 Linux 计算机上安装 Wowza 服务器 以便为我的 Android 应用程序启用 RTSP 流 在 Android 客户端 我的应用程序需要进行哪些更改 我使用 Videoview 只是播放本地存储的视频文件 现在我
  • Python 或 C/C++ 中的 RTSP 库?

    我正在尝试寻找任何适用于 Python 或 C C 的 RTSP 流媒体库 如果没有 还有其他实时流解决方案吗 在 Python 或 C C 中实现 RTSP 有多容易或困难以及从哪里开始 try live555 http www live
  • 使用ffmpeg处理rtsp流url时出现未知命令失败

    我想使用ffmpeg从rtsp流中抓取图像 命令如下 ffmpeg y i rtsp zigong stream xl02 cn 557 HongTranSvr DevId 1b038d27 858c 46a1 b803 a2984af34
  • 有没有一种将视频从 Android 流式传输到 RTSP 服务器的好方法?

    我已经四处寻找并没有真正发现任何东西 我想通过流将视频从内置摄像头发送到我的 RTSP 服务器 在寻找示例时 我发现 MediaPlayer 的 setDataSource 方法可能只包含服务器上流的位置 我尝试用以下方法来模拟 media
  • Gstreamer、rtspsrc 和负载类型

    我在从特定摄像头检索 rtsp 流时遇到困难 因为摄像头提供的 rtp 有效负载类型是 35 未分配 并且该摄像头接受的有效负载类型rtph264德佩插件的范围是 96 127 结果是 gstreamer 显示如下错误

随机推荐