67 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|