Merge pull request #60 from sjqzhang/master

support rtmp stream to flv file
This commit is contained in:
浩麟
2019-10-25 15:16:59 +08:00
committed by GitHub
2 changed files with 31 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ import (
"flag"
"os"
"log"
"fmt"
"github.com/gwuhaolin/livego/utils/uid"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/av"
@@ -136,3 +137,31 @@ func (writer *FLVWriter) Info() (ret av.Info) {
ret.Key = writer.app + "/" + writer.title
return
}
type FlvDvr struct{}
func (f *FlvDvr) GetWriter(info av.Info) av.WriteCloser {
paths := strings.SplitN(info.Key, "/", 2)
if len(paths) != 2 {
log.Println("invalid info")
return nil
}
err := os.MkdirAll(paths[0], 0755)
if err != nil {
log.Println("mkdir error:", err)
return nil
}
fileName := fmt.Sprintf("%s_%d.%s", info.Key, time.Now().Unix(), "flv")
log.Println("flv dvr save stream to: ", fileName)
w, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, 0755)
if err != nil {
log.Println("open file error: ", err)
return nil
}
writer := NewFLVWriter(paths[0], paths[1], info.URL, w)
log.Println("new flv dvr: ", writer.Info())
return writer
}

View File

@@ -134,6 +134,8 @@ func (s *Server) handleConn(conn *core.Conn) error {
writer := s.getter.GetWriter(reader.Info())
s.handler.HandleWriter(writer)
}
flvWriter:=new(flv.FlvDvr)
s.handler.HandleWriter(flvWriter.GetWriter(reader.Info()))
} else {
writer := NewVirWriter(connServer)
log.Printf("new player: %+v", writer.Info())