diff --git a/container/flv/muxer.go b/container/flv/muxer.go index 452145c..41812c3 100755 --- a/container/flv/muxer.go +++ b/container/flv/muxer.go @@ -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 +} \ No newline at end of file