From 4c1542fa96d0bbb8baa2953fa1de73b6ef139e11 Mon Sep 17 00:00:00 2001 From: notch Date: Mon, 21 Dec 2020 16:24:15 +0800 Subject: [PATCH] update readme and move addr --- README.md | 35 ++++++++++++++++++++++++++++++++- {utils => network}/addr.go | 2 +- service/rtsp/multicast_proxy.go | 4 ++-- service/rtsp/session.go | 5 +++-- service/rtsp/session_roles.go | 3 ++- 5 files changed, 42 insertions(+), 7 deletions(-) rename {utils => network}/addr.go (98%) diff --git a/README.md b/README.md index 32c76b8..5113b3a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,35 @@ # ipchub -一个小而美的流媒体服务器 +一个小而美的流媒体服务器,即拷即用。 + +偶尔和前同事聊天,说到一些小的监控项目需要把IP摄像头集中管理,并提供html播放能力。闲来无事就试着开发一个打发时间,也作为学习 go 语言的一个实践。 + +在此之前没有流媒体经验,没有go语言项目开发经验。看了一些文档,参考了一些开源项目,主要包括: ++ [emitter](https://github.com/emitter-io/emitter) 学习多协议共享端口等网络编程技能 ++ [EasyDarwin](https://github.com/EasyDarwin/EasyDarwin) 为加深对rtsp协议的理解 ++ [seal](https://github.com/calabashdad/seal.git) rtmp/flv 相关协议学习及 hls 相关处理 + +## 做什么 +摄像头集中、多级路由及h5播放 + +功能: ++ 流媒体源支持 + + RTSP拉流 + + RTSP推流 ++ 流媒体消费支持 + + RTSP流 + + RTSP WEBSOCKET 代理 + + HTTP-FLV + + WEBSOCKET-FLV + + HTTP-HLS ++ 流媒体多级路由 ++ 用户流媒体推拉权限管理 ++ 业务系统集成API + +## 不做什么 ++ 不存储 ++ 不转码 + +## 文档 ++ [Quick Start](/docs/quickstart.md) ++ [Restful Api](/docs/apis.md) ++ [Server Config](/docs/config.md) diff --git a/utils/addr.go b/network/addr.go similarity index 98% rename from utils/addr.go rename to network/addr.go index 3f64b21..f291489 100755 --- a/utils/addr.go +++ b/network/addr.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package utils +package network import ( "fmt" diff --git a/service/rtsp/multicast_proxy.go b/service/rtsp/multicast_proxy.go index baf73fb..e910ee2 100755 --- a/service/rtsp/multicast_proxy.go +++ b/service/rtsp/multicast_proxy.go @@ -11,7 +11,7 @@ import ( "sync" "github.com/cnotch/ipchub/media" - "github.com/cnotch/ipchub/utils" + "github.com/cnotch/ipchub/network" "github.com/cnotch/xlog" ) @@ -104,7 +104,7 @@ func (proxy *multicastProxy) TTL() int { func (proxy *multicastProxy) SourceIP() string { if len(proxy.sourceIP) == 0 { - addrs := utils.GetLocalIP() + addrs := network.GetLocalIP() if len(addrs) == 0 { proxy.sourceIP = "Unknown" } else { diff --git a/service/rtsp/session.go b/service/rtsp/session.go index c494f3c..cc986bc 100755 --- a/service/rtsp/session.go +++ b/service/rtsp/session.go @@ -18,6 +18,7 @@ import ( "github.com/cnotch/ipchub/config" "github.com/cnotch/ipchub/media" + "github.com/cnotch/ipchub/network" "github.com/cnotch/ipchub/network/socket/buffered" "github.com/cnotch/ipchub/network/websocket" "github.com/cnotch/ipchub/provider/auth" @@ -113,7 +114,7 @@ func newSession(svr *Server, conn net.Conn) *Session { ipaddr, _ := address.Parse(conn.RemoteAddr().String(), 80) // 如果是本机IP,不验证;以便ffmpeg本机rtsp->rtmp - if utils.IsLocalhostIP(ipaddr.IP) { + if network.IsLocalhostIP(ipaddr.IP) { session.authMode = auth.NoneAuth } @@ -439,7 +440,7 @@ func (s *Session) onPlay(resp *Response, req *Request) (err error) { return s.response(resp) } - stream := media.GetOrCreate( s.path) + stream := media.GetOrCreate(s.path) if stream == nil { resp.StatusCode = StatusNotFound return s.response(resp) diff --git a/service/rtsp/session_roles.go b/service/rtsp/session_roles.go index ca6bbdc..09f4489 100755 --- a/service/rtsp/session_roles.go +++ b/service/rtsp/session_roles.go @@ -12,6 +12,7 @@ import ( "github.com/cnotch/ipchub/config" "github.com/cnotch/ipchub/media" + "github.com/cnotch/ipchub/network" "github.com/cnotch/ipchub/utils" "github.com/cnotch/xlog" ) @@ -255,7 +256,7 @@ func (s *Session) asUDPConsumer(stream *media.Stream, resp *Response) (err error } // 创建udp连接 - err = c.prepareUDP(utils.GetIP(s.conn.RemoteAddr()), s.transport.ClientPorts) + err = c.prepareUDP(network.GetIP(s.conn.RemoteAddr()), s.transport.ClientPorts) if err != nil { resp.StatusCode = StatusInternalServerError err = s.response(resp)