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