You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lal/app/demo/modflvfile/modflvfile.go

82 lines
1.6 KiB
Go

// 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
}