需求背景:
最近公司项目有了一个需求,接入摄像头到系统中并进行实时监控。要进行接入的摄像头是海康品牌的,首先我在官网上进行了一系列的查询,发现官网上提供的有web开发插件和以及提供了海康开发的SDK包,在一番尝试后,发现这些并不能使用于银河麒麟V4电脑系统,故又在网上进行了一番探索,最终选择了ffmpeg对摄像头进行拉流,然后推送到配置了rtmp模块的nginx上,然后通过flv.js进行拉取直播流。由于本人技术有限,目前是可以实现在网页上进行访问,故在此记录一下。
当有了这个想法的时候,在海康官网了解到了有个api开发接口,不过这个海康官方要求必须签订保密合同才可以获取相关API文件,由于我在公司的职位有限,不能得到公司的相关允许,故联系海康开发者邮箱,感谢海康开发者提供的通过rtsp访问摄像头的API。
感谢海康官方提供的rtsp访问摄像头的接口,rtsp://摄像头用户名:摄像头密码@摄像头IP:554/Streaming/Channels/102
举例说明:
通道01主码流:
rtsp://admin:abc12345@172.6.22.234:554/Streaming/Channels/101?transportmode=unicast
通道01子码流:
rtsp://admin:abc12345@172.6.22.234:554/Streaming/Channels/102?transportmode=unicast(单播)
rtsp://admin:abc12345@172.6.22.106:554/Streaming/Channels/102?transportmode=multicast (多播)
rtsp://admin:abc12345@172.6.22.106:554/Streaming/Channels/102 (?后面可省略,默认单播)
通道01第3码流:
rtsp://admin:abc12345@172.6.22.234:554/Streaming/Channels/103?transportmode=unicast
零通道主码流(零通道无子码流):
rtsp://admin:12345@172.6.22.106:554/Streaming/Channels/001
注:新版本URL,通道号全部按顺序从1开始。
以上是官方提供的模板案例。
实际操作:
这套操作实现的逻辑是:在点进直播显示页面时,首先前端对后台发送一个请求,传入摄像头的信息(包含用户名、密码、ip等一系列信息),接着在后端调用新的线程启动ffmpeg拉取摄像头的流并转换为flv格式的视频发送到Nginx服务器上,接着在前创建flv.js访问Nginx上的流媒体资源在页面进行显示。