浏览代码

组装测试fmp4盒子

pull/13/head
SmallChi(Koike) 4 年前
父节点
当前提交
42119c8700
共有 7 个文件被更改,包括 185 次插入14 次删除
  1. +42
    -0
      src/JT1078.FMp4.Test/Boxs/MovieExtendsBox_Test.cs
  2. +109
    -3
      src/JT1078.FMp4.Test/FMp4Box_Test.cs
  3. +1
    -1
      src/JT1078.FMp4/Boxs/TrackFragmentBaseMediaDecodeTimeBox.cs
  4. +4
    -4
      src/JT1078.FMp4/Boxs/TrackFragmentBox.cs
  5. +6
    -6
      src/JT1078.FMp4/Boxs/TrackFragmentHeaderBox.cs
  6. +1
    -0
      src/JT1078.FMp4/Boxs/TrackFragmentRandomAccessBox.cs
  7. +22
    -0
      src/JT1078.FMp4/JT1078.FMp4.xml

+ 42
- 0
src/JT1078.FMp4.Test/Boxs/MovieExtendsBox_Test.cs 查看文件

@@ -0,0 +1,42 @@
using JT1078.FMp4.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using JT1078.Protocol.Extensions;

namespace JT1078.FMp4.Test.Boxs
{
public class MovieExtendsBox_Test
{
/// <summary>
/// 使用doc/video/fragmented_demo.mp4
/// </summary>
[Fact]
public void Test1()
{
//000000286d7665780000002074726578000000000000000100000001000000000000000000000000
//00 00 00 28
//6d 76 65 78
//00 00 00 20
//74 72 65 78
//00
//00 00 00
//00 00 00 01
//00 00 00 01
//00 00 00 00
//00 00 00 00
//00 00 00 00
MovieExtendsBox movieExtendsBox = new MovieExtendsBox();
movieExtendsBox.TrackExtendsBoxs = new List<TrackExtendsBox>();
TrackExtendsBox trackExtendsBox1 = new TrackExtendsBox();
trackExtendsBox1.TrackID = 0x01;
trackExtendsBox1.DefaultSampleDescriptionIndex = 0x01;
movieExtendsBox.TrackExtendsBoxs.Add(trackExtendsBox1);
FMp4MessagePackWriter writer = new MessagePack.FMp4MessagePackWriter(new byte[0x00000028]);
movieExtendsBox.ToBuffer(ref writer);
var hex = writer.FlushAndGetArray().ToHexString();
Assert.Equal("000000286d7665780000002074726578000000000000000100000001000000000000000000000000".ToUpper(), hex);
}
}
}

+ 109
- 3
src/JT1078.FMp4.Test/FMp4Box_Test.cs 查看文件

