public void FlvEncoder_Test_1() { JT1078Package Package = null; var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_1.txt")); int mergeBodyLength = 0; foreach (var line in lines) { var data = line.Split(','); var bytes = data[6].ToHexBytes(); JT1078Package package = JT1078Serializer.Deserialize(bytes); mergeBodyLength += package.DataBodyLength; Package = JT1078Serializer.Merge(package); } Flv.H264.H264Decoder decoder = new Flv.H264.H264Decoder(); var nalus = decoder.ParseNALU(Package); Assert.Equal(4, nalus.Count); FlvEncoder encoder = new FlvEncoder(); var contents = encoder.CreateFlvFrame(nalus); var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_1.flv"); if (File.Exists(filepath)) { File.Delete(filepath); } File.WriteAllBytes(filepath, contents); }
public void CreateScriptTagFrameTest() { FlvEncoder flvEncoder = new FlvEncoder(); var hexData = flvEncoder.CreateScriptTagFrame(288, 352); Assert.Equal(151, hexData.Length); }
public void 测试可以播放的Flv3() { FileStream fileStream = null; try { var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_3.flv"); var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_3.txt")); fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write); bool isNeedFirstHeadler = true; FlvEncoder encoder = new FlvEncoder(); foreach (var line in lines) { var data = line.Split(','); var bytes = data[6].ToHexBytes(); JT1078Package package = JT1078Serializer.Deserialize(bytes); JT1078Package fullpackage = JT1078Serializer.Merge(package); if (fullpackage != null) { var videoTag = encoder.EncoderVideoTag(fullpackage, isNeedFirstHeadler); fileStream.Write(videoTag); isNeedFirstHeadler = false; } } } catch (Exception ex) { Assert.Throws <Exception>(() => { }); } finally { fileStream?.Close(); fileStream?.Dispose(); } }
public void 测试第一帧的数据() { JT1078Package Package = null; var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_1.txt")); int mergeBodyLength = 0; foreach (var line in lines) { var data = line.Split(','); var bytes = data[6].ToHexBytes(); JT1078Package package = JT1078Serializer.Deserialize(bytes); mergeBodyLength += package.DataBodyLength; Package = JT1078Serializer.Merge(package); } H264Decoder decoder = new H264Decoder(); //7 8 6 5 1 1 1 1 1 7 8 6 5 1 1 1 1 var nalus = decoder.ParseNALU(Package); Assert.Equal(4, nalus.Count); FlvEncoder encoder = new FlvEncoder(); var contents = encoder.CreateFlvFrame(nalus); var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_1.flv"); if (File.Exists(filepath)) { File.Delete(filepath); } FileStream fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write); fileStream.Write(FlvEncoder.VideoFlvHeaderBuffer); fileStream.Write(contents); fileStream.Close(); }
public void FlvEncoder_Test_4() { FileStream fileStream = null; Flv.H264.H264Decoder decoder = new Flv.H264.H264Decoder(); List <H264NALU> h264NALULs = new List <H264NALU>(); FlvEncoder encoder = new FlvEncoder(); try { var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_4.flv"); var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_4.txt")); if (File.Exists(filepath)) { File.Delete(filepath); } JT1078Package Package = null; foreach (var line in lines) { var data = line.Split(','); var bytes = data[6].ToHexBytes(); JT1078Package package = JT1078Serializer.Deserialize(bytes); Package = JT1078Serializer.Merge(package); if (Package != null) { var tmp = decoder.ParseNALU(Package); if (tmp != null && tmp.Count > 0) { h264NALULs = h264NALULs.Concat(tmp).ToList(); } } } fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write); fileStream.Write(FlvEncoder.VideoFlvHeaderBuffer); var totalPage = (h264NALULs.Count + 10 - 1) / 10; for (var i = 0; i < totalPage; i++) { var flv2 = encoder.CreateFlvFrame(h264NALULs.Skip(i * 10).Take(10).ToList()); if (flv2.Length != 0) { fileStream.Write(flv2); } } } catch (Exception ex) { Assert.Throws <Exception>(() => { }); } finally { fileStream?.Close(); fileStream?.Dispose(); } }
public void EncoderScriptTag() { FlvEncoder flvEncoder = new FlvEncoder(); var hexData = flvEncoder.EncoderScriptTag(new SPSInfo { width = 288, height = 352 }); Assert.Equal(155, hexData.Length); }
public JT1078NormalMsgHostedService( FlvEncoder flvEncoder, JT1078HttpSessionManager httpSessionManager, IJT1078PackageConsumer packageConsumer) { PackageConsumer = packageConsumer; HttpSessionManager = httpSessionManager; FlvEncoder = flvEncoder; }
public JT1078WSFlvHostedService( ILoggerFactory loggerFactory, JT1078WSFlvDataService jT1078WSFlvDataServic, JT1078HttpSessionManager jT1078HttpSessionManager) { logger = loggerFactory.CreateLogger("JT1078WSFlvHostedService"); flvEncodingLogger = loggerFactory.CreateLogger("FlvEncoding"); this.jT1078WSFlvDataService = jT1078WSFlvDataServic; this.jT1078HttpSessionManager = jT1078HttpSessionManager; FlvEncoder = new FlvEncoder(loggerFactory); }
public void GetFirstFlvFrameTest() { FlvEncoder flvEncoder = new FlvEncoder(); string key = "test"; var bufferFlvFrame = new byte[] { 0xA, 0xB, 0xC, 0xD, 0xE, 0xF }; FlvEncoder.FirstFlvFrameCache.TryAdd(key, (2, new byte[] { 1, 2, 3, 4, 5, 6 }, true)); var buffer = flvEncoder.GetFirstFlvFrame(key, bufferFlvFrame); //替换PreviousTagSize 4位的长度为首帧的 PreviousTagSize Assert.Equal(new byte[] { 1, 2, 3, 4, 5, 6, 0, 0, 0, 2, 0xE, 0xF }, buffer); }
public void CreateVideoTag0FrameTest() { FlvEncoder flvEncoder = new FlvEncoder(); var hexData = flvEncoder.CreateVideoTag0Frame( new byte[] { 0x67, 0x4D, 0, 0x14, 0x95, 0xA8, 0x58, 0x25, 0x90 }, new byte[] { 0x68, 0xEE, 0x3C, 0x80 }, new SPSInfo { levelIdc = 0x14, profileIdc = 0x4d, profileCompat = 0 }); Assert.Equal(40, hexData.Length); }
public JT1078FlvNormalMsgHostedService( IMemoryCache memoryCache, ILoggerFactory loggerFactory, FlvEncoder flvEncoder, JT1078HttpSessionManager httpSessionManager, IJT1078MsgConsumer msgConsumer) { Logger = loggerFactory.CreateLogger <JT1078FlvNormalMsgHostedService>(); JT1078MsgConsumer = msgConsumer; HttpSessionManager = httpSessionManager; FlvEncoder = flvEncoder; this.memoryCache = memoryCache; }
public void EncoderVideoTagTest2() { try { var bytes = "3031636481E2022D0019013050370210000001749179C79D05C80050000E0000000161E1E2FF000003006840".ToHexBytes(); FlvEncoder encoder = new FlvEncoder(); JT1078Package package = JT1078Serializer.Deserialize(bytes); JT1078Package fullpackage = JT1078Serializer.Merge(package); if (fullpackage != null) { var videoTag = encoder.EncoderVideoTag(fullpackage, false); } } catch (Exception ex) { } }
public void EncoderVideoTagTest1() { try { var bytes = "3031636481E206AD0019013050370210000001749162905508480050000E0000000161E4025F0000030037A03031636481E206AE001901305037021000000174916290A508980050000E0000000161E4225F0000030037A0".ToHexBytes(); FlvEncoder encoder = new FlvEncoder(); JT1078Package package = JT1078Serializer.Deserialize(bytes); JT1078Package fullpackage = JT1078Serializer.Merge(package); if (fullpackage != null) { var videoTag = encoder.EncoderVideoTag(fullpackage, false); } } catch (Exception ex) { } }
public void EncoderFirstVideoTag() { FlvEncoder flvEncoder = new FlvEncoder(); var hexData = flvEncoder.EncoderFirstVideoTag( new SPSInfo { levelIdc = 0x14, profileIdc = 0x4d, profileCompat = 0 }, new H264NALU { RawData = new byte[] { 0x67, 0x4D, 0, 0x14, 0x95, 0xA8, 0x58, 0x25, 0x90 } }, new H264NALU { RawData = new byte[] { 0x68, 0xEE, 0x3C, 0x80 } }, new H264NALU() ); Assert.Equal(44, hexData.Length); }
public void 测试主次码流切换() { FileStream fileStream = null; H264Decoder decoder = new H264Decoder(); List <H264NALU> h264NALULs = new List <H264NALU>(); FlvEncoder encoder = new FlvEncoder(); try { var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_5.flv"); var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_5.txt")); if (File.Exists(filepath)) { File.Delete(filepath); } JT1078Package Package = null; foreach (var line in lines) { var data = line.Split(','); var bytes = data[6].ToHexBytes(); JT1078Package package = JT1078Serializer.Deserialize(bytes); Package = JT1078Serializer.Merge(package); if (Package != null) { var tmp = decoder.ParseNALU(Package); if (tmp != null && tmp.Count > 0) { h264NALULs = h264NALULs.Concat(tmp).ToList(); } } } var tmp1 = h264NALULs.Where(w => w.NALUHeader.NalUnitType == 7).ToList(); List <SPSInfo> tmpSpss = new List <SPSInfo>(); List <ulong> times = new List <ulong>(); List <ushort> lastIFrameIntervals = new List <ushort>(); List <ushort> lastFrameIntervals = new List <ushort>(); List <int> type = new List <int>(); foreach (var item in h264NALULs) { //type.Add(item.NALUHeader.NalUnitType); times.Add(item.Timestamp); lastFrameIntervals.Add(item.LastFrameInterval); lastIFrameIntervals.Add(item.LastIFrameInterval); if (item.NALUHeader.NalUnitType == 7) { ExpGolombReader expGolombReader = new ExpGolombReader(item.RawData); tmpSpss.Add(expGolombReader.ReadSPS()); } } fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write); var totalPage = (h264NALULs.Count + 10 - 1) / 10; for (var i = 0; i < totalPage; i++) { var flv2 = encoder.CreateFlvFrame(h264NALULs.Skip(i * 10).Take(10).ToList()); if (flv2.Length != 0) { //fileStream.Write(flv2); } } } catch (Exception ex) { Assert.Throws <Exception>(() => { }); } finally { fileStream?.Close(); fileStream?.Dispose(); } }