From 387388f0bbded682ecf8659abd83dfd4fab3652a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E9=A3=9E?= Date: Thu, 1 Nov 2018 15:29:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A4=E6=96=AD=E8=A7=86=E5=B1=8F=E6=B5=81?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=8F=91=E5=B8=83,=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=8F=91=E5=B8=83,=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E8=BF=94=E5=9B=9E404?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/httpflv/server.go | 42 +++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) 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)