您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

85 行
2.6 KiB

  1. using BenchmarkDotNet.Attributes;
  2. using BenchmarkDotNet.Configs;
  3. using BenchmarkDotNet.Environments;
  4. using BenchmarkDotNet.Jobs;
  5. using BenchmarkDotNet.Toolchains.CsProj;
  6. using JT1078.Flv.MessagePack;
  7. using JT1078.Protocol;
  8. using JT1078.Protocol.H264;
  9. using JT1078.Protocol.MessagePack;
  10. using JT1078.Protocol.Extensions;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.IO;
  14. using System.Linq;
  15. namespace JT1078.Flv.Benchmark
  16. {
  17. [Config(typeof(JT1078FlvEncoderConfig))]
  18. [MarkdownExporterAttribute.GitHub]
  19. [MemoryDiagnoser]
  20. public class JT1078FlvEncoderContext
  21. {
  22. JT1078Package Package;
  23. List<H264NALU> H264NALUs;
  24. H264NALU SPSNALu;
  25. H264Decoder h264Decoder = new H264Decoder();
  26. FlvEncoder flvEncoder = new FlvEncoder();
  27. [Params(100, 10000, 100000)]
  28. public int N;
  29. [GlobalSetup]
  30. public void Setup()
  31. {
  32. var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "JT1078_1.txt"));
  33. foreach (var line in lines)
  34. {
  35. var data = line.Split(',');
  36. var bytes = data[6].ToHexBytes();
  37. JT1078Package package = JT1078Serializer.Deserialize(bytes);
  38. Package = JT1078Serializer.Merge(package);
  39. }
  40. H264NALUs = h264Decoder.ParseNALU(Package);
  41. SPSNALu = H264NALUs.FirstOrDefault(f => f.NALUHeader.NalUnitType == 7);
  42. SPSNALu.RawData = h264Decoder.DiscardEmulationPreventionBytes(SPSNALu.RawData);
  43. }
  44. [Benchmark(Description = "EXPGolombReader")]
  45. public void EXPGolombReaderTest()
  46. {
  47. for (var i = 0; i < N; i++)
  48. {
  49. ExpGolombReader h264GolombReader = new ExpGolombReader(SPSNALu.RawData);
  50. h264GolombReader.ReadSPS();
  51. }
  52. }
  53. [Benchmark(Description = "H264Decoder")]
  54. public void H264Decoder()
  55. {
  56. for (var i = 0; i < N; i++)
  57. {
  58. var nalus = h264Decoder.ParseNALU(Package);
  59. }
  60. }
  61. //[Benchmark(Description = "FlvEncoder")]
  62. //public void FlvEncoder()
  63. //{
  64. // for(var i=0;i< N;i++)
  65. // {
  66. // var contents = flvEncoder.CreateFlvFrame(H264NALUs);
  67. // }
  68. //}
  69. }
  70. public class JT1078FlvEncoderConfig : ManualConfig
  71. {
  72. public JT1078FlvEncoderConfig()
  73. {
  74. AddJob(Job.Default.WithGcServer(false).WithToolchain(CsProjCoreToolchain.NetCoreApp50).WithPlatform(Platform.AnyCpu));
  75. }
  76. }
  77. }