// Copyright 2020, 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 ( "bytes" "encoding/hex" "io/ioutil" "github.com/q191201771/lal/pkg/mpegts" "github.com/q191201771/lal/pkg/hls" "github.com/q191201771/naza/pkg/nazalog" ) // 临时小工具,比较两个TS文件。注意,该程序还没有写完。 var filename1 = "/tmp/lal/hls/innertest/innertest-7.ts" var filename2 = "/tmp/lal/hls/innertest.bak/innertest-7.ts" func skipPacketFilter(tss [][]byte) (ret [][]byte) { for _, ts := range tss { h := mpegts.ParseTsPacketHeader(ts) if h.Pid == mpegts.PidAudio { continue } ret = append(ret, ts) } return } func parsePacket(packet []byte) { h := mpegts.ParseTsPacketHeader(packet) nazalog.Debugf("%+v", h) index := 4 var adaptation mpegts.TsPacketAdaptation switch h.Adaptation { case mpegts.AdaptationFieldControlNo: // noop case mpegts.AdaptationFieldControlFollowed: adaptation = mpegts.ParseTsPacketAdaptation(packet[4:]) index++ default: nazalog.Warn(h.Adaptation) } index += int(adaptation.Length) if h.PayloadUnitStart == 1 && h.Pid == 256 { pes, length := mpegts.ParsePes(packet[index:]) nazalog.Debugf("%+v, %d", pes, length) } } func main() { _ = nazalog.Init(func(option *nazalog.Option) { option.AssertBehavior = nazalog.AssertFatal }) defer nazalog.Sync() content1, err := ioutil.ReadFile(filename1) nazalog.Assert(nil, err) content2, err := ioutil.ReadFile(filename2) nazalog.Assert(nil, err) tss1, _ := hls.SplitFragment2TsPackets(content1) tss2, _ := hls.SplitFragment2TsPackets(content2) nazalog.Debugf("num of ts1=%d, num of ts2=%d", len(tss1), len(tss2)) //tss1 = skipPacketFilter(tss1) //tss2 = skipPacketFilter(tss2) nazalog.Debugf("after skip. num of ts1=%d, num of ts2=%d", len(tss1), len(tss2)) m := len(tss1) if m > len(tss2) { m = len(tss2) } for i := 0; i < m; i++ { if !bytes.Equal(tss1[i], tss2[i]) { nazalog.Debug(i) parsePacket(tss1[i]) parsePacket(tss2[i]) nazalog.Debugf("\n%s", hex.Dump(tss1[i])) nazalog.Debugf("\n%s", hex.Dump(tss2[i])) } } }