@@ -80,8 +80,7 @@ namespace JT1078.FMp4.Test
/// </summary>
[Fact(DisplayName = "moov_trak_mdia_mdhd")]
public void moov_trak_mdia_mdhd_test()
{
{
MediaHeaderBox mediaHeaderBox = new MediaHeaderBox(0, 0);
mediaHeaderBox.CreationTime = 0;
mediaHeaderBox.ModificationTime = 0;
@@ -214,7 +213,114 @@ namespace JT1078.FMp4.Test
[Fact(DisplayName = "moov_mvex")]
public void trak_mvex_test()
{
//todo:moov_mvex
//moov->mvex
MovieExtendsBox movieExtendsBox = new MovieExtendsBox();
//moov->mvex->trex
movieExtendsBox.TrackExtendsBoxs = new List<TrackExtendsBox>();
TrackExtendsBox trackExtendsBox1 = new TrackExtendsBox();
trackExtendsBox1.TrackID = 0x01;
trackExtendsBox1.DefaultSampleDescriptionIndex = 0x01;
movieExtendsBox.TrackExtendsBoxs.Add(trackExtendsBox1);
FMp4MessagePackWriter writer = new MessagePack.FMp4MessagePackWriter(new byte[0x00000028]);
movieExtendsBox.ToBuffer(ref writer);
var hex = writer.FlushAndGetArray().ToHexString();
Assert.Equal("000000286d7665780000002074726578000000000000000100000001000000000000000000000000".ToUpper(), hex);
}
/// <summary>
/// 使用doc/video/fragmented_demo.mp4
/// </summary>
[Fact(DisplayName = "moov_udta")]
public void moov_udta_test()
{
//todo:moov->udta
}
/// <summary>
/// 使用doc/video/fragmented_demo.mp4
/// </summary>
[Fact(DisplayName = "moof")]
public void moof_test()
{
//000006d8747261660000002474666864000000390000000100000000000002fc0000bb80000066ee01010000
//00 00 06 d8
//74 72 61 66
//00 00 00 24
//74 66 68 64
//00
//00 00 39
//00 00 00 01
//忽略以下可选数据
//00 00 00 00 00 00 02 fc
//00 00 bb 80
//00 00 66 ee
//01 01 00 00
//moof
MovieFragmentBox movieFragmentBox = new MovieFragmentBox();
//moof->mfhd
movieFragmentBox.MovieFragmentHeaderBox = new MovieFragmentHeaderBox();
movieFragmentBox.MovieFragmentHeaderBox.SequenceNumber = 0x01;
//moof->traf
movieFragmentBox.TrackFragmentBox = new TrackFragmentBox();
movieFragmentBox.TrackFragmentBox.TrackFragmentHeaderBox = new TrackFragmentHeaderBox();
movieFragmentBox.TrackFragmentBox.TrackFragmentHeaderBox.TrackID = 0x01;
//moof->tfdt
movieFragmentBox.TrackFragmentBox.TrackFragmentBaseMediaDecodeTimeBox = new TrackFragmentBaseMediaDecodeTimeBox();
//todo:moof->trun
movieFragmentBox.TrackFragmentBox.TrackRunBox = new TrackRunBox(0, 0x00000305);
}
/// <summary>
/// 使用doc/video/fragmented_demo.mp4
/// </summary>
[Fact(DisplayName = "mdat")]
public void mdat_test()
{
//todo:mdat
MediaDataBox mediaDataBox = new MediaDataBox();
}
/// <summary>
/// 使用doc/video/fragmented_demo.mp4
/// </summary>
[Fact(DisplayName = "mfra")]
public void mfra_test()
{
//000000436d6672610000002b7466726101000000000000010000000000000001000000000000000000000000000002fc010101000000106d66726f0000000000000043
//00 00 00 43
//6d 66 72 61
//00 00 00 2b
//74 66 72 61
//01
//00 00 00
//00 00 00 01
//00 00 00 00
//00 00 00 01
//00 00 00 00 00 00 00 00
//00 00 00 00 00 00 02 fc
//01 01 01
//00 00 00 10
//6d 66 72 6f
//00
//00 00 00
//00 00 00 43
//mfra
MovieFragmentRandomAccessBox movieFragmentRandomAccessBox = new MovieFragmentRandomAccessBox();
//mfra->tfra
movieFragmentRandomAccessBox.TrackFragmentRandomAccessBox = new TrackFragmentRandomAccessBox(1);
movieFragmentRandomAccessBox.TrackFragmentRandomAccessBox.TrackID = 0x01;
movieFragmentRandomAccessBox.TrackFragmentRandomAccessBox.TrackFragmentRandomAccessInfos = new List<TrackFragmentRandomAccessBox.TrackFragmentRandomAccessInfo>();
TrackFragmentRandomAccessBox.TrackFragmentRandomAccessInfo trackFragmentRandomAccessInfo1 = new TrackFragmentRandomAccessBox.TrackFragmentRandomAccessInfo();
trackFragmentRandomAccessInfo1.Time = 0;
trackFragmentRandomAccessInfo1.MoofOffset = 0x00000000000002fc;
trackFragmentRandomAccessInfo1.TrafNumber = 0x01;
trackFragmentRandomAccessInfo1.TrunNumber = 0x01;
trackFragmentRandomAccessInfo1.SampleNumber = 0x01;
movieFragmentRandomAccessBox.TrackFragmentRandomAccessBox.TrackFragmentRandomAccessInfos.Add(trackFragmentRandomAccessInfo1);
//mfra->mfro
movieFragmentRandomAccessBox.MovieFragmentRandomAccessOffsetBox = new MovieFragmentRandomAccessOffsetBox(0);
movieFragmentRandomAccessBox.MovieFragmentRandomAccessOffsetBox.MfraSize = 0x00000043;
FMp4MessagePackWriter writer = new MessagePack.FMp4MessagePackWriter(new byte[0x00000043]);
movieFragmentRandomAccessBox.ToBuffer(ref writer);
var hex = writer.FlushAndGetArray().ToHexString();
Assert.Equal("000000436d6672610000002b7466726101000000000000010000000000000001000000000000000000000000000002fc010101000000106d66726f0000000000000043".ToUpper(), hex);
}
}
}

