skyscraper8/skyscraper8/GS/Stid135BbFrameReader.cs
feyris-tan 1e9b321bd7
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 1m30s
BBframeDeencapsulator version 4 will hopefully save the day, and not break CI again.
2025-10-16 13:33:38 +02:00

61 lines
1.4 KiB
C#

using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using skyscraper5.Dvb.DataBroadcasting;
namespace skyscraper8.GSE
{
internal class Stid135BbFrameReader : ITsPacketProcessor
{
private IBbframeDeencapsulator deencapsulator;
public Stid135BbFrameReader(IMultiprotocolEncapsulationEventHandler mpeEventHandler, IBbframeDeencapsulator deencapsulator = null)
{
if (deencapsulator == null)
deencapsulator = new BbframeDeencapsulator3(mpeEventHandler);
this.deencapsulator = deencapsulator;
}
private long packetsRecovered;
private long packetsLost;
private MemoryStream outbuf;
private bool annoncementDone;
public void PushPacket(TsPacket packet)
{
byte[] packets = packet.RawPacket;
int pid = packets[1];
pid &= 0x01f;
pid <<= 8;
pid |= packets[2];
if (pid != 0x010e)
return;
if (outbuf == null)
outbuf = new MemoryStream();
if ((packets[8] & 0xff) == 0xb8)
{
if (outbuf.Length > 0)
{
byte[] completeBbframe = outbuf.ToArray();
deencapsulator.PushPacket(completeBbframe);
outbuf = new MemoryStream();
}
//Start indicaator
outbuf.Write(packets, 8, packets[7]);
}
else
{
outbuf.Write(packets, 9, packets[7] - 1);
}
}
}
}