瀏覽代碼

修改sdt和pes包

tags/v1.1.0
SmallChi(Koike) 5 年之前
父節點
當前提交
f890b02681
共有 5 個文件被更改,包括 62 次插入9 次删除
  1. +5
    -0
      src/JT1078.Hls.Test/TS_Package_Test.cs
  2. +3
    -3
      src/JT1078.Hls.Test/TS_SDT_Package_Test.cs
  3. +5
    -6
      src/JT1078.Hls/Descriptors/TS_SDT_Service_Descriptor.cs
  4. +47
    -0
      src/JT1078.Hls/TSEncoder.cs
  5. +2
    -0
      src/JT1078.Hls/TS_AdaptationInfo.cs

+ 5
- 0
src/JT1078.Hls.Test/TS_Package_Test.cs 查看文件

@@ -37,7 +37,11 @@ namespace JT1078.Hls.Test
JT1078Package fullpackage = JT1078Serializer.Merge(package); JT1078Package fullpackage = JT1078Serializer.Merge(package);
if (fullpackage != null) if (fullpackage != null)
{ {
var sdt = tSEncoder.CreateSDT(fullpackage);
string sdtHEX = sdt.ToHexString();
fileStream.Write(sdt);
var pat = tSEncoder.CreatePAT(fullpackage); var pat = tSEncoder.CreatePAT(fullpackage);
string patHEX = pat.ToHexString();
fileStream.Write(pat); fileStream.Write(pat);
var pmt = tSEncoder.CreatePMT(fullpackage); var pmt = tSEncoder.CreatePMT(fullpackage);
fileStream.Write(pmt); fileStream.Write(pmt);
@@ -56,6 +60,7 @@ namespace JT1078.Hls.Test
fileStream?.Dispose(); fileStream?.Dispose();
} }
} }

[Fact] [Fact]
public void ToBufferTest3() public void ToBufferTest3()
{ {


+ 3
- 3
src/JT1078.Hls.Test/TS_SDT_Package_Test.cs 查看文件

@@ -37,10 +37,10 @@ namespace JT1078.Hls.Test
FreeCAMode = 0x00, FreeCAMode = 0x00,
Descriptors = new List<Descriptors.TS_SDT_Service_Descriptor> { Descriptors = new List<Descriptors.TS_SDT_Service_Descriptor> {
new Descriptors.TS_SDT_Service_Descriptor{ new Descriptors.TS_SDT_Service_Descriptor{
DescriptorTag=0x48, Tag=0x48,
ServiceType= TS_SDT_Service_Descriptor_ServiceType.Êý×ÖµçÊÓÒµÎñ, ServiceType= TS_SDT_Service_Descriptor_ServiceType.Êý×ÖµçÊÓÒµÎñ,
ServiceProvider="FFmpeg", ServiceProvider="FFmpeg",
ServiceName="Service01" ServiceName="Service01"
} }
} }
}) ; }) ;


+ 5
- 6
src/JT1078.Hls/Descriptors/TS_SDT_Service_Descriptor.cs 查看文件

