Browse Source

修改sdt和pes包

tags/v1.1.0
SmallChi(Koike) 5 years ago
parent
commit
f890b02681
5 changed files with 62 additions and 9 deletions
  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 View File

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

[Fact]
public void ToBufferTest3()
{


+ 3
- 3
src/JT1078.Hls.Test/TS_SDT_Package_Test.cs View File

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


+ 5
- 6
src/JT1078.Hls/Descriptors/TS_SDT_Service_Descriptor.cs View File

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


+ 47
- 0
src/JT1078.Hls/TSEncoder.cs View File

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

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

@@ -24,8 +25,54 @@ namespace JT1078.Hls
{
private const int FiexdSegmentPESLength = 184;
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> 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)
{
byte[] buffer = TSArrayPool.Rent(minBufferSize);


+ 2
- 0
src/JT1078.Hls/TS_AdaptationInfo.cs View File

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


Loading…
Cancel
Save