示例#1
0
        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);
        }
示例#2
0
        public void CreateScriptTagFrameTest()
        {
            FlvEncoder flvEncoder = new FlvEncoder();
            var        hexData    = flvEncoder.CreateScriptTagFrame(288, 352);

            Assert.Equal(151, hexData.Length);
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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();
        }
示例#5
0
        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();
            }
        }
示例#6
0
        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);
 }
示例#9
0
        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);
        }
示例#10
0
        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;
 }
示例#12
0
 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)
     {
     }
 }
示例#13
0
 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)
     {
     }
 }
示例#14
0
        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);
        }
示例#15
0
        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();
            }
        }