diff --git a/src/JT1078.FMp4.Test/FMp4Box_Test.cs b/src/JT1078.FMp4.Test/FMp4Box_Test.cs index dfd37b9..1655bd6 100644 --- a/src/JT1078.FMp4.Test/FMp4Box_Test.cs +++ b/src/JT1078.FMp4.Test/FMp4Box_Test.cs @@ -6,6 +6,7 @@ using Xunit; using JT1078.Protocol.Extensions; using JT1078.FMp4.Enums; using JT1078.FMp4.Samples; +using System.Buffers.Binary; using System.IO; using System.Linq; @@ -271,7 +272,7 @@ namespace JT1078.FMp4.Test movieFragmentBox.TrackFragmentBox.TrackFragmentHeaderBox.DefaultSampleFlags = 0x01010000; //moof->tfdt movieFragmentBox.TrackFragmentBox.TrackFragmentBaseMediaDecodeTimeBox = new TrackFragmentBaseMediaDecodeTimeBox(); - //todo:moof->trun + //moof->trun //000006987472756E00000305000000D0000006F802000000 //00 00 06 98 //74 72 75 6E @@ -288,9 +289,20 @@ namespace JT1078.FMp4.Test movieFragmentBox.TrackFragmentBox.TrackRunBox.TrackRunInfos = new List(); var lines = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FMP4", "fragmented_demo_trun.txt")); var buffers = lines.Where(w => !string.IsNullOrEmpty(w)).Select(s => s.ToHexBytes()).ToList(); - List data = new List(); //SampleDuration //SampleSize + foreach (var buffer in buffers) + { + var mod = buffer.Length / 8; + for (int i = 0; i < mod; i++) + { + TrackRunBox.TrackRunInfo trackRunInfo = new TrackRunBox.TrackRunInfo(); + trackRunInfo.SampleDuration = BinaryPrimitives.ReadUInt32BigEndian(buffer.Skip(i * 4).Take(4).ToArray()); + trackRunInfo.SampleSize= BinaryPrimitives.ReadUInt32BigEndian(buffer.Skip((i + 1)*4).Take(4).ToArray()); + movieFragmentBox.TrackFragmentBox.TrackRunBox.TrackRunInfos.Add(trackRunInfo); + } + } + Assert.Equal(0x00000698, movieFragmentBox.TrackFragmentBox.TrackRunBox.TrackRunInfos.Count*8+4*6); } /// /// 使用doc/video/fragmented_demo.mp4