mirror of
https://github.com/gwuhaolin/livego.git
synced 2021-06-01 09:10:22 +03:00
Merge pull request #60 from sjqzhang/master
support rtmp stream to flv file
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user