@@ -30,7 +30,6 @@ namespace JT1078.FMp4 | |||||
WriterFullBoxToBuffer(ref writer); | WriterFullBoxToBuffer(ref writer); | ||||
if(SampleDependencyTypes!=null && SampleDependencyTypes.Count > 0) | if(SampleDependencyTypes!=null && SampleDependencyTypes.Count > 0) | ||||
{ | { | ||||
//todo: wait ref doc | |||||
foreach(var item in SampleDependencyTypes) | foreach(var item in SampleDependencyTypes) | ||||
{ | { | ||||
writer.WriteByte(item.IsLeading); | writer.WriteByte(item.IsLeading); | ||||
@@ -41,7 +41,6 @@ namespace JT1078.FMp4 | |||||
Start(ref writer); | Start(ref writer); | ||||
WriterFullBoxToBuffer(ref writer); | WriterFullBoxToBuffer(ref writer); | ||||
writer.WriteUInt32(TrackID); | writer.WriteUInt32(TrackID); | ||||
//todo:all the following are optional fields | |||||
End(ref writer); | End(ref writer); | ||||
} | } | ||||
} | } | ||||
@@ -21,21 +21,21 @@ namespace JT1078.FMp4 | |||||
} | } | ||||
public uint TrackID { get; set; } | public uint TrackID { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 4byte 32-26 | |||||
/// 26bit | |||||
/// </summary> | /// </summary> | ||||
public uint Reserved { get; set; } = 26; | |||||
private uint Reserved { get; set; } = 0; | |||||
/// <summary> | /// <summary> | ||||
/// 4byte 32-28 | |||||
/// 2bit | |||||
/// </summary> | /// </summary> | ||||
public uint LengthSizeOfTrafNum { get; set; } | |||||
public byte LengthSizeOfTrafNum { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 4byte 32-30 | |||||
/// 2bit | |||||
/// </summary> | /// </summary> | ||||
public uint LengthSizeOfTrunNum { get; set; } | |||||
public byte LengthSizeOfTrunNum { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 4byte 32-32 | |||||
/// 2bit | |||||
/// </summary> | /// </summary> | ||||
public uint LengthSizeOfSampleNum { get; set; } | |||||
public byte LengthSizeOfSampleNum { get; set; } | |||||
public uint NumberOfEntry { get; set; } | public uint NumberOfEntry { get; set; } | ||||
public List<TrackFragmentRandomAccessInfo> TrackFragmentRandomAccessInfos { get; set; } | public List<TrackFragmentRandomAccessInfo> TrackFragmentRandomAccessInfos { get; set; } | ||||
@@ -43,11 +43,56 @@ namespace JT1078.FMp4 | |||||
{ | { | ||||
Start(ref writer); | Start(ref writer); | ||||
WriterFullBoxToBuffer(ref writer); | WriterFullBoxToBuffer(ref writer); | ||||
//todo:tfra | |||||
writer.WriteUInt32(TrackID); | |||||
writer.WriteUInt32((uint)(LengthSizeOfSampleNum | (LengthSizeOfTrunNum << 2) | (LengthSizeOfTrafNum << 4))); | |||||
if(TrackFragmentRandomAccessInfos!=null && TrackFragmentRandomAccessInfos.Count > 0) | |||||
{ | |||||
foreach (var item in TrackFragmentRandomAccessInfos) | |||||
{ | |||||
if (Version == 1) | |||||
{ | |||||
writer.WriteUInt64(item.Time); | |||||
writer.WriteUInt64(item.MoofOffset); | |||||
} | |||||
else | |||||
{ | |||||
writer.WriteUInt32((uint)item.Time); | |||||
writer.WriteUInt32((uint)item.MoofOffset); | |||||
} | |||||
var length_size_of_traf_num = LengthSizeOfTrafNum + 1; | |||||
ControlSizeOf(ref writer, item.TrafNumber, length_size_of_traf_num); | |||||
var length_size_of_trun_num = LengthSizeOfTrunNum + 1; | |||||
ControlSizeOf(ref writer, item.TrunNumber, length_size_of_trun_num); | |||||
var length_size_of_sample_num = LengthSizeOfSampleNum + 1; | |||||
ControlSizeOf(ref writer, item.SampleNumber, length_size_of_sample_num); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
writer.WriteUInt32(0); | |||||
} | |||||
End(ref writer); | End(ref writer); | ||||
} | } | ||||
private void ControlSizeOf(ref FMp4MessagePackWriter writer,uint value,int length) | |||||
{ | |||||
switch (length) | |||||
{ | |||||
case 1: | |||||
writer.WriteByte((byte)value); | |||||
break; | |||||
case 2: | |||||
writer.WriteUInt16((ushort)value); | |||||
break; | |||||
case 3: | |||||
writer.WriteUInt24(value); | |||||
break; | |||||
case 4: | |||||
writer.WriteUInt32(value); | |||||
break; | |||||
} | |||||
} | |||||
public class TrackFragmentRandomAccessInfo | public class TrackFragmentRandomAccessInfo | ||||
{ | { | ||||
public ulong Time { get; set; } | public ulong Time { get; set; } | ||||
@@ -25,8 +25,12 @@ namespace JT1078.FMp4 | |||||
/// 可选的 | /// 可选的 | ||||
/// </summary> | /// </summary> | ||||
public int DataOffset { get; set; } | public int DataOffset { get; set; } | ||||
/// <summary> | |||||
/// 可选的 | |||||
/// </summary> | |||||
public uint FirstSampleFlags { get; set; } | public uint FirstSampleFlags { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 可选的 | |||||
/// length:SampleCount | /// length:SampleCount | ||||
/// </summary> | /// </summary> | ||||
public List<TrackRunInfo> TrackRunInfos { get; set; } | public List<TrackRunInfo> TrackRunInfos { get; set; } | ||||
@@ -35,7 +39,7 @@ namespace JT1078.FMp4 | |||||
{ | { | ||||
Start(ref writer); | Start(ref writer); | ||||
WriterFullBoxToBuffer(ref writer); | WriterFullBoxToBuffer(ref writer); | ||||
//todo: TrackRunBox | |||||
writer.WriteUInt32(SampleCount); | |||||
End(ref writer); | End(ref writer); | ||||
} | } | ||||
@@ -824,22 +824,22 @@ | |||||
</member> | </member> | ||||
<member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.Reserved"> | <member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.Reserved"> | ||||
<summary> | <summary> | ||||
4byte 32-26 | |||||
26bit | |||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.LengthSizeOfTrafNum"> | <member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.LengthSizeOfTrafNum"> | ||||
<summary> | <summary> | ||||
4byte 32-28 | |||||
2bit | |||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.LengthSizeOfTrunNum"> | <member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.LengthSizeOfTrunNum"> | ||||
<summary> | <summary> | ||||
4byte 32-30 | |||||
2bit | |||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.LengthSizeOfSampleNum"> | <member name="P:JT1078.FMp4.TrackFragmentRandomAccessBox.LengthSizeOfSampleNum"> | ||||
<summary> | <summary> | ||||
4byte 32-32 | |||||
2bit | |||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="T:JT1078.FMp4.TrackHeaderBox"> | <member name="T:JT1078.FMp4.TrackHeaderBox"> | ||||
@@ -871,8 +871,14 @@ | |||||
可选的 | 可选的 | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
<member name="P:JT1078.FMp4.TrackRunBox.FirstSampleFlags"> | |||||
<summary> | |||||
可选的 | |||||
</summary> | |||||
</member> | |||||
<member name="P:JT1078.FMp4.TrackRunBox.TrackRunInfos"> | <member name="P:JT1078.FMp4.TrackRunBox.TrackRunInfos"> | ||||
<summary> | <summary> | ||||
可选的 | |||||
length:SampleCount | length:SampleCount | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||