+ 1
- 1
src/JT1078.FMp4/Boxs/TrackFragmentBaseMediaDecodeTimeBox.cs 查看文件

@@ -16,7 +16,7 @@ namespace JT1078.FMp4
/// </summary>
/// <param name="version"></param>
/// <param name="flags"></param>
public TrackFragmentBaseMediaDecodeTimeBox(byte version, uint flags=0) : base("tfdt", version, flags)
public TrackFragmentBaseMediaDecodeTimeBox(byte version=1, uint flags=0) : base("tfdt", version, flags)
{
}
public uint BaseMediaDecodeTime { get; set; }


+ 4
- 4
src/JT1078.FMp4/Boxs/TrackFragmentBox.cs 查看文件

@@ -52,14 +52,14 @@ namespace JT1078.FMp4
if (SampleDependencyTypeBox != null)
{
SampleDependencyTypeBox.ToBuffer(ref writer);
}
if (TrackFragmentBaseMediaDecodeTimeBox != null)
{
TrackFragmentBaseMediaDecodeTimeBox.ToBuffer(ref writer);
}
if (TrackRunBox != null)
{
TrackRunBox.ToBuffer(ref writer);
}
if (TrackFragmentBaseMediaDecodeTimeBox != null)
{
TrackFragmentBaseMediaDecodeTimeBox.ToBuffer(ref writer);
}
if (SampleToGroupBox != null)
{


+ 6
- 6
src/JT1078.FMp4/Boxs/TrackFragmentHeaderBox.cs 查看文件

@@ -23,18 +23,18 @@ namespace JT1078.FMp4
/// tfhd
/// </summary>
/// <param name="flags"></param>
public TrackFragmentHeaderBox(uint flags) : this(0, flags)
public TrackFragmentHeaderBox(uint flags=0) : this(0, flags)
{
}

public uint TrackID { get; set; }

#region all the following are optional fields
public ulong BaseDataOffset { get; set; }
public uint SampleDescriptionIndex { get; set; }
public uint DefaultSampleDuration { get; set; }
public uint DefaultSampleSize { get; set; }
public uint DefaultSampleFlags { get; set; }
public ulong? BaseDataOffset { get; set; }
public uint? SampleDescriptionIndex { get; set; }
public uint? DefaultSampleDuration { get; set; }
public uint? DefaultSampleSize { get; set; }
public uint? DefaultSampleFlags { get; set; }
#endregion
public void ToBuffer(ref FMp4MessagePackWriter writer)
{


+ 1
- 0
src/JT1078.FMp4/Boxs/TrackFragmentRandomAccessBox.cs 查看文件

@@ -47,6 +47,7 @@ namespace JT1078.FMp4
writer.WriteUInt32((uint)(LengthSizeOfSampleNum | (LengthSizeOfTrunNum << 2) | (LengthSizeOfTrafNum << 4)));
if(TrackFragmentRandomAccessInfos!=null && TrackFragmentRandomAccessInfos.Count > 0)
{
writer.WriteUInt32((uint)TrackFragmentRandomAccessInfos.Count);
foreach (var item in TrackFragmentRandomAccessInfos)
{
if (Version == 1)


+ 22
- 0
src/JT1078.FMp4/JT1078.FMp4.xml 查看文件

@@ -377,6 +377,16 @@
mvex
</summary>
</member>
<member name="P:JT1078.FMp4.MovieExtendsBox.MovieExtendsHeaderBox">
<summary>
mehd
</summary>
</member>
<member name="P:JT1078.FMp4.MovieExtendsBox.TrackExtendsBoxs">
<summary>
trex
</summary>
</member>
<member name="T:JT1078.FMp4.MovieExtendsHeaderBox">
<summary>
mehd
@@ -763,6 +773,18 @@
mdia
</summary>
</member>
<member name="T:JT1078.FMp4.TrackExtendsBox">
<summary>
trex
</summary>
</member>
<member name="M:JT1078.FMp4.TrackExtendsBox.#ctor(System.Byte,System.UInt32)">
<summary>
trex
</summary>
<param name="version"></param>
<param name="flags"></param>
</member>
<member name="T:JT1078.FMp4.TrackFragmentBaseMediaDecodeTimeBox">
<summary>
tfdt


正在加载...
取消
保存