视频流采集存储和展示技术调研
作者:互联网
针对云平台直接接收摄像头视频数据的需求,本文调研了云平台接收摄像头视频数据的技术方案。
一、摄像头数据输出协议调研
调研了海康威视iDS-2VS435-F832(C)摄像头,支持RJ45网口接入网络,应用层数据传输协议RTSP,RTCP,RTP。
下面主要论述一下视频的解析原理。
1.1 图像原理
图像像素格式指的是没有经过编码的按照原始像素排列的数据,常见的rgb、rbga、bgr、bgra、yuv等都是图像像素格式。比如,一个完整的18*17像素rgb格式的图像,它的像素排列一般是这样的:
存储的时候使用一维数组来存这些数据,所以排列顺序就变成这样:rgb rgb rgb rgb.......。
图片封装格式指的日常见到的png、jpg、bmp、gif等,它是对像素格式图像做了压缩之后,再用对应格式的要求进行封装而来的,封装指的是给压缩后的图像数据增加头信息或者尾信息。其中bmp是无损压缩格式,里面的数据就是图片头信息加上rgb排列的像素数据,加图片头信息这个操作叫做封装;jpg/png这些都是有损压缩,就是对像素数据做了压缩之后再按照jpg/png的格式要求做封装。
1.2 视频原理
视频是由一帧一帧连续的视频帧组成的,视频帧是视频数据的最小组成单位。
1.2.1 视频帧像素格式rgb/rgba/bgr/bgra/yuv
视频帧指的是rgb、rgba、bgr、bgra、yuv等格式的像素格式图像经过编码后的格式。
1.2.2 视频编码h264/h265
编码是什么呢?编码就是对像素格式图像的压缩。图像的jpg、png等是对像素格式图像的压缩封装,视频帧其实也是一种像素格式图像的压缩(注意这里不包括封装,只是压缩,jpg是对图像做了压缩和封装),只不过单张的像素格式图像压缩封装采用jpg、png等格式,而视频帧的压缩采用的是h264或者h265等压缩算法。
1.2.3 视频封装格式mp4/avi/mpeg/mkv/flv
视频帧在压缩后,也是要封装的。那么视频帧的封装格式是什么呢?封装格式就是日常见到的视频文件的格式,比如mp4、avi、mpeg/mpg、mkv、flv等格式。视频的封装指的是按照每种封装格式的要求把视频帧和音频按照一定顺序存起来形成视频文件。封装格式一般都会包含一些头标识、尾标识和一些视频描述信息,这样播放器读取视频文件的时候就知道该怎么播放这些视频文件了。
1.2.4 视频流传输协议rtp/rtsp/rtcp/rtmp/http-flv
流媒体指的是采用流式传输技术在网络上分段连续发送媒体数据的一种技术与过程。此传输技术使得媒体数据包(已有媒体文件中的媒体数据,或者实时生成的媒体数据)得以像流水一样发送给用户。如果不使用此技术,就必须在使用媒体数据之前下载整个媒体文件。流式传输可传送现场正在生成过程中的实时影音,或者预存于服务器上的已有影片,当观看者在收看这些影音文件时,影音数据在送达观看者的计算机后立即由特定播放软件播放。
流媒体实际指的是一种新的媒体传输方式,有声音流、视频流、文本流、图像流、动画流等,而非一种新的媒体。
从上面的定义可以看出来,视频流是一种流媒体。所以,视频以流的方式传输重点不在视频,而在视频的流式传输协议。
目前的视频流式传输协议有:Rtp-Rtsp、Rtmp、RTP-Rtcp、hls、http-flv。
- RTP+RTCP:
RTP(Real-time Transport Protocol,实时传输协议)+ RTCP(Real-time Transport Control Protocol或RTP Control Protocol,实时传输控制协议),RTP协议和RTCP一起使用,而且它是建立在UDP协议上的。RTCP传输控制数据,RTP传输媒体数据。 - RTP+RTSP:
经常用于IPTV领域。因为其采用UDP传输视音频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。 - RTMP:
RTMP(Real Time Messaging Protocol)实时消息传送协议,是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。
它有三种变种:
工作在TCP之上的明文协议,使用端口1935;
RTMPT封装在HTTP请求之中,可穿越防火墙;
RTMPS类似RTMPT,但使用的是HTTPS连接;
总结: RTMP协议基于TCP来实现,每个时刻的数据,收到后立刻转发,一般延迟在1-3s左右 - HLS:
HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。基本原理就是将视频或流切分成小片(TS), 并建立索引(M3U8).
相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。
总结: HLS协议基于HTTP短连接来实现,集合一段时间数据,生成ts切片文件,然后更新m3u8(HTTP Live Streaming直播的索引文件),一般延迟会大于10s - HTTP-FLV:
HTTP-FLV基于HTTP长连接,同RTMP一样,每个时刻的数据,收到后立刻转发,只不过使用的是HTTP协议,一般延迟在1-3s。这里的flv不是流媒体协议,它只是个无限大的flv文件。
最后说明:说到底这些协议原理上依然是建立在tcp/udp基础上的应用层传输协议。
1.2.5 流媒体服务
支持音视频存储分发的服务都可以叫流媒体服务。
二、云平台接收摄像头视频数据技术调研
用javacv-platform包接收和解析,存储为本地文件系统视频文件。Javacv封装了ffmpeg用来做视频的编码、解码,封装了OpenCV用来做图像处理。
参考文献
略
标签:视频,存储,封装,HTTP,协议,视频流,像素,采集,格式 来源: https://www.cnblogs.com/zhangzl419/p/16662269.html