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(); }
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(); }
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; }
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; }
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> >(); }