using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Configs; using BenchmarkDotNet.Environments; using BenchmarkDotNet.Jobs; using BenchmarkDotNet.Toolchains.CsProj; using JT1078.Flv.H264; using JT1078.Flv.MessagePack; using JT1078.Protocol; using JT808.Protocol.Extensions; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace JT1078.Flv.Benchmark { [Config(typeof(JT1078FlvEncoderConfig))] [MarkdownExporterAttribute.GitHub] [MemoryDiagnoser] public class JT1078FlvEncoderContext { JT1078Package Package; List H264NALUs; H264NALU SPSNALu; H264Decoder h264Decoder = new H264Decoder(); FlvEncoder flvEncoder = new FlvEncoder(); [Params(100, 10000, 100000)] public int N; [GlobalSetup] public void Setup() { var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "JT1078_1.txt")); foreach (var line in lines) { var data = line.Split(','); var bytes = data[6].ToHexBytes(); JT1078Package package = JT1078Serializer.Deserialize(bytes); Package = JT1078Serializer.Merge(package); } H264NALUs = h264Decoder.ParseNALU(Package); SPSNALu = H264NALUs.FirstOrDefault(f => f.NALUHeader.NalUnitType == 7); SPSNALu.RawData = h264Decoder.DiscardEmulationPreventionBytes(SPSNALu.RawData); } [Benchmark(Description = "EXPGolombReader")] public void EXPGolombReaderTest() { for (var i = 0; i < N; i++) { ExpGolombReader h264GolombReader = new ExpGolombReader(SPSNALu.RawData); h264GolombReader.ReadSPS(); } } [Benchmark(Description = "H264Decoder")] public void H264Decoder() { for (var i = 0; i < N; i++) { var nalus = h264Decoder.ParseNALU(Package); } } [Benchmark(Description = "FlvEncoder")] public void FlvEncoder() { for(var i=0;i< N;i++) { var contents = flvEncoder.CreateFlvFrame(H264NALUs); } } } public class JT1078FlvEncoderConfig : ManualConfig { public JT1078FlvEncoderConfig() { Add(Job.Default.WithGcServer(false).With(CsProjCoreToolchain.NetCoreApp30).With(Platform.AnyCpu)); } } }