diff --git a/src/JT1078.Flv.Benchmark/JT1078FlvEncoderContext.cs b/src/JT1078.Flv.Benchmark/JT1078FlvEncoderContext.cs index 8fd9b31..4d46404 100644 --- a/src/JT1078.Flv.Benchmark/JT1078FlvEncoderContext.cs +++ b/src/JT1078.Flv.Benchmark/JT1078FlvEncoderContext.cs @@ -63,15 +63,6 @@ namespace JT1078.Flv.Benchmark 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 diff --git a/src/JT1078.Flv.Test/FlvEncoderTest.cs b/src/JT1078.Flv.Test/FlvEncoderTest.cs index cf7dded..ea95ae0 100644 --- a/src/JT1078.Flv.Test/FlvEncoderTest.cs +++ b/src/JT1078.Flv.Test/FlvEncoderTest.cs @@ -37,289 +37,289 @@ namespace JT1078.Flv.Test 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.Write(encoder.EncoderFlvHeader()); + fileStream.Write(encoder.EncoderScriptTag()); + fileStream.Write(encoder.EncoderVideoTag(Package, true)); fileStream.Close(); } - [Fact] - public void 测试前几帧的数据() - { - FileStream fileStream=null; - try - { - JT1078Package Package = null; - List h264NALULs = new List(); - H264Decoder decoder = new H264Decoder(); - FlvEncoder encoder = new FlvEncoder(); - var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_2.txt")); - 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(); - } - } - } + //[Fact] + //public void 测试前几帧的数据() + //{ + // FileStream fileStream = null; + // try + // { + // JT1078Package Package = null; + // List h264NALULs = new List(); + // H264Decoder decoder = new H264Decoder(); + // FlvEncoder encoder = new FlvEncoder(); + // var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_2.txt")); + // 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 filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_2.flv"); - if (File.Exists(filepath)) - { - File.Delete(filepath); - } - 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) - { + // var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_2.flv"); + // if (File.Exists(filepath)) + // { + // File.Delete(filepath); + // } + // 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) + // { - } - finally - { - fileStream?.Close(); - fileStream?.Dispose(); - } - } + // } + // finally + // { + // fileStream?.Close(); + // fileStream?.Dispose(); + // } + //} - [Fact] - public void 测试可以播放的Flv1() - { - FileStream fileStream = null; - H264Decoder decoder = new H264Decoder(); - List h264NALULs = new List(); - FlvEncoder encoder = new FlvEncoder(); - 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")); - if (File.Exists(filepath)) - { - File.Delete(filepath); - } + //[Fact] + //public void 测试可以播放的Flv1() + //{ + // FileStream fileStream = null; + // H264Decoder decoder = new H264Decoder(); + // List h264NALULs = new List(); + // FlvEncoder encoder = new FlvEncoder(); + // 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")); + // if (File.Exists(filepath)) + // { + // File.Delete(filepath); + // } - JT1078Package Package = null; + // 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(); - } - } - } + // 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(()=> { }); - } - finally - { - fileStream?.Close(); - fileStream?.Dispose(); - } - } + // 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(() => { }); + // } + // finally + // { + // fileStream?.Close(); + // fileStream?.Dispose(); + // } + //} - [Fact] - public void 测试可以播放的Flv2() - { - FileStream fileStream = null; - H264Decoder decoder = new H264Decoder(); - List h264NALULs = new List(); - 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); - } + //[Fact] + //public void 测试可以播放的Flv2() + //{ + // FileStream fileStream = null; + // H264Decoder decoder = new H264Decoder(); + // List h264NALULs = new List(); + // 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; + // 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(); - } - } - } + // 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(() => { }); - } - finally - { - fileStream?.Close(); - fileStream?.Dispose(); - } - } + // 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(() => { }); + // } + // finally + // { + // fileStream?.Close(); + // fileStream?.Dispose(); + // } + //} - [Fact] - public void 测试主次码流切换() - { - FileStream fileStream = null; - H264Decoder decoder = new H264Decoder(); - List h264NALULs = new List(); - 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); - } + //[Fact] + //public void 测试主次码流切换() + //{ + // FileStream fileStream = null; + // H264Decoder decoder = new H264Decoder(); + // List h264NALULs = new List(); + // 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; + // 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 tmpSpss = new List(); - List times = new List(); - List lastIFrameIntervals = new List(); - List lastFrameIntervals = new List(); - List type = new List(); - 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(() => { }); - } - finally - { - fileStream?.Close(); - fileStream?.Dispose(); - } - } + // 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 tmpSpss = new List(); + // List times = new List(); + // List lastIFrameIntervals = new List(); + // List lastFrameIntervals = new List(); + // List type = new List(); + // 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(() => { }); + // } + // finally + // { + // fileStream?.Close(); + // fileStream?.Dispose(); + // } + //} - [Fact] - public void CreateScriptTagFrameTest() - { - FlvEncoder flvEncoder = new FlvEncoder(); - var hexData = flvEncoder.CreateScriptTagFrame(288, 352); - Assert.Equal(151, hexData.Length); - } + //[Fact] + //public void CreateScriptTagFrameTest() + //{ + // FlvEncoder flvEncoder = new FlvEncoder(); + // var hexData = flvEncoder.CreateScriptTagFrame(288, 352); + // Assert.Equal(151, hexData.Length); + //} - [Fact] - 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); - } + //[Fact] + //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); + //} - [Fact] - 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); - } + //[Fact] + //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); + //} } } diff --git a/src/JT1078.Protocol.Benchmark/JT1078FlvEncoderContext.cs b/src/JT1078.Protocol.Benchmark/JT1078FlvEncoderContext.cs index 8fd9b31..a7a35f0 100644 --- a/src/JT1078.Protocol.Benchmark/JT1078FlvEncoderContext.cs +++ b/src/JT1078.Protocol.Benchmark/JT1078FlvEncoderContext.cs @@ -64,14 +64,14 @@ namespace JT1078.Flv.Benchmark } } - [Benchmark(Description = "FlvEncoder")] - public void FlvEncoder() - { - for(var i=0;i< N;i++) - { - var contents = flvEncoder.CreateFlvFrame(H264NALUs); - } - } + //[Benchmark(Description = "FlvEncoder")] + //public void FlvEncoder() + //{ + // for(var i=0;i< N;i++) + // { + // var contents = flvEncoder.CreateFlvFrame(H264NALUs); + // } + //} } public class JT1078FlvEncoderConfig : ManualConfig diff --git a/src/JT1078.Protocol.Test/JT1078SerializerTest.cs b/src/JT1078.Protocol.Test/JT1078SerializerTest.cs index 484a712..582d7d3 100644 --- a/src/JT1078.Protocol.Test/JT1078SerializerTest.cs +++ b/src/JT1078.Protocol.Test/JT1078SerializerTest.cs @@ -274,7 +274,7 @@ namespace JT1078.Protocol.Test JT1078Label2 label2 = new JT1078Label2(254); Assert.Equal(254, label2.ToByte()); Assert.Equal(1, label2.M); - Assert.Equal(126, label2.PT); + Assert.Equal(126, (byte)label2.PT); } [Fact] @@ -283,7 +283,7 @@ namespace JT1078.Protocol.Test JT1078Label2 label2 = new JT1078Label2(0, 28); Assert.Equal(28, label2.ToByte()); Assert.Equal(0, label2.M); - Assert.Equal(28, label2.PT); + Assert.Equal(Jt1078AudioType.AMR, label2.PT); } [Fact]