目前摄像头存在H.265和H.264两种编码格式,很多的摄像头已经支持H265编码视频的传输。H.264编码格式可以直接在web浏览器通过H5来进行视频解码来完成播放,但是对于H.265编码的视频,无法通过H5直接解码来进行视频播放,当前的方案是通过H5调用编解码组件来进行web直播。
但当前播放的痛点在于:只能使用软解和单线程来进行视频播放处理。 我们来测试一下H.265直播流解码播放。经测试,在 MacBook Pro 2.2GHz Intel Core i7 / 16G 内存笔记本上,使用 Chrome 浏览器长时间观看直播,内存使用量稳定在 270M ~ 320M 之间,CPU 占用率在 40% ~ 50% 之间。由于CPU占用过高,无法满足可以在同一客户机下面播放多路视频的效果。
由于客户端播放H.265编码视频受到技术瓶颈限制,现通过服务端将H.265编码格式转码为H.264编码,统一由服务端来进行视频处理,客户端只进行H.264编码视频播放。 实现方案
方案1: 直接对H265进行封装成自定义FLV、RTMP、HLS发布给前端播放,web前端得支持解析H265播放的控件,如果使用这种方案目前基本很难找到适用的开源方案,而且后端和前端的改动可以说基本是推倒重来,所以这种方案在短时间内是很难实现的。
方案2: 做一台转码服务对H265进行解码再编码成H264,web前端播放方案就无需做任何改动,转码的话有软件转码和硬件转码两种方案,软件转码耗CPU资源,还有就是考虑硬件转码的方案了,本文下面要介绍的就是硬件转码的方案。
方案3:lveweb是可支持H.264/H.265视频播放的流媒体播放器,性能稳定、播放流畅,可支持的视频流格式有RTSP、RTMP、HLS、FLV、WebRTC等,具备较高的可用性。liveweb还拥有Windows、Android、iOS版本,其灵活的视频能力,极大满足了用户的多样化场景需求。Liveweb是好游科技自主开发的网页播放器,支持 RTSP、RTMP、HTTP、HLS、UDP、RTP、File 等多种流媒体协议播放,同时也有多种显示方式 (GDI,D3D) 及格式 (RGB24,YV12,YUY2,RGB565),经过 7x24 小时连续拷机测试,能够很好的处理断开重连.下图为liveweb在浏览器播放H265的效果:
实现过程 基于现有的视频服务框架,在现有的直播中新增转码功能,平台统一接入摄像头,通过拉流判断接入摄像头视频流是否为H.265编码视频流。若判定接入视频流为H.265编码视频流,将开启转码服务,对现有的视频流进行编解码处理,将视频转化为H.264编码推送给流媒体进行视频分发。平台也同步添加是否开启转码功能,开启转码功能后的通道设备将会输出H.264编码视频。 目前采用的是CPU的方式来进行视频转码。后续会增加CPU来进行解码(需要具体关联到设备的显卡)。