RTSP 和 RTMP 原理 通过ffmpeg 实现将本地摄像头串流到RTSP服务器
RTSP 和 RTMP 原理 通过ffmpeg 实现将本地摄像头串流到RTSP服务器
Edmend ZhangRTSP 和 RTMP 原理 通过ffmpeg 实现将本地摄像头串流到RTSP服务器
RTMP 与 RTSP
流媒体协议 (Streaming Protocol)
流媒体协议是一种用于通过 Web 传递多媒体的协议。
流媒体协议有很多,主要分为三大类:
- 传统视频流协议
- RTMP
- RTSP
- 基于 HTTP 的自适应协议
- Apple HLS
- Low-Latency HLS
- MPEG-DASH
- Adobe HDS
- 新技术
- SRT
- WebRTC
RTMP
RTMP (Real Time Messaging Protocol)是基于 TCP 开发的,RTSP 使用到了 UDP
可以在服务器和客户端服务器之间保持稳定的连接,无论用户的互联网连接质量如何,它都可以无缝低延迟进行流媒体传输,通过将数据流分成相等的小部分(音频数据默认为 64 字节,视频数据默认为 128 字节)并将它们顺序传输到接收设备,然后将它们重新组合成视频流来实现的。
缺点是它与 HTML5 播放器不兼容,这样的话必须使用另一种协议,例如 HLS来传输视频文件到达用户的设备,此外,RTMP 容易受到带宽问题的影响。
RTSP
用于控制 VHS 式视频流的娱乐和通信系统,RTSP 使用高效的 RTP 协议,将流数据分解成更小的块,这样可以更快地传递。RTSP 支持可靠的分段流,这意味着用户可以在仍在下载流的同时继续观看流。Android 和 iOS 设备没有开箱即用的 RTSP 兼容播放器,所以普及度并不高,但 RTSP 在许多监控 和闭路电视 (CCTV) 应用非常广泛,远程摄像头、在线教育和互联网直播等,都用的比较频繁。
RTMP 提供与不同摄取设备的兼容性和低延迟流媒体的稳定性,但是,您需要一个特定的 Flash Media Server 来使用 RTMP 分发您的内容,所以RTMP 适用于主要的第三方流应用程序和较旧的硬件编码器;
RTP(Real-time Transport Protocol)实时传输协议 UDP 实现 低延迟
1 | 除了RTP协议,为确保流畅和一致的流传输,RTSP 还使用另外两种网络通信协议: |
RTSP 工作原理
- 用户设备向视频流平台发送 RTSP 请求
- 视频流平台返回可以操作的请求列表,比如播放、暂停等
- 用户设备向视频流平台发送具体的请求,比如播放
- 视频流平台解析请求并调用指定机制启动视频流处理
- 由于 RTSP 依赖于专用服务器,并且依赖于 RTP,因此该协议不支持加密视频内容或重传丢失的数据包。
RTSP虽然实时性最好,但是实现复杂,适合视频聊天和视频监控;
RTMP强在浏览器支持好,加载flash插件后就能直接播放,所以非常火,相反在浏览器里播放rtsp就很困难了。
RTMP的优点:
1、低延迟:RTMP使用独占的 1935 端口,无需缓冲,可以实现低延迟。
2、适应性强:所有 RTMP 服务器都可以录制直播媒体流,同时还允许观众跳过部分广播并在直播开始后加入直播流。
3、灵活性:RTMP 支持整合文本、视频和音频,支持 MP3 和 AAC 音频流,也支持MP4、FLV 和 F4V 视频。
RTMP的缺点:
1、HTML5 不支持:标准HTML5 播放器不支持 RTMP 流。
2、容易受到带宽问题的影响:RTMP 流经常会出现低带宽问题,造成视频中断。
3、HTTP 不兼容:无法通过 HTTP 流式传输 RTMP,必须需要实现一个特殊的服务器,并使用第三方内容交付网络或使用流媒体视频平台。
HTTP
http协议的直播分二种格式,m3u8和flv。flv是一种即将被淘汰的直播格式。用来做直播已显的力不从心了。所以综合考虑,m3u8相对的比较好点,优点是支持移动端,并且支持PC端上安装了flashplayer的环境。缺点就如同rtmp一样。flashplayer并不是未来的发展趋势。另外一个缺点就是m3u8是有延迟的。并不能实时,实时传输方面不如rtmp协议。因为m3u8的直播原理是将直播源不停的压缩成指定时长的ts文件(比如9秒,10秒一个ts文件)并同时实时更新m3u8文件里的列表以达到直播的效果。这样就会有一个至少9,10秒的时间延迟。如果压缩的过小,可能导致客户端网络原因致视频变卡。
RTSP和RTMP如何选择
IP 摄像机选择RTSP:几乎所有 IP 摄像机都支持 RTSP,这是因为 IP 摄像机早在 RTMP 协议创建之前就已经存在,与 RTSP 和 IP 摄像机结合使用时,IP 摄像机本身充当 RTSP 服务器,这意味着要将摄像机连接到 IP 摄像机服务器并广播视频。
物联网设备选择RTSP:RTSP 通常内置在无人机或物联网软件中,从而可以访问视频源,它的好处之一是低延迟,确保视频中没有延迟,这对于无人机来说至关重要。
流媒体应用程序选择RTMP:比如各种短视频软件、视频直播软件等都内置了RTMP,RTMP 是为满足现代流媒体需求而设计的。
ffmpeg将本地摄像头推流到RTSP服务器
使用rtsp-simple-server
作为中转服务器,用于ffmpeg
(写客户端)推流,后台服务(读客户端)拉流
引用:
ffmpeg
将本地摄像头推流到rtsp
的8554
端口上(rtsp-simple-server
在处理rtsp
时,监听的是8554
端口,指定其他端口ffmpeg
推流会失败)
参考即可(记得修改rtsp-simple-server.yml
配置文件中的ip地址,在yml文件中可能1935端口号被占用的情况 导致无法启动 修改rtmp端口 disable改为yes)
打开rtsp-simple-server.exe
监听RTSP下TCP的8554端口,然后通过ffmpeg将指定摄像头采集到的图像帧向该端口进行推流(即多个客户端与服务器端的socket通信)
1 | import cv2 |
服务器端:RTSP服务器
1 | 开启两个ffmpeg模拟两个写客户端,完成摄像头采集视频帧的推流和本地视频文件的推流 |
具体安装使用参考blog
大致实现过程:使用rtsp-simple-server
作为中转服务器,用于ffmpeg
(写客户端)推流,后台服务(读客户端)拉流
ffmpeg
推流视频文件到指定ip + 端口上(-stream_loop -1
)
延时
使用ffmpeg的时候,假如不使用编码,直接上传到rtmp服务器,那么视频是没什么延时的,但是这样流量却非常的大,因为假如不编码,就意味着不压缩,直接原始数据上传,消耗流量。
视频的压缩(编码)需要对帧作一定时间的缓存,假如每一个字节都原始传输,就没有压缩的概念了,所以编码的压缩效果,是跟延时有一定的关系的,延时越高,压缩比就越高,因此我们假如需要调整延时,就需要调整延时的帧数了
1 | ffmpeg -f dshow -i audio="qudong ming " -acodec aac -f gdigrab -s 1920x1080 -i desktop -vcodec libx264 -g 60 -crf 30 -f flv rtmp://127.0.0.1:9355/rtmp/room |
加上-g 60参数,-g的意思是延时60帧传输,ffmpeg默认的每秒帧数好像是30(假如需要调整,可以加 -r 20),假如设置了-g 60,那么延时就是2秒,加上其他编码算法的延时、服务器处理的网络影响,延时可能大概是4秒左右。
https://blog.csdn.net/weixin_43025343/article/details/124957360
https://www.cnblogs.com/biao-wu/articles/13064243.html