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/modflvfile/main.go

89 lines
1.6 KiB
Go

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
}