@@ -0,0 +1,43 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
using JT1078.Flv.MessagePack; | |||||
using JT1078.Flv.Metadata; | |||||
using JT1078.Flv.Extensions; | |||||
namespace JT1078.Flv.Test | |||||
{ | |||||
public class FlvMessagePackWriter_Amf3_Test | |||||
{ | |||||
[Fact] | |||||
public void FlvMessagePackWriter_Amf3_Test_1() { | |||||
Span<byte> buffer = new byte[1024]; | |||||
FlvMessagePackWriter flvMessagePackWriter = new FlvMessagePackWriter(buffer); | |||||
flvMessagePackWriter.WriteAmf3(new Flv.Metadata.Amf3 { | |||||
Amf3Metadatas=new List<Flv.Metadata.IAmf3Metadata> { | |||||
new Amf3Metadata_Duration{ | |||||
Value=7.22100 | |||||
}, | |||||
new Amf3Metadata_FileSize{ | |||||
Value=2005421.00000 | |||||
} | |||||
} | |||||
}); | |||||
Amf3Metadata_Duration amf3Metadata = new Amf3Metadata_Duration(); | |||||
amf3Metadata.Value = 7.22100; | |||||
var hex = amf3Metadata.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("00086475726174696F6E00401CE24DD2F1A9FC", buffer.Slice(5, hex.Length/2).ToArray().ToHexString()); | |||||
Amf3Metadata_FileSize amf3Metadata_FileSize = new Amf3Metadata_FileSize(); | |||||
amf3Metadata_FileSize.Value = 2005421.00000; | |||||
var hex1 = amf3Metadata_FileSize.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("000866696C6573697A6500413E99AD00000000", buffer.Slice(hex.Length/2+5, hex1.Length/2).ToArray().ToHexString()); | |||||
} | |||||
} | |||||
} |
@@ -17,4 +17,8 @@ | |||||
<ProjectReference Include="..\JT1078.Flv\JT1078.Flv.csproj" /> | <ProjectReference Include="..\JT1078.Flv\JT1078.Flv.csproj" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | |||||
<Folder Include="Metadata\" /> | |||||
</ItemGroup> | |||||
</Project> | </Project> |
@@ -25,5 +25,59 @@ namespace JT1078.Flv.Test.Metadata | |||||
var buffer = BitConverter.GetBytes(7.22100); | var buffer = BitConverter.GetBytes(7.22100); | ||||
//flv需要倒序的 | //flv需要倒序的 | ||||
} | } | ||||
[Fact] | |||||
public void Amf3Metadata_FileSize_Test_1_1() | |||||
{ | |||||
Amf3Metadata_FileSize amf3Metadata_FileSize = new Amf3Metadata_FileSize(); | |||||
amf3Metadata_FileSize.Value = 2005421.00000; | |||||
var hex = amf3Metadata_FileSize.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("000866696C6573697A6500413E99AD00000000", hex); | |||||
} | |||||
[Fact] | |||||
public void Amf3Metadata_FrameRate_Test_1_1() | |||||
{ | |||||
Amf3Metadata_FrameRate amf3Metadata_FrameRate = new Amf3Metadata_FrameRate(); | |||||
amf3Metadata_FrameRate.Value = 29.16667; | |||||
var hex = amf3Metadata_FrameRate.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("00096672616D657261746500403D2AAAE297396D", hex); | |||||
} | |||||
[Fact] | |||||
public void Amf3Metadata_Height_Test_1_1() | |||||
{ | |||||
Amf3Metadata_Height amf3Metadata_Height = new Amf3Metadata_Height(); | |||||
amf3Metadata_Height.Value = 960.00000; | |||||
var hex = amf3Metadata_Height.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("000668656967687400408E000000000000", hex); | |||||
} | |||||
[Fact] | |||||
public void Amf3Metadata_VideoCodecId_Test_1_1() | |||||
{ | |||||
Amf3Metadata_VideoCodecId amf3Metadata_VideoCodecId = new Amf3Metadata_VideoCodecId(); | |||||
amf3Metadata_VideoCodecId.Value = 7.00000; | |||||
var hex = amf3Metadata_VideoCodecId.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("000C766964656F636F646563696400401C000000000000", hex); | |||||
} | |||||
[Fact] | |||||
public void Amf3Metadata_VideoDataRate_Test_1_1() | |||||
{ | |||||
Amf3Metadata_VideoDataRate amf3Metadata_VideoDataRate = new Amf3Metadata_VideoDataRate(); | |||||
amf3Metadata_VideoDataRate.Value = 0.00000; | |||||
var hex = amf3Metadata_VideoDataRate.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("000D766964656F6461746172617465000000000000000000", hex); | |||||
} | |||||
[Fact] | |||||
public void Amf3Metadata_Width_Test_1_1() | |||||
{ | |||||
Amf3Metadata_Width amf3Metadata_Width = new Amf3Metadata_Width(); | |||||
amf3Metadata_Width.Value = 544.00000; | |||||
var hex = amf3Metadata_Width.ToBuffer().ToArray().ToHexString(); | |||||
Assert.Equal("00057769647468004081000000000000", hex); | |||||
} | |||||
} | } | ||||
} | } |
@@ -1,8 +1,10 @@ | |||||
using JT1078.Flv.Metadata; | using JT1078.Flv.Metadata; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Runtime.CompilerServices; | |||||
using System.Text; | using System.Text; | ||||
[assembly: InternalsVisibleTo("JT1078.Flv.Test")] | |||||
namespace JT1078.Flv.MessagePack | namespace JT1078.Flv.MessagePack | ||||
{ | { | ||||
ref partial struct FlvMessagePackWriter | ref partial struct FlvMessagePackWriter | ||||
@@ -2,6 +2,7 @@ | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Buffers.Binary; | using System.Buffers.Binary; | ||||
using JT1078.Flv.Extensions; | |||||
namespace JT1078.Flv.Metadata | namespace JT1078.Flv.Metadata | ||||
{ | { | ||||
@@ -17,9 +18,9 @@ namespace JT1078.Flv.Metadata | |||||
Span<byte> tmp = new byte[2+8+1+8]; | Span<byte> tmp = new byte[2+8+1+8]; | ||||
var b1 = Encoding.ASCII.GetBytes(FieldName); | var b1 = Encoding.ASCII.GetBytes(FieldName); | ||||
BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | ||||
b1.CopyTo(tmp.Slice(4)); | |||||
tmp[11] = DataType; | |||||
BinaryPrimitives.WriteInt64BigEndian(tmp.Slice(12), (long)Value); | |||||
b1.CopyTo(tmp.Slice(2)); | |||||
tmp[10] = DataType; | |||||
this.WriteDouble(tmp.Slice(11)); | |||||
return tmp; | return tmp; | ||||
} | } | ||||
} | } | ||||
@@ -2,6 +2,7 @@ | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Buffers.Binary; | using System.Buffers.Binary; | ||||
using JT1078.Flv.Extensions; | |||||
namespace JT1078.Flv.Metadata | namespace JT1078.Flv.Metadata | ||||
{ | { | ||||
@@ -14,12 +15,12 @@ namespace JT1078.Flv.Metadata | |||||
public ReadOnlySpan<byte> ToBuffer() | public ReadOnlySpan<byte> ToBuffer() | ||||
{ | { | ||||
Span<byte> tmp = new byte[4+9+1+8]; | |||||
Span<byte> tmp = new byte[2+9+1+8]; | |||||
var b1 = Encoding.ASCII.GetBytes(FieldName); | var b1 = Encoding.ASCII.GetBytes(FieldName); | ||||
BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | ||||
b1.CopyTo(tmp.Slice(4)); | |||||
b1.CopyTo(tmp.Slice(2)); | |||||
tmp[11] = DataType; | tmp[11] = DataType; | ||||
BinaryPrimitives.WriteInt64BigEndian(tmp.Slice(12), (long)Value); | |||||
this.WriteDouble(tmp.Slice(12)); | |||||
return tmp; | return tmp; | ||||
} | } | ||||
} | } | ||||
@@ -2,6 +2,7 @@ | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Buffers.Binary; | using System.Buffers.Binary; | ||||
using JT1078.Flv.Extensions; | |||||
namespace JT1078.Flv.Metadata | namespace JT1078.Flv.Metadata | ||||
{ | { | ||||
@@ -14,12 +15,12 @@ namespace JT1078.Flv.Metadata | |||||
public ReadOnlySpan<byte> ToBuffer() | public ReadOnlySpan<byte> ToBuffer() | ||||
{ | { | ||||
Span<byte> tmp = new byte[4+6+1+8]; | |||||
Span<byte> tmp = new byte[2+6+1+8]; | |||||
var b1 = Encoding.ASCII.GetBytes(FieldName); | var b1 = Encoding.ASCII.GetBytes(FieldName); | ||||
BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | ||||
b1.CopyTo(tmp.Slice(3)); | |||||
tmp[11] = DataType; | |||||
BinaryPrimitives.WriteInt64BigEndian(tmp.Slice(12), (long)Value); | |||||
b1.CopyTo(tmp.Slice(2)); | |||||
tmp[8] = DataType; | |||||
this.WriteDouble(tmp.Slice(9)); | |||||
return tmp; | return tmp; | ||||
} | } | ||||
} | } | ||||
@@ -2,6 +2,7 @@ | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Buffers.Binary; | using System.Buffers.Binary; | ||||
using JT1078.Flv.Extensions; | |||||
namespace JT1078.Flv.Metadata | namespace JT1078.Flv.Metadata | ||||
{ | { | ||||
@@ -14,12 +15,12 @@ namespace JT1078.Flv.Metadata | |||||
public ReadOnlySpan<byte> ToBuffer() | public ReadOnlySpan<byte> ToBuffer() | ||||
{ | { | ||||
Span<byte> tmp = new byte[4+12+1+8]; | |||||
Span<byte> tmp = new byte[2+12+1+8]; | |||||
var b1 = Encoding.ASCII.GetBytes(FieldName); | var b1 = Encoding.ASCII.GetBytes(FieldName); | ||||
BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | ||||
b1.CopyTo(tmp.Slice(4)); | |||||
tmp[11] = DataType; | |||||
BinaryPrimitives.WriteInt64BigEndian(tmp.Slice(12), (long)Value); | |||||
b1.CopyTo(tmp.Slice(2)); | |||||
tmp[14] = DataType; | |||||
this.WriteDouble(tmp.Slice(15)); | |||||
return tmp; | return tmp; | ||||
} | } | ||||
} | } | ||||
@@ -2,6 +2,7 @@ | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Buffers.Binary; | using System.Buffers.Binary; | ||||
using JT1078.Flv.Extensions; | |||||
namespace JT1078.Flv.Metadata | namespace JT1078.Flv.Metadata | ||||
{ | { | ||||
@@ -14,12 +15,12 @@ namespace JT1078.Flv.Metadata | |||||
public ReadOnlySpan<byte> ToBuffer() | public ReadOnlySpan<byte> ToBuffer() | ||||
{ | { | ||||
Span<byte> tmp = new byte[4+13+1+8]; | |||||
Span<byte> tmp = new byte[2+13+1+8]; | |||||
var b1 = Encoding.ASCII.GetBytes(FieldName); | var b1 = Encoding.ASCII.GetBytes(FieldName); | ||||
BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | ||||
b1.CopyTo(tmp.Slice(4)); | |||||
tmp[11] = DataType; | |||||
BinaryPrimitives.WriteInt64BigEndian(tmp.Slice(12), (long)Value); | |||||
b1.CopyTo(tmp.Slice(2)); | |||||
tmp[15] = DataType; | |||||
this.WriteDouble(tmp.Slice(16)); | |||||
return tmp; | return tmp; | ||||
} | } | ||||
} | } | ||||
@@ -2,6 +2,7 @@ | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Buffers.Binary; | using System.Buffers.Binary; | ||||
using JT1078.Flv.Extensions; | |||||
namespace JT1078.Flv.Metadata | namespace JT1078.Flv.Metadata | ||||
{ | { | ||||
@@ -14,12 +15,12 @@ namespace JT1078.Flv.Metadata | |||||
public ReadOnlySpan<byte> ToBuffer() | public ReadOnlySpan<byte> ToBuffer() | ||||
{ | { | ||||
Span<byte> tmp = new byte[4+5+1+8]; | |||||
Span<byte> tmp = new byte[2+5+1+8]; | |||||
var b1 = Encoding.ASCII.GetBytes(FieldName); | var b1 = Encoding.ASCII.GetBytes(FieldName); | ||||
BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | BinaryPrimitives.WriteUInt16BigEndian(tmp, (ushort)b1.Length); | ||||
b1.CopyTo(tmp.Slice(3)); | |||||
tmp[11] = DataType; | |||||
BinaryPrimitives.WriteInt64BigEndian(tmp.Slice(12), (long)Value); | |||||
b1.CopyTo(tmp.Slice(2)); | |||||
tmp[7] = DataType; | |||||
this.WriteDouble(tmp.Slice(8)); | |||||
return tmp; | return tmp; | ||||
} | } | ||||
} | } | ||||