文章目录
前言
最近几年,物联网项目大量出现,在物联网开发中,监控摄像头实时视频浏览器显示成为项目必备的功能,监控摄像头大多使用RTSP格式的视频流,而RTSP视频流无法直接在chrome、edge浏览器播放,这时我们就需要引入流媒体服务器以实现RTSP转换为HLS或flv等浏览器可以直接播放的视频格式,在经过多方对比后,选择了zlmediakit作为视频转换中间件。
本文介绍了我在项目开发中ZLMediaKit作为视频转换中间件的使用经验。
一、ZLMediaKit工作原理
1. 官网工作原理
2. 视频监控摄像头简化后的原理图
二、相关知识
1. 推流和拉流
推流是指将媒体源(如摄像头、麦克风等)生成的媒体数据主动发送到流媒体服务器或直播平台的过程。推流通常由媒体源设备或编码器负责,它将媒体数据进行编码和封装,然后通过网络将数据发送到指定的流媒体服务器或直播平台。
拉流是指从流媒体服务器或直播平台获取媒体数据并进行播放的过程。拉流通常由客户端设备(如播放器、浏览器等)负责,它通过网络从流媒体服务器或直播平台请求媒体数据,并将接收到的数据进行解码和播放。
推流和拉流是流媒体传输的两个相反方向。推流是将媒体数据从源端发送到服务器端,而拉流是从服务器端获取媒体数据并在客户端进行播放。通过推流和拉流的配合,可以实现实时流媒体的传输和播放。
这是推流和拉流的名词解释,简而言之,推流就是把视频发送到视频服务器,拉流就是访问视频服务器查看实时视频
2. 点播和直播
直播是实时视频传输。点播是预先录制好的视频内容,可以随时播放,不需要实时传输
简而言之,腾讯视频APP中观看电影是点播,视频监控摄像头视频播放是直播
2. RTSP和RTMP
RTSP(Real Time Streaming Protocol)和 RTMP(Real Time Messaging Protocol)都是用于实时流媒体传输的协议,但它们在设计和用途上有一些区别。
RTSP 是一种基于文本的协议,用于控制和传输实时流媒体数据。它主要用于视频监控、视频会议、在线直播等应用场景。RTSP 协议定义了一系列消息和操作,用于协商媒体参数、建立连接、传输数据以及控制流媒体的播放、暂停、快进等。
RTMP 是一种基于 TCP 的协议,专门用于实时流媒体传输。它主要用于互联网视频直播和视频共享平台等应用场景。RTMP 协议使用了自己的一套消息格式和传输机制,可以实现高效的流媒体数据传输和低延迟的视频播放。
总体而言,RTSP 更侧重于控制和管理流媒体会话,而 RTMP 更侧重于实时流媒体数据的传输。在实际应用中,选择使用哪种协议取决于具体的需求和应用场景
这是RTSP和RTMP的区别介绍,当前监控摄像头视频流基本都是RTSP协议,RTMP协议仅供了解,在项目中不涉及。
3. 常用的chrome、edge浏览器免插件可用播放的视频流格式
当前使用比较多的chrome、edge浏览器免插件可用播放的视频流格式主要是FLV和HLS,两者使用区别不大,但HLS 是一种更现代和灵活的流媒体格式,适用于在各种设备和平台上进行视频传输和播放,而 FLV 则是一种较旧的格式
建议使用HLS格式
4. FLV和HLS格式视频流http和ws(websocket)协议地址的区别
HTTP协议是客户端定时向服务器端发送请求,每次请求都会建立一个新的连接。
ws(WebSocket) 通过客户端和服务器之间的握手过程来建立连接,一旦建立,可以保持长时间的连接
可以看出ws(WebSocket)通讯更加高效,更重要的是Chrome浏览器限制了每个域名的最大并发连接数。通常是每个域名最多同时打开 6 个连接,这样就导致chrome浏览器最多可以播放6个视频流,多于6个会一直显示加载中。因而推荐使用ws或wss(ssl)格式的视频流
5. GB28181
GB28181协议是视频监控领域的国家标准,支持GB28181协议的设备之间可以进行彼此通信与控制,实现设备的注册、保活以及流媒体和系统控制命令的传输。
这是GB28181协议的解释,具体使用是支持GB28181协议的摄像头管理平台填写上级支持GB28181协议的管理控制台,在上级GB28181服务器会自动看到下级GB28181服务器的所有摄像头并可以对摄像头视频进行预览,控制。
6. h264 和h265
H.264 和 H.265 是两种视频编码标准,定义了视频流的压缩效率、图像质量、硬件支持、兼容性等
可以类比zip格式和rar格式的文件压缩格式,H.265 的普及程度相对较低,几乎所有的视频播放器和设备都支持 H.264 编码的视频,推荐使用H.264
三、ZLMediaKit视频转换中间件的安装和使用介绍
1.访问地址
2.编译安装
windows版本百度网盘下载地址 ,提取码:xvi6
3.配置
ZLMediaKit RESTful接口地址以及ZLMediaKit转换后的hls视频流地址默认运行在80端口,可以修改配置文件中http.port配置节来修改默认端口
[api]
#RESTful api 操作秘钥,如:addStreamProxy 接口 secret即使用此处配置值来进行安全验证
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
[http]
#http服务器监听端口
port=80
4.运行
windows版本
# 通过 -h 可以了解启动参数
./MediaServer.exe -h
# 以守护进程模式启动
./MediaServer.exe -d &
Linux版本
ZLMediaKit/release/linux/Debug/libmk_api.so
5.注册RTSP视频流
ZLMediaKit运行后会自动开启http RESTful接口,通过调用addStreamProxy RESTful接口以实现RTSP视频流的注册。
接口地址: /index/api/addStreamProxy
请求方式:get/post
接口定义
参数 | 说明 |
---|---|
secret | api操作秘钥,用于接口安全验证,值为配置文件api.secret |
url | 需要转换的视频监控摄像头视频流rtsp地址,如:rtsp://[username]:[password]@[ip]:[port]/ |
stream | 转换后的HLS或者FLV视频流ID,注意唯一,转换后视频流程播放地址一部分 |
app | 流的应用名,默认live,转换后视频流程播放地址一部分 |
响应:
{
“code” : 0,
“data” : {
“key” : “defaultVhost/proxy/0” # 流的唯一标识
}
}
如果添加成功,可以参照播放url规则访问视频
如:
http://127.0.0.1/live/[addStreamProxy输入参数stream]/hls.m3u8
ws://127.0.0.1/live/[addStreamProxy输入参数stream]/hls.m3u8
具体规则
http|https|ws|wss://[ip]:[http.port配置端口]/[addStreamProxy输入参数app]/[addStreamProxy输入参数stream]/hls.m3u8
注意
1、addStreamProxy注册视频流后ZLMediaKit并不会持久化保存,重启ZLMediaKit后需要再次添加
2、ZLMediaKit 视频转换是按需拉/推流,当视频无法观看时,自动结束流转换
3、视频地址播放如有权限限定,通过Web Hook 接口play注册来鉴权