diff --git a/README.md b/README.md index cf109c1..5614414 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ live streaming server write in pure go, simple efficient and can run in any plat - [x] AMF - [x] HLS - [x] HTTP-FLV -- [ ] WebSocket-FLV #### File container - [x] FLV - [x] TS diff --git a/main.go b/main.go index c0fe707..e13a899 100755 --- a/main.go +++ b/main.go @@ -9,14 +9,12 @@ import ( "github.com/gwuhaolin/livego/protocol/hls" "github.com/gwuhaolin/livego/protocol/httpflv" "github.com/gwuhaolin/livego/protocol/httpopera" - "github.com/gwuhaolin/livego/protocol/websocketflv" ) var ( rtmpAddr = flag.String("rtmp-addr", ":1935", "RTMP server listen address") - httpFlvAddr = flag.String("http-flv-addr", ":7001", "HTTP-FLV server listen address") - websocketFlvAddr = flag.String("websocket-flv-addr", ":7002", "HTTP-FLV server listen address") - hlsAddr = flag.String("hls-addr", ":7003", "HLS server listen address") + httpFlvAddr = flag.String("httpflv-addr", ":7001", "HTTP-FLV server listen address") + hlsAddr = flag.String("hls-addr", ":7002", "HLS server listen address") operaAddr = flag.String("manage-addr", ":8080", "HTTP manage interface server listen address") ) @@ -38,7 +36,7 @@ func startHls() *hls.Server { log.Println("HLS server panic: ", r) } }() - log.Println("HLS Listen On", *hlsAddr) + log.Println("HLS listen On", *hlsAddr) hlsServer.Serve(hlsListen) }() return hlsServer @@ -73,25 +71,7 @@ func startHTTPFlv(stream *rtmp.RtmpStream) { log.Println("HTTP-FLV server panic: ", r) } }() - log.Println("HTTP-FLV Listen On", *httpFlvAddr) - hdlServer.Serve(flvListen) - }() -} - -func startWebSocketFlv(stream *rtmp.RtmpStream) { - flvListen, err := net.Listen("tcp", *websocketFlvAddr) - if err != nil { - log.Fatal(err) - } - - hdlServer := websocketflv.NewServer(stream) - go func() { - defer func() { - if r := recover(); r != nil { - log.Println("WebSocket-FLV server panic: ", r) - } - }() - log.Println("WebSocket-FLV Listen On", *websocketFlvAddr) + log.Println("HTTP-FLV listen On", *httpFlvAddr) hdlServer.Serve(flvListen) }() } @@ -109,7 +89,7 @@ func startHTTPOpera(stream *rtmp.RtmpStream) { log.Println("HTTP-Operation server panic: ", r) } }() - log.Println("HTTP-Operation Listen On", *operaAddr) + log.Println("HTTP-Operation listen On", *operaAddr) opServer.Serve(opListen) }() } @@ -126,7 +106,6 @@ func main() { stream := rtmp.NewRtmpStream() hlsServer := startHls() startHTTPFlv(stream) - startWebSocketFlv(stream) //startHTTPOpera(stream) startRtmp(stream, hlsServer) } diff --git a/protocol/httpflv/writer.go b/protocol/httpflv/writer.go index 5920dfa..9d82ec2 100755 --- a/protocol/httpflv/writer.go +++ b/protocol/httpflv/writer.go @@ -1,10 +1,10 @@ package httpflv import ( - "io" "time" "errors" "log" + "net/http" "github.com/gwuhaolin/livego/utils/uid" "github.com/gwuhaolin/livego/protocol/amf" "github.com/gwuhaolin/livego/av" @@ -23,11 +23,11 @@ type FLVWriter struct { buf []byte closed bool closedChan chan struct{} - ctx io.Writer + ctx http.ResponseWriter packetQueue chan av.Packet } -func NewFLVWriter(app, title, url string, ctx io.Writer) *FLVWriter { +func NewFLVWriter(app, title, url string, ctx http.ResponseWriter) *FLVWriter { ret := &FLVWriter{ Uid: uid.NewId(), app: app, diff --git a/protocol/websocketflv/server.go b/protocol/websocketflv/server.go deleted file mode 100644 index 6653e82..0000000 --- a/protocol/websocketflv/server.go +++ /dev/null @@ -1,73 +0,0 @@ -package websocketflv - -import ( - "strings" - "net" - "net/http" - "log" - "github.com/gwuhaolin/livego/av" - "github.com/gwuhaolin/livego/protocol/httpflv" - "github.com/gorilla/websocket" -) - -type Server struct { - handler av.Handler -} - -var upgrader = websocket.Upgrader{ - CheckOrigin: func(r *http.Request) bool { - return true - }, -} - -func NewServer(h av.Handler) *Server { - return &Server{ - handler: h, - } -} - -func (server *Server) Serve(listener net.Listener) error { - mux := http.NewServeMux() - mux.HandleFunc("/", server.handleConn) - http.Serve(listener, mux) - return nil -} - -func (server *Server) handleConn(w http.ResponseWriter, r *http.Request) { - defer func() { - if r := recover(); r != nil { - log.Println("websocket flv handleConn panic: ", r) - } - }() - - url := r.URL.String() - u := r.URL.Path - if pos := strings.LastIndex(u, "."); pos < 0 || u[pos:] != ".flv" { - http.Error(w, "invalid path", http.StatusBadRequest) - return - } - path := strings.TrimSuffix(strings.TrimLeft(u, "/"), ".flv") - paths := strings.SplitN(path, "/", 2) - if len(paths) != 2 { - http.Error(w, "invalid path", http.StatusBadRequest) - return - } - log.Println("url:", u, "path:", path, "paths:", paths) - - conn, err := upgrader.Upgrade(w, r, nil) - if err != nil { - log.Println(err) - conn.Close() - return - } - - writer, err := conn.NextWriter(websocket.BinaryMessage) - if err != nil { - conn.Close() - return - } - - flvWriter := httpflv.NewFLVWriter(paths[0], paths[1], url, writer) - server.handler.HandleWriter(flvWriter) - flvWriter.Wait() -}