Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

228 строки
8.3 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Xunit;
  5. using JT1078.Flv.Extensions;
  6. using JT1078.Protocol;
  7. using System.IO;
  8. using System.Linq;
  9. using JT1078.Protocol.Enums;
  10. using JT1078.Flv.MessagePack;
  11. using JT1078.Flv.Metadata;
  12. using System.Diagnostics;
  13. using JT1078.Protocol.H264;
  14. using JT1078.Protocol.MessagePack;
  15. namespace JT1078.Flv.Test
  16. {
  17. public class FlvEncoderTest
  18. {
  19. [Fact]
  20. public void 测试第一帧的数据()
  21. {
  22. FileStream fileStream = null;
  23. try
  24. {
  25. var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_1.txt"));
  26. var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_1.flv");
  27. fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
  28. bool isNeedFirstHeadler = true;
  29. FlvEncoder encoder = new FlvEncoder();
  30. foreach (var line in lines)
  31. {
  32. var data = line.Split(',');
  33. var bytes = data[6].ToHexBytes();
  34. JT1078Package package = JT1078Serializer.Deserialize(bytes);
  35. JT1078Package fullpackage = JT1078Serializer.Merge(package);
  36. if (fullpackage != null)
  37. {
  38. var videoTag = encoder.EncoderVideoTag(fullpackage, isNeedFirstHeadler);
  39. fileStream.Write(videoTag);
  40. isNeedFirstHeadler = false;
  41. }
  42. }
  43. }
  44. catch (Exception ex)
  45. {
  46. }
  47. finally
  48. {
  49. fileStream?.Close();
  50. fileStream?.Dispose();
  51. }
  52. }
  53. [Fact]
  54. public void 测试前几帧的数据()
  55. {
  56. FileStream fileStream = null;
  57. try
  58. {
  59. var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_2.txt"));
  60. var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_2.flv");
  61. fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
  62. bool isNeedFirstHeadler = true;
  63. FlvEncoder encoder = new FlvEncoder();
  64. foreach (var line in lines)
  65. {
  66. var data = line.Split(',');
  67. var bytes = data[6].ToHexBytes();
  68. JT1078Package package = JT1078Serializer.Deserialize(bytes);
  69. JT1078Package fullpackage = JT1078Serializer.Merge(package);
  70. if (fullpackage != null)
  71. {
  72. var videoTag = encoder.EncoderVideoTag(fullpackage, isNeedFirstHeadler);
  73. fileStream.Write(videoTag);
  74. isNeedFirstHeadler = false;
  75. }
  76. }
  77. }
  78. catch (Exception ex)
  79. {
  80. }
  81. finally
  82. {
  83. fileStream?.Close();
  84. fileStream?.Dispose();
  85. }
  86. }
  87. [Fact]
  88. public void 测试可以播放的Flv3()
  89. {
  90. FileStream fileStream = null;
  91. try
  92. {
  93. var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_3.flv");
  94. var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_3.txt"));
  95. fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
  96. bool isNeedFirstHeadler = true;
  97. FlvEncoder encoder = new FlvEncoder();
  98. foreach (var line in lines)
  99. {
  100. var data = line.Split(',');
  101. var bytes = data[6].ToHexBytes();
  102. JT1078Package package = JT1078Serializer.Deserialize(bytes);
  103. JT1078Package fullpackage = JT1078Serializer.Merge(package);
  104. if (fullpackage != null)
  105. {
  106. var videoTag = encoder.EncoderVideoTag(fullpackage, isNeedFirstHeadler);
  107. fileStream.Write(videoTag);
  108. isNeedFirstHeadler = false;
  109. }
  110. }
  111. }
  112. catch (Exception ex)
  113. {
  114. Assert.Throws<Exception>(() => { });
  115. }
  116. finally
  117. {
  118. fileStream?.Close();
  119. fileStream?.Dispose();
  120. }
  121. }
  122. [Fact]
  123. public void 测试可以播放的Flv4()
  124. {
  125. FileStream fileStream = null;
  126. int i = 0;
  127. try
  128. {
  129. var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_4.flv");
  130. var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_4.txt"));
  131. fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
  132. bool isNeedFirstHeadler = true;
  133. FlvEncoder encoder = new FlvEncoder();
  134. foreach (var line in lines)
  135. {
  136. i++;
  137. var bytes = line.ToHexBytes();
  138. JT1078Package package = JT1078Serializer.Deserialize(bytes);
  139. JT1078Package fullpackage = JT1078Serializer.Merge(package);
  140. if (fullpackage != null)
  141. {
  142. var videoTag = encoder.EncoderVideoTag(fullpackage, isNeedFirstHeadler);
  143. fileStream.Write(videoTag);
  144. isNeedFirstHeadler = false;
  145. }
  146. }
  147. }
  148. catch (Exception ex)
  149. {
  150. }
  151. finally
  152. {
  153. fileStream?.Close();
  154. fileStream?.Dispose();
  155. }
  156. }
  157. [Fact]
  158. public void EncoderScriptTag()
  159. {
  160. FlvEncoder flvEncoder = new FlvEncoder();
  161. var hexData = flvEncoder.EncoderScriptTag(new SPSInfo { width = 288, height = 352 });
  162. Assert.Equal(155, hexData.Length);
  163. }
  164. [Fact]
  165. public void EncoderFirstVideoTag()
  166. {
  167. FlvEncoder flvEncoder = new FlvEncoder();
  168. var hexData = flvEncoder.EncoderFirstVideoTag(
  169. new SPSInfo { levelIdc = 0x14, profileIdc = 0x4d, profileCompat = 0 },
  170. new H264NALU { RawData = new byte[] { 0x67, 0x4D, 0, 0x14, 0x95, 0xA8, 0x58, 0x25, 0x90 } },
  171. new H264NALU { RawData = new byte[] { 0x68, 0xEE, 0x3C, 0x80 } },
  172. new H264NALU()
  173. );
  174. Assert.Equal(44, hexData.Length);
  175. }
  176. [Fact]
  177. public void EncoderVideoTagTest1()
  178. {
  179. try
  180. {
  181. var bytes = "3031636481E206AD0019013050370210000001749162905508480050000E0000000161E4025F0000030037A03031636481E206AE001901305037021000000174916290A508980050000E0000000161E4225F0000030037A0".ToHexBytes();
  182. FlvEncoder encoder = new FlvEncoder();
  183. JT1078Package package = JT1078Serializer.Deserialize(bytes);
  184. JT1078Package fullpackage = JT1078Serializer.Merge(package);
  185. if (fullpackage != null)
  186. {
  187. var videoTag = encoder.EncoderVideoTag(fullpackage, false);
  188. }
  189. }
  190. catch (Exception ex)
  191. {
  192. }
  193. }
  194. [Fact]
  195. public void EncoderVideoTagTest2()
  196. {
  197. try
  198. {
  199. var bytes = "3031636481E2022D0019013050370210000001749179C79D05C80050000E0000000161E1E2FF000003006840".ToHexBytes();
  200. FlvEncoder encoder = new FlvEncoder();
  201. JT1078Package package = JT1078Serializer.Deserialize(bytes);
  202. JT1078Package fullpackage = JT1078Serializer.Merge(package);
  203. if (fullpackage != null)
  204. {
  205. var videoTag = encoder.EncoderVideoTag(fullpackage, false);
  206. }
  207. }
  208. catch (Exception ex)
  209. {
  210. }
  211. }
  212. }
  213. }