Пример #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();
        }
Пример #2
0
        public void Test4()
        {
            FMp4Encoder fMp4Encoder = new FMp4Encoder();
            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 package1 = packages[0];
            var buffer1  = fMp4Encoder.EncoderFirstVideoBox(package1);

            fileStream.Write(buffer1);
            int moofOffset = buffer1.Length;

            foreach (var package in packages.Take(2))
            {
                var otherBuffer = fMp4Encoder.EncoderOtherVideoBox(package, (ulong)moofOffset);
                moofOffset += otherBuffer.Length;
                fileStream.Write(otherBuffer);
            }
            fileStream.Close();
        }
Пример #3
0
 public ToWebSocketService(
     H264Decoder h264Decoder,
     WsSession wsSession,
     FMp4Encoder fMp4Encoder,
     ILoggerFactory loggerFactory,
     IHubContext <FMp4Hub> hubContext)
 {
     this.h264Decoder = h264Decoder;
     logger           = loggerFactory.CreateLogger <ToWebSocketService>();
     this.fMp4Encoder = fMp4Encoder;
     _hubContext      = hubContext;
     this.wsSession   = wsSession;
 }
Пример #4
0
        public void Test4()
        {
            FMp4Encoder fMp4Encoder = new FMp4Encoder();
            H264Decoder h264Decoder = new H264Decoder();
            var         packages    = ParseNALUTests();
            var         filepath    = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "H264", "JT1078_5.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 iNalus = h264Decoder.ParseNALU(packages[0]);
            //判断第一帧是否关键帧
            var moov = fMp4Encoder.EncoderMoovBox(
                iNalus.FirstOrDefault(f => f.NALUHeader.NalUnitType == NalUnitType.SPS),
                iNalus.FirstOrDefault(f => f.NALUHeader.NalUnitType == NalUnitType.PPS));

            fileStream.Write(moov);

            List <H264NALU> nalus = new List <H264NALU>();

            foreach (var package in packages)
            {
                List <H264NALU> h264NALUs = h264Decoder.ParseNALU(package);
                foreach (var nalu in h264NALUs)
                {
                    if (nalu.Slice)
                    {
                        //H264 NALU slice first_mb_in_slice
                        nalus.Add(nalu);
                    }
                    else
                    {
                        if (nalus.Count > 0)
                        {
                            var otherBuffer = fMp4Encoder.EncoderOtherVideoBox(nalus);
                            fileStream.Write(otherBuffer);
                            nalus.Clear();
                        }
                        nalus.Add(nalu);
                    }
                }
            }
            fileStream.Close();
        }
 public JT1078FMp4NormalMsgHostedService(
     MessageDispatchDataService messageDispatchDataService,
     IMemoryCache memoryCache,
     ILoggerFactory loggerFactory,
     FMp4Encoder fM4Encoder,
     JT1078HttpSessionManager httpSessionManager,
     IJT1078MsgConsumer msgConsumer)
 {
     Logger             = loggerFactory.CreateLogger <JT1078FMp4NormalMsgHostedService>();
     JT1078MsgConsumer  = msgConsumer;
     HttpSessionManager = httpSessionManager;
     FM4Encoder         = fM4Encoder;
     this.memoryCache   = memoryCache;
     this.messageDispatchDataService = messageDispatchDataService;
 }
Пример #6
0
 public JT1078FMp4NormalMsgHostedService(
     MessageDispatchDataService messageDispatchDataService,
     IMemoryCache memoryCache,
     ILoggerFactory loggerFactory,
     H264Decoder h264Decoder,
     FMp4Encoder fM4Encoder,
     JT1078HttpSessionManager httpSessionManager)
 {
     Logger             = loggerFactory.CreateLogger <JT1078FMp4NormalMsgHostedService>();
     HttpSessionManager = httpSessionManager;
     FM4Encoder         = fM4Encoder;
     H264Decoder        = h264Decoder;
     this.memoryCache   = memoryCache;
     this.messageDispatchDataService = messageDispatchDataService;
     avFrameDict = new ConcurrentDictionary <string, List <H264NALU> >();
 }