一个即拷即用、支持摄像头集中管理、多级路由及h5播放的流媒体服务器。

ipchub

一个即拷即用、支持摄像头集中管理、多级路由及h5播放的流媒体服务器。

项目背景

偶尔和前同事聊天,说到一些小的监控项目需要把IP摄像头集中管理,并提供html播放能力。闲来无事就试着开发一个打发时间,也作为学习 go 语言的一个实践。

在此之前没有流媒体经验,没有go语言项目开发经验。看了一些文档,参考了一些开源项目,主要包括:

  • emitter 学习多协议共享端口等网络编程技能
  • EasyDarwin 为加深对rtsp协议的理解
  • seal rtmp/flv hls 服务的理解

主要特性

  • 基于纯 Golang 开发
  • 支持 Windows、Linux、macOS 平台
  • 支持 RTSP 推流(主动推送)
  • 支持 RTSP 拉流(拉取摄像头或其他流媒体服务器资源)
  • 支持 RTSP TCP、UDP、Multicast 播放
  • 支持 H264+AAC H5播放,包括:
  • 支持 H265+AAC H5播放(实验,需自行寻找播放软件),包括:
    • HTTP-FLV
    • Websocket-FLV
  • 支持流媒体用户推拉权限管理
  • 业务系统集成 RestfulAPI
  • 支持 user 和 routetable 提供者插件:仅支持 linux 和 mac

文档

Similar Resources
Comments
  • flv运行报错

    flv运行报错

    • {"path":"/group/door","rurl":"rtsp://192.168.2.107:554","type":"pull"} ERROR 2022-03-17 17:36:36.912308 github.com/cnotch/ipchub/service/flv/httpflv.go:67: http-flv: stream not support flv 系统ubuntu20.04
  • dial tcp 142.251.43.17:443: i/o timeout

    dial tcp 142.251.43.17:443: i/o timeout

    ubuntu 20.04

    run make command, get erros as below:

    `CGO_ENABLED=0 go build -o bin/ipchub -ldflags "-X github.com/cnotch/ipchub/config.Version=1.1.0" .

    go: github.com/BurntSushi/[email protected]: Get https://proxy.golang.org/github.com/%21burnt%21sushi/toml/@v/v0.3.1.mod: dial tcp 142.251.43.17:443: i/o timeout make: *** [makefile:13: build] Error 1 `

  • 使用http-flv訪問和多級路由有問題

    使用http-flv訪問和多級路由有問題

    FLV264, FV265

    想要存取 FLV 推流有要調整路由和輸入影像嗎? 怎麼調整我的指令和路徑呢謝謝

    routetable和 ffmpeg 指令如下

    ## routetable
    {
    	"total": 2,
    	"next_page_token": "/hr/",
    	"routes": [
    		{
    			"pattern": "/group/door",
    			"url": "rtsp://192.168.0.111:1554/1",
    			"keepalive": true
    		},
    		{
    			"pattern": "/hr/",
    			"url": "rtsp://192.168.0.111:1554/2"
    		}
    	]
    }
    
    ## ffmpeg 
    ffmpeg -re -fflags +genpts -stream_loop -1 -i ./videoplayback.mp4 -rtsp_transport udp -c:v copy -c:a copy -f rtsp rtsp://localhost:1554/1
    
    

    多級路由要如何使用呢,這一段看不太懂

    範例的意思是要多設兩個推流嗎? 但是這樣跟直接存取有什麼差異,是因為要設存取權限嗎?

    [
    	{
            "pattern": "/group/door",
            "url": "rtsp://admin:[email protected]:8554/H264MainStream",
            "keepalive":true
        },
        {
            "pattern": "/hr/",
            "url": "rtsp://admin:[email protected]:1554",
    		"keepalive": false
    	}
    ]
    
    我们配置了两个路由:
    /group/door : 集团大门直接连接到摄像头
    /hr/ : 人力资源部门的摄像头路由到下级的服务器 假设下级服务器有 /door/video1 和 /door/video2 两个摄像头,那么你可以通过 .../hr/door/video1 和 .../hr/door/video2 访问它们。
    

  • 太好用了,碰到了点小问题

    太好用了,碰到了点小问题

    1. 把代码拉下来在VSCode中直接 go run 运行,既没有视频数据,API接口也没有响应。编译打包成exe之后,再执行功能就正常了。不知道这是什么原因?
    2. websocket-rtsp为什么列为实验功能嘞,我试下来效果很好啊,也很稳定。
    3. websocket-rtsp测试页面里有一个rtsp.dev.js是大佬自己写的吗?在网上没有找到相关信息