流媒体选型

一. 基本配置和功能比较

选型维度 SRS ZLMedia EasyDarwin
功能满足度 支持网络设备摄像头接入,支持RTSP,RPMP,GB28181协议接入。并提供了RestFul API提供给外部调用。 支持网络设备摄像头接入,支持RTSP,RPMP,GB28181协议接入。提供了RestFul API提供给外部调用。 支持RTSP,RTMP协议接入。提供了可配置的前端界面,但没有API接口文档。
社区活跃度 最佳,github上issue未解决/总数比例(281/1800),star数14.1K,有相应的群可以讨论技术问题。 佳,github上issue未解决/总数比例(23/850),star数4k。 一般,github上issue未解决/总数比例(89/200)
版本维护 佳,一直在按照开源计划持续更新 佳,一直在按照开源计划持续更新 差,两年没有进行更新
文档 github wiki形式提供,根据版本进行文档迭代,文档较全 github wiki形式提供,文档较全 文档基本上只有Readme
授权 开源 开源 开源
学习成本 基于C++进行开发,之前项目中已进入应用,在使用方面可以迅速上手。 基于C++进行开发,需要对照文档进行功能使用。 基于Golang进行开发,需要对照文档进行功能使用。
集群支持 支持集群 支持集群 不支持集群
商业维护机构 BAT等在职开发人员开源,无商业维护机构 流媒体服务爱好者开源,无商业维护机构 项目开源,有商业维护机构提供技术支持
成功案例 大疆无人机,其他中小型公司 百度,其他中小型公司 暂未找到
部署难度 可docker部署,docker内置各种库,并可直接使用。不使用docker时,需要进行编译和上层库依赖的编译,比较繁琐;文档齐全,部署比较简单。 无法进行docker部署,需要进行编译和上层库依赖的编译,比较繁琐;文档齐全,部署难度适中。 无法进行docker部署,无需编译,下载releases包解压即可用。

二. 环境准备

三个开源流媒体服务器,两流网络摄像头OBS推流(两个rtsp流,一个rtmp流),视频流信息如下:

网络摄像头

流地址:

枪机: rtsp://admin:sd123456@192.168.35.67:554/h265/ch33/main/av_stream

球机: rtsp://admin:sd123456@192.168.35.3:554/h265/ch33/main/av_stream

三. 功能满足度

经过初步调研,基本具体的功能满足度结果如下:

功能满足度 SRS ZLMedia EasyDarwin
OpenAPI 提供了SRS服务器状态查询和基本的配置文件修改(API概述 提供了ZLMedia服务器状态查询和音视频流操作的API(功能较全 API概述 在界面中存在API文档
接入视频网络设备方式 可通过FFmpeg推流去接摄像头(命令行方式),也可通过ingest方式接入(在配置文件中配置好数据流和输出流)。ingest接入方式比较理想但是存在无法增量添加设备的问题。 可通过FFmpeg推流去接摄像头(命令行方式),也可通过API接口调用的方式去接入(填入输入流和输出流)方式接入。HTTP接口接入设备功能便捷。 通过界面配置接入,接入设备便捷。但是只可以将RTSP转为RTSP流(只能通过IE浏览器配合插件使用),不符合业务需求,淘汰。
视频流稳定性 (1)通过命令行推流方式,比较稳定,但是要显式维持一个线程。
(2)通过ingest方式接入设备需要预先配置好设备。启动服务器后即可通过播放器拉流。
(1)通过命令行推流方式,比较稳定,但是要显式维持一个线程。
(2)httpAPI方式便捷,但是服务器本身对于该功能优化不到位,经常出现花屏的情况,非常影响观看体验。(经过检查发现转码时添加了很多多余的参数,推测将其删除之后应该就可以了)
视频很稳定(得益于协议没有转换)
浏览器支持 支持rtsp,rtmp,http-flv,hls,rtp,webrtc等格式拉流。考虑到flash的废弃,不能使用rtmp直接播放,所以使用了http server进行了hls分发,功能正常。 支持rtsp,rtmp,http-flv,hls,rtp等格式拉流。服务器已自动转换流为hls,rtmp,flv等格式,功能正常。 只可转换为rtsp流,需要配合插件在IE上播放。

四. 视频流展示

SRS:

摄像头数据流:

基本还原了网络摄像头的原画面效果

本地使用OBS推流:

功能正常

ZLMedia

摄像头数据流:

画面完全模糊,看不到东西

本地采用OBS推流:

功能正常

五. 针对具体功能的拓展:

  1. SRS 手动重写配置文件,并调用reload方法实现摄像头快速接入。

      采用nginxParser工具解析conf文件,并按照配置写入新的采集流,覆盖写入文件,并reload服务器。 结果: 新的摄像头可以实现无缝接入
    

六. 选型结果

综上所述,选用SRS作为视频网关的流媒体服务器。