Beispiel #1
0
        public void Test4()
        {
            FMp4Encoder fMp4Encoder = new FMp4Encoder();
            H264Decoder h264Decoder = new H264Decoder();
            var         packages    = ParseNALUTests();
            var         filepath    = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_4.mp4");

            if (File.Exists(filepath))
            {
                File.Delete(filepath);
            }
            using var fileStream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
            var ftyp = fMp4Encoder.EncoderFtypBox();

            fileStream.Write(ftyp);
            var package1 = packages[0];
            var nalus1   = h264Decoder.ParseNALU(package1);
            var moov     = fMp4Encoder.EncoderMoovBox(nalus1, package1.Bodies.Length);

            fileStream.Write(moov);
            foreach (var package in packages)
            {
                var otherNalus      = h264Decoder.ParseNALU(package);
                var flag            = package.Label3.DataType == Protocol.Enums.JT1078DataType.视频I帧 ? 1u : 0u;
                var otherMoofBuffer = fMp4Encoder.EncoderMoofBox(otherNalus, package.Bodies.Length, package.Timestamp, package.LastIFrameInterval, flag);
                var otherMdatBuffer = fMp4Encoder.EncoderMdatBox(otherNalus, package.Bodies.Length);
                fileStream.Write(otherMoofBuffer);
                fileStream.Write(otherMdatBuffer);
            }
            fileStream.Close();
        }
Beispiel #2
0
        public void a()
        {
            List <JT1078Package> packages = new List <JT1078Package>();
            var lines           = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "jt1078_3.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;
                var packageMerge = JT1078Serializer.Merge(package);
                if (packageMerge != null)
                {
                    packages.Add(packageMerge);
                }
            }
            List <byte[]> first = new List <byte[]>();
            //var styp = fMp4Encoder.EncoderStypBox();
            //first.Add(styp);
            //q.Enqueue(styp);
            var ftyp = fMp4Encoder.EncoderFtypBox();

            //q.Enqueue(ftyp);
            first.Add(ftyp);
            var package1 = packages[0];
            var nalus1   = h264Decoder.ParseNALU(package1);
            var moov     = fMp4Encoder.EncoderMoovBox(nalus1, package1.Bodies.Length);

            //q.Enqueue(moov);
            first.Add(moov);
            q.Add(first.SelectMany(s => s).ToArray());
            List <int> filter = new List <int>()
            {
                6, 7, 8
            };

            foreach (var package in packages)
            {
                List <byte[]> other       = new List <byte[]>();
                var           otherNalus  = h264Decoder.ParseNALU(package);
                var           filterNalus = otherNalus.Where(w => !filter.Contains(w.NALUHeader.NalUnitType)).ToList();
                var           flag        = package.Label3.DataType == Protocol.Enums.JT1078DataType.视频I帧 ? 1u : 0u;
                var           len         = filterNalus.Sum(s => s.RawData.Length);
                var           len1        = otherNalus.Sum(s => s.RawData.Length);
                var           moofBuffer  = fMp4Encoder.EncoderMoofBox(filterNalus, len, package.Timestamp, package.LastIFrameInterval, flag);
                //q.Enqueue(moofBuffer);
                other.Add(moofBuffer);
                var otherMdatBuffer = fMp4Encoder.EncoderMdatBox(filterNalus, len);
                //q.Enqueue(otherMdatBuffer);
                other.Add(otherMdatBuffer);
                q.Add(other.SelectMany(s => s).ToArray());
            }
        }