本文转载自微信公众号「java开源精选」,作者妖生 。请联系转载本文。java开源精选微信官方账号。
背景
最近在调查流媒体,RTSP、SIP等等,有两个目的:一是找云查局域网监控方案,二是实现与门禁联动SIP 可视化对讲。
云视频监控
云视频监控有三种方案:
1、开发SIP实现服务器GB28181海大宇的协议IPC摄像头也基本支持,但如果需要存储30天,云盘就太贵了。
2、通过海大宇的上下联动SDK调用摄像头NVR(IPC摄像头一般自带)或硬盘录像机,然后推云。
3、通过上下级联动RTSP(摄像头一般支持这个协议)拉流视频,在云发出命令时将实时或以前的视频推到云上。
云视频监控前选择的方案是采购h5stream,可上下联动,使用简单,可支持海大宇等主流摄像头。
但是,每台机器都需要部署一台license,更烦人;操作步骤是先部署,再邮件申请license,如果再激活,需要两次,不能直接接入,实施物联网特别尴尬。成本不贵,一个license百元左右。
然后开始重新调查。
2020年初,我在疫情假期基于网上教程做了一个使用nginx-RTMP OBS实现的推流直播,浏览器上调用.m3u8分片流,但分片流延迟过高。
调研SIP发现有一个中国人开发的C 流媒体库不错,ZLMediaKit;地址是https://github.com/xia-chu/ZLMediaKit。基于此,有许多优秀的作者ZLMediaKit相应的开发SIP服务实现了公安机关制定的国家标准GB28181-2011、GB28181-2016协议。
在猪群里问问有没有java有同学说流媒体库实现了,red,搜了一下,发现了red5的github还在更新和维护,这是一个选择。但最新的red5版本是基于jdk11是的,有点害怕。
另一群同学贴出了知乎上的答案,虽然已经是2015年了,但还是有参考价值的,可以看看:
- Live555 (C
- EasyDarwin (C ,国产精品)实时流媒体播放服务器程序
- DarwinStreamingSrvr (C )
- Flash流媒体服务器
- Red5 (Java)流媒体服务器
- Open Streaming Server (Java)FMS 流媒体服务器(Adobe,收费的)
- Wowza流媒体服务器(Java)开源流媒体平台
- FreeCast(Java)
帖子地址:https://www.zhihu.com/question/31160392。
Live555 EasyDarwin都是不错的方案,EasyDarwin 是合肥的一家名叫青犀的公司。
上面没有列入,我调查的是 liveGBS 、h5stream,这些方案可以由上下级联动,但由于价格原因,主要是青溪千路以下更贵,我们没有那个量级,所以我们选择分批购买h5stream。
SIP音视频对讲
说完视频监控,说说吧SIP 音视频对讲。
如果只是做SIP 音视频对讲找到了一个很好的解决方案,那就是flashphoner,地址https://flashphoner.com/。Android、ios、web都支持。
然后在查看flashphoner在这个过程中,我找到了这个帖子25个常见的免费SIP地址:https://zhuanlan.zhihu.com/p/313345953。
列表如下:
- XLite (Now Bria Solo)
- linphone
- MicroSIP
- 3CX Softphone
- ZoIPer
- Blink
- Grandstream WAVE
- (Qutecom)Wengo
- Damaka
- AdoreSoftphone
- MiniPAX
- MizuPhone
- FlashPhone
- FaramPhone
- Mirial Softphone
- WXCommunicator
- Twinkle
- IAXComm
- SJLabs SJPhone
- Phoner
- DIAX
- ExpressTalk
- T-Max Dialer
- IPComms
- IMSDroid
当然,没有一一验证。
如果选择后端流媒体方案,如何做前端播放?想到使用webRTC。
在搜寻webRTC发现极客时间李超的课,在其音视频直播课上,还推荐了几款开源流媒体软件:
- licode、
- Janus-gateway
- Mediasoup
- Medooze
Meooze、Mediasoup、Licode这三个流媒体服务器的媒体通信部分是 C 实现了控制逻辑Node.js 实现。Janus-gateway是完全通过 C 语言实现。据说多人视频可以支持500人。
还有一个大牛直播,据自己介绍,延迟极低,适合直播服务。
调研后的想法
就这些,这是目前研究的一些成果。有些人还没有做深入的研究。有些部署更麻烦,花了很长时间没有部署,放弃了。
目前的想法是把所有的视频都推到云端肯定是不现实的,带宽太贵了。因此,我们准备在局域网中部署客户端并排水RTSP,使用webRTC或其他js播放工具,然后使用frp这种穿透软件可以直接将服务暴露给外网访问。
甚至可以将js中的播放地址替换为局域网中播放地址,使用iframe嵌套方式,只要解决跨域问题,就可以直接让视频在客户局域网本机上播放。
当然,如果不是对应局域网内的客户机访问就很尴尬了,所以还要做好云端访问与本地访问的隔离。
回想起来,我们在想A、B使用两个局域网A计算机访问系统计算机访问系统B区域摄像头,也不是不可能,使用NAT转换方式,点对点访问,只是云作为隧道,流量能打破带宽限制吗?
目前的想法可能不同于主流的解决方案,我不知道它是否能实现。看看,否则带宽真的是个大问题。
至于可视化对讲,如果自主研究,目前倾向于使用 ZLMediaKit,在其上实现SIP 信令。
然而,视觉对讲方案相对成熟和普遍,没有个性化的需求,因此可以通过与几家商业公司进行比较来确定。
附录:名词简析
RTSP:实时流协议(Real Time Streaming Protocol)。专门用于控制流媒体服务器的流媒体公共协议。如播放、录制和暂停。UDP协议,传输ts(.m3u8)、MP4格式流。目前主要用于安全领域。
RTMP:实时新闻协议(Real-Time Messaging Protocol)。目前是Adobe未完全公开的私有协议与RTSP基于相同的功能。TCP协议,传输flv、f4v目前格式流是主流流媒体协议。维基有很多变种。
RTSP一般需要2-3数据与命令通道分开,RTMP和HTTP将命令和数据传输到一个通道。
SIP:会话发起协议(Session Initiation Protocol),由IETF(Internet Engineering Task Force,由特网工程任务组制定的多媒体通信协议,又称信令协议,因此SIP服务又称信令服务。
SIP可用于创建、修改和终止交互式用户对话,包括视频、语音、即时通信、在线游戏和虚拟现实。