diff --git a/src/JT1078.FMp4.Test/FMp4Box_Test.cs b/src/JT1078.FMp4.Test/FMp4Box_Test.cs index 3c74da6..a889290 100644 --- a/src/JT1078.FMp4.Test/FMp4Box_Test.cs +++ b/src/JT1078.FMp4.Test/FMp4Box_Test.cs @@ -29,7 +29,6 @@ namespace JT1078.FMp4.Test var hex = writer.FlushAndGetArray().ToHexString(); Assert.Equal("000000246674797069736f6d0000020069736f6d69736f326176633169736f366d703431".ToUpper(), hex); } - /// /// 使用doc/video/fragmented_demo.mp4 /// @@ -47,7 +46,6 @@ namespace JT1078.FMp4.Test var hex = writer.FlushAndGetArray().ToHexString(); Assert.Equal("0000006c6d766864000000000000000000000000000003e8000000000001000001000000000000000000000000010000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002".ToUpper(), hex); } - /// /// 使用doc/video/fragmented_demo.mp4 /// @@ -66,7 +64,6 @@ namespace JT1078.FMp4.Test var hex = writer.FlushAndGetArray().ToHexString(); Assert.Equal("0000005C746B68640000000300000000000000000000000100000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000004000000000000220000003C0".ToUpper(), hex); } - /// /// 使用doc/video/fragmented_demo.mp4 /// @@ -76,7 +73,6 @@ namespace JT1078.FMp4.Test } - /// /// 使用doc/video/fragmented_demo.mp4 /// @@ -105,5 +101,70 @@ namespace JT1078.FMp4.Test //0000 Assert.Equal("000000206d64686400000000000000000000000000124f800000000055c40000".ToUpper(), hex); } + /// + /// 使用doc/video/fragmented_demo.mp4 + /// + [Fact(DisplayName = "trak_mdia_hdlr")] + public void trak_mdia_hdlr_test() + { + HandlerBox handlerBox = new HandlerBox(0, 0); + handlerBox.HandlerType = Enums.HandlerType.vide; + handlerBox.Name = "VideoHandler"; + FMp4MessagePackWriter writer = new MessagePack.FMp4MessagePackWriter(new byte[10240]); + handlerBox.ToBuffer(ref writer); + var hex = writer.FlushAndGetArray().ToHexString(); + Assert.Equal("0000002C68646C72000000000000000076696465000000000000000000000000566964656F48616E646C6572".ToUpper(), hex); + } + /// + /// 使用doc/video/fragmented_demo.mp4 + /// + [Fact(DisplayName = "trak_mdia_hdlr_minf")] + public void trak_mdia_hdlr_minf_test() + { + HandlerBox handlerBox = new HandlerBox(0, 0); + handlerBox.HandlerType = Enums.HandlerType.vide; + handlerBox.Name = "VideoHandler\0"; + FMp4MessagePackWriter writer = new MessagePack.FMp4MessagePackWriter(new byte[10240]); + handlerBox.ToBuffer(ref writer); + var hex = writer.FlushAndGetArray().ToHexString(); + Assert.Equal("0000002D68646C72000000000000000076696465000000000000000000000000566964656F48616E646C657200".ToUpper(), hex); + } + /// + /// 使用doc/video/fragmented_demo.mp4 + /// + [Fact(DisplayName = "trak_mdia_hdlr_minf_vmhd")] + public void trak_mdia_hdlr_minf_vmhd_test() + { + VideoMediaHeaderBox videoMediaHeaderBox = new VideoMediaHeaderBox(); + FMp4MessagePackWriter writer = new MessagePack.FMp4MessagePackWriter(new byte[10240]); + videoMediaHeaderBox.ToBuffer(ref writer); + var hex = writer.FlushAndGetArray().ToHexString(); + Assert.Equal("00000014766d6864000000010000000000000000".ToUpper(), hex); + } + /// + /// 使用doc/video/fragmented_demo.mp4 + /// + [Fact(DisplayName = "trak_mdia_hdlr_minf_dinf")] + public void trak_mdia_hdlr_minf_dinf_test() + { + DataInformationBox dataInformationBox = new DataInformationBox(); + DataReferenceBox dataReferenceBox = new DataReferenceBox(); + dataReferenceBox.DataEntryBoxes = new List(); + dataReferenceBox.DataEntryBoxes.Add(new DataEntryUrlBox(version: 0, flags: 1)); + dataInformationBox.DataReferenceBox = dataReferenceBox; + FMp4MessagePackWriter writer = new MessagePack.FMp4MessagePackWriter(new byte[10240]); + dataInformationBox.ToBuffer(ref writer); + var hex = writer.FlushAndGetArray().ToHexString(); + //0000002464696e660000001c6472656600000000000000010000000c75726c2000000001 + Assert.Equal("0000002464696e660000001c6472656600000000000000010000000c75726c2000000001".ToUpper(), hex); + } + /// + /// 使用doc/video/fragmented_demo.mp4 + /// + [Fact(DisplayName = "trak_mdia_hdlr_minf_stbl")] + public void trak_mdia_hdlr_minf_stbl_test() + { + + } } } diff --git a/src/JT1078.FMp4/Boxs/MediaInformationBox.cs b/src/JT1078.FMp4/Boxs/MediaInformationBox.cs index 7e56a3a..e99514c 100644 --- a/src/JT1078.FMp4/Boxs/MediaInformationBox.cs +++ b/src/JT1078.FMp4/Boxs/MediaInformationBox.cs @@ -18,6 +18,10 @@ namespace JT1078.FMp4 { } /// + /// vmhd + /// + public VideoMediaHeaderBox VideoMediaHeaderBox { get; set; } + /// /// dinf /// public DataInformationBox DataInformationBox { get; set; } @@ -29,6 +33,10 @@ namespace JT1078.FMp4 public void ToBuffer(ref FMp4MessagePackWriter writer) { Start(ref writer); + if (VideoMediaHeaderBox != null) + { + VideoMediaHeaderBox.ToBuffer(ref writer); + } DataInformationBox.ToBuffer(ref writer); SampleTableBox.ToBuffer(ref writer); End(ref writer); diff --git a/src/JT1078.FMp4/Boxs/VideoMediaHeaderBox.cs b/src/JT1078.FMp4/Boxs/VideoMediaHeaderBox.cs index f264a7b..dcc2b99 100644 --- a/src/JT1078.FMp4/Boxs/VideoMediaHeaderBox.cs +++ b/src/JT1078.FMp4/Boxs/VideoMediaHeaderBox.cs @@ -1,11 +1,21 @@ -using System; +using JT1078.FMp4.Interfaces; +using JT1078.FMp4.MessagePack; +using System; using System.Collections.Generic; using System.Text; namespace JT1078.FMp4 { - public class VideoMediaHeaderBox : FullBox + /// + /// vmhd + /// + public class VideoMediaHeaderBox : FullBox, IFMp4MessagePackFormatter { + /// + /// vmhd + /// + /// + /// public VideoMediaHeaderBox(byte version = 0, uint flags = 1) : base("vmhd", version, flags) { } @@ -23,5 +33,17 @@ namespace JT1078.FMp4 }; } } + + public void ToBuffer(ref FMp4MessagePackWriter writer) + { + Start(ref writer); + WriterFullBoxToBuffer(ref writer); + writer.WriteUInt16(GraphicsMode); + foreach(var item in OpColor) + { + writer.WriteUInt16(item); + } + End(ref writer); + } } } diff --git a/src/JT1078.FMp4/JT1078.FMp4.xml b/src/JT1078.FMp4/JT1078.FMp4.xml index 8126534..d9048f4 100644 --- a/src/JT1078.FMp4/JT1078.FMp4.xml +++ b/src/JT1078.FMp4/JT1078.FMp4.xml @@ -327,6 +327,11 @@ minf + + + vmhd + + dinf @@ -912,6 +917,18 @@ + + + vmhd + + + + + vmhd + + + +