diff --git a/protocol/httpflv/server.go b/protocol/httpflv/server.go index a4af13a..292a330 100644 --- a/protocol/httpflv/server.go +++ b/protocol/httpflv/server.go @@ -2,12 +2,12 @@ package httpflv import ( "encoding/json" - "strings" - "net" - "net/http" - "log" "github.com/gwuhaolin/livego/av" "github.com/gwuhaolin/livego/protocol/rtmp" + "log" + "net" + "net/http" + "strings" ) type Server struct { @@ -42,10 +42,11 @@ func (server *Server) Serve(l net.Listener) error { return nil } -func (server *Server) getStream(w http.ResponseWriter, r *http.Request) { +// 获取发布和播放器的信息 +func (server *Server) getStreams(w http.ResponseWriter, r *http.Request) *streams { rtmpStream := server.handler.(*rtmp.RtmpStream) if rtmpStream == nil { - return + return nil } msgs := new(streams) for item := range rtmpStream.GetStreams().IterBuffered() { @@ -68,10 +69,18 @@ func (server *Server) getStream(w http.ResponseWriter, r *http.Request) { } } } + + return msgs +} + +func (server *Server) getStream(w http.ResponseWriter, r *http.Request) { + msgs := server.getStreams(w, r) + if msgs == nil { + return + } resp, _ := json.Marshal(msgs) w.Header().Set("Content-Type", "application/json") w.Write(resp) - } func (server *Server) handleConn(w http.ResponseWriter, r *http.Request) { @@ -96,6 +105,25 @@ func (server *Server) handleConn(w http.ResponseWriter, r *http.Request) { return } + // 判断视屏流是否发布,如果没有发布,直接返回404 + msgs := server.getStreams(w, r) + if msgs == nil || len(msgs.Publishers) == 0 { + http.Error(w, "invalid path", http.StatusNotFound) + return + } else { + include := false + for _, item := range msgs.Publishers { + if item.Key == path { + include = true + break + } + } + if include == false { + http.Error(w, "invalid path", http.StatusNotFound) + return + } + } + w.Header().Set("Access-Control-Allow-Origin", "*") writer := NewFLVWriter(paths[0], paths[1], url, w)