// Copyright 2019, Chef. All rights reserved. // https://github.com/q191201771/lal // // Use of this source code is governed by a MIT-style license // that can be found in the License file. // // Author: Chef (191201771@qq.com) package main import ( "flag" "io" "os" "time" "github.com/q191201771/lal/pkg/httpflv" log "github.com/q191201771/naza/pkg/nazalog" ) // 修改flv文件的一些信息(比如某些tag的时间戳)后另存文件 // // Usage: // ./bin/modflvfile -i /tmp/in.flv -o /tmp/out.flv var countA int var countV int var exitFlag bool func hookTag(tag *httpflv.Tag) { log.Infof("%+v", tag.Header) if tag.Header.Timestamp != 0 { tag.ModTagTimestamp(tag.Header.Timestamp + uint32(time.Now().Unix()/1e6)) } } func main() { var err error inFileName, outFileName := parseFlag() var ffr httpflv.FLVFileReader err = ffr.Open(inFileName) log.Assert(nil, err) defer ffr.Dispose() log.Infof("open input flv file succ.") var ffw httpflv.FLVFileWriter err = ffw.Open(outFileName) log.Assert(nil, err) defer ffw.Dispose() log.Infof("open output flv file succ.") flvHeader, err := ffr.ReadFLVHeader() log.Assert(nil, err) err = ffw.WriteRaw(flvHeader) log.Assert(nil, err) for { tag, err := ffr.ReadTag() if err == io.EOF { log.Infof("EOF.") break } log.Assert(nil, err) hookTag(&tag) err = ffw.WriteRaw(tag.Raw) log.Assert(nil, 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 }