@@ -11,18 +11,17 @@ namespace JT1078.Hls.Descriptors
/// <summary> /// <summary>
/// 业务描述服务描述 /// 业务描述服务描述
/// </summary> /// </summary>
public class TS_SDT_Service_Descriptor : ITSMessagePackFormatter public class TS_SDT_Service_Descriptor : DescriptorBase
{ {
/// <summary> /// <summary>
/// 业务描述符 /// 业务描述符
/// 8bit /// 8bit
/// </summary> /// </summary>
public byte DescriptorTag { get; set; } = 0x48; public override byte Tag { get; set; } = 0x48;
/// <summary> /// <summary>
///
/// 8bit /// 8bit
/// </summary> /// </summary>
internal byte DescriptorLength { get; set; } public override byte Length { get; set; }
/// <summary> /// <summary>
/// ///
/// 8bit /// 8bit
@@ -48,9 +47,9 @@ namespace JT1078.Hls.Descriptors
/// ServiceNameLenth /// ServiceNameLenth
/// </summary> /// </summary>
internal string ServiceName { get; set; } internal string ServiceName { get; set; }
public void ToBuffer(ref TSMessagePackWriter writer) public override void ToBuffer(ref TSMessagePackWriter writer)
{ {
writer.WriteByte(DescriptorTag); writer.WriteByte(Tag);
writer.Skip(1,out var position); writer.Skip(1,out var position);
writer.WriteByte((byte)ServiceType); writer.WriteByte((byte)ServiceType);
writer.Skip(1, out var serviceProviderLengthPosition); writer.Skip(1, out var serviceProviderLengthPosition);


+ 47
- 0
src/JT1078.Hls/TSEncoder.cs 查看文件

@@ -10,6 +10,7 @@ using JT1078.Hls.MessagePack;
using JT1078.Hls.Enums; using JT1078.Hls.Enums;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Security.Cryptography; using System.Security.Cryptography;
using JT1078.Hls.Descriptors;


[assembly: InternalsVisibleTo("JT1078.Hls.Test")] [assembly: InternalsVisibleTo("JT1078.Hls.Test")]


@@ -24,8 +25,54 @@ namespace JT1078.Hls
{ {
private const int FiexdSegmentPESLength = 184; private const int FiexdSegmentPESLength = 184;
private const int FiexdTSLength = 188; private const int FiexdTSLength = 188;
private const string ServiceProvider = "JTT1078";
private const string ServiceName = "Koike&TK";
private ConcurrentDictionary<string, byte> VideoCounter = new ConcurrentDictionary<string, byte>(); private ConcurrentDictionary<string, byte> VideoCounter = new ConcurrentDictionary<string, byte>();
//private ConcurrentDictionary<string, byte> AudioCounter = new ConcurrentDictionary<string, byte>(); //private ConcurrentDictionary<string, byte> AudioCounter = new ConcurrentDictionary<string, byte>();
public byte[] CreateSDT(JT1078Package jt1078Package, int minBufferSize = 188)
{
byte[] buffer = TSArrayPool.Rent(minBufferSize);
try
{
TS_SDT_Package package = new TS_SDT_Package();
package.Header = new TS_Header();
package.Header.PID = 0x0011;
package.Header.AdaptationFieldControl = AdaptationFieldControl.无自适应域_仅含有效负载;
package.Header.ContinuityCounter = 0;
package.TableId = 0x42;
package.TransportStreamId = 0x0001;
package.VersionNumber = 0;
package.CurrentNextIndicator = 0x01;
package.SectionNumber = 0x00;
package.LastSectionNumber = 0x00;
package.OriginalNetworkId = 0xFF01;
package.Services = new List<TS_SDT_Service>();
package.Services.Add(new TS_SDT_Service()
{
ServiceId = 0x0001,
EITScheduleFlag = 0x00,
EITPresentFollowingFlag = 0x00,
RunningStatus = TS_SDT_Service_RunningStatus.运行,
FreeCAMode = 0x00,
Descriptors = new List<TS_SDT_Service_Descriptor>
{
new TS_SDT_Service_Descriptor{
Tag=0x48,
ServiceType= TS_SDT_Service_Descriptor_ServiceType.数字电视业务,
ServiceProvider=ServiceProvider,
ServiceName=ServiceName
}
}
});
TSMessagePackWriter writer = new TSMessagePackWriter(buffer);
package.ToBuffer(ref writer);
return writer.FlushAndGetArray();
}
finally
{
TSArrayPool.Return(buffer);
}
}
public byte[] CreatePAT(JT1078Package jt1078Package, int minBufferSize = 188) public byte[] CreatePAT(JT1078Package jt1078Package, int minBufferSize = 188)
{ {
byte[] buffer = TSArrayPool.Rent(minBufferSize); byte[] buffer = TSArrayPool.Rent(minBufferSize);


+ 2
- 0
src/JT1078.Hls/TS_AdaptationInfo.cs 查看文件

@@ -31,6 +31,8 @@ namespace JT1078.Hls
if (PCRIncluded== PCRInclude.包含) if (PCRIncluded== PCRInclude.包含)
{ {
writer.WriteInt5(PCR); writer.WriteInt5(PCR);
#warning PCR 0????
writer.WriteByte(0);
} }
if (FillSize > 0) if (FillSize > 0)
{ {


||||||
x
 
000:0
Loading…
取消
儲存