package main import ( "flag" "github.com/q191201771/lal/pkg/httpflv" "github.com/q191201771/lal/pkg/util/log" "io" "os" ) // 修改flv文件的一些信息(比如某些tag的时间戳)后另存文件 // // Usage: // ./bin/modflvfile -i /tmp/in.flv -o /tmp/out.flv var countA int var countV int func hookTag(tag *httpflv.Tag) { if tag.Header.T == httpflv.TagTypeAudio { if countA < 3 { httpflv.ModTagTimestamp(tag, 16777205) } countA++ } if tag.Header.T == httpflv.TagTypeVideo { if countV < 3 { httpflv.ModTagTimestamp(tag, 16777205) } countV++ } } func main() { var err error inFileName, outFileName := parseFlag() var ffr httpflv.FlvFileReader err = ffr.Open(inFileName) panicIfErr(err) defer ffr.Dispose() log.Infof("open input flv file succ.") var ffw httpflv.FlvFileWriter err = ffw.Open(outFileName) panicIfErr(err) defer ffw.Dispose() log.Infof("open output flv file succ.") flvHeader, err := ffr.ReadFlvHeader() panicIfErr(err) err = ffw.WriteRaw(flvHeader) panicIfErr(err) //for i:=0; i < 10; i++{ for { tag, err := ffr.ReadTag() if err == io.EOF { log.Infof("EOF.") break } panicIfErr(err) //log.Infof("> hook. %+v", tag) hookTag(tag) //log.Infof("< hook. %+v", tag) err = ffw.WriteRaw(tag.Raw) panicIfErr(err) } } func panicIfErr(err error) { if err != nil { panic(err) } } func parseFlag() (string, string) { i := flag.String("i", "", "specify input flv file") o := flag.String("o", "", "specify ouput flv file") flag.Parse() if *i == "" || *o == "" { flag.Usage() os.Exit(1) } return *i, *o }