Browse Source

Merge pull request #60 from sjqzhang/master

support rtmp stream to flv file
pull/83/head
浩麟 6 years ago committed by GitHub
parent
commit
f0cf24ac2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 29
      container/flv/muxer.go
  2. 2
      protocol/rtmp/rtmp.go

29
container/flv/muxer.go

@ -6,6 +6,7 @@ import ( @@ -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) { @@ -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
}

2
protocol/rtmp/rtmp.go

@ -134,6 +134,8 @@ func (s *Server) handleConn(conn *core.Conn) error { @@ -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())

Loading…
Cancel
Save