skyscraper8/skyscraper8/ThreemediaOtt/ThreemediaSession.cs
feyris-tan 124bc001aa
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 1m14s
Began parsing Threemedia OTT fragments.
2026-06-28 12:37:47 +02:00

67 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using skyscraper8.Ietf.FLUTE;
namespace skyscraper8.ThreemediaOtt
{
internal class ThreemediaSession : IDisposable
{
public void IngestPacket(LctFrame lctFrame)
{
int numFragments = lctFrame.LctHeader.CdsCompletionPollRequest.PollSequence;
if (fragments == null)
fragments = new ThreemediaContentFragment[numFragments];
int currentFragment = (int)lctFrame.LctHeader.TransportObjectIdentifier;
currentFragment--;
if (fragments[currentFragment] == null)
fragments[currentFragment] = new ThreemediaContentFragment();
fragments[currentFragment].IngestPacket(lctFrame);
}
private ThreemediaContentFragment[] fragments;
public bool IsComplete()
{
if (fragments == null)
return false;
for (int i = 0; i < fragments.Length; i++)
{
if (fragments[i] == null)
return false;
if (!fragments[i].IsComplete())
return false;
}
return true;
}
public void Dispose()
{
if (fragments != null)
{
for (int i = 0; i < fragments.Length; i++)
{
fragments[i].Dispose();
fragments[i] = null;
}
}
fragments = null;
}
public ThreemediaSessionStream CreateStream()
{
ThreemediaContentFragmentStream[] fragmentStreams = Array.ConvertAll(fragments, (x) => x.CreateStream());
ThreemediaSessionStream stream = new ThreemediaSessionStream(fragmentStreams);
return stream;
}
}
}