MPEG TS обработка пакетов в нескольких потоках

Есть приложение в котором происходит обработка транспортных пакетов и парсинг их на таблицы MPEG TS. Сейчас это реализовано так:

    private readonly Lazy<NIT_Factory> m_lazyNitFactory = new Lazy<NIT_Factory>();
    private readonly Lazy<EIT_Factory> m_lazyEitFactory = new Lazy<EIT_Factory>();
    private readonly Lazy<SDT_BAT_Factory> m_lazySdtBatFactory = new Lazy<SDT_BAT_Factory>();

    private EIT_Factory CurrentEitFactory => m_lazyEitFactory.Value;
    private SDT_BAT_Factory CurrentSdtFactory => m_lazySdtBatFactory.Value;        
    private NIT_Factory CurrentNitFactory => m_lazyNitFactory.Value;

Далее процесс разделения на пакетов на таблицы:

foreach (var tspacket in tsPackets)
        {
            ...
            else if (tspacket.Pid == (short)ReservedPids.NIT)
            {  
                CurrentNitFactory.PushTable(tspacket);
            }
            else if(tspacket.Pid == (short)ReservedPids.SDT)
            {                    
                CurrentSdtFactory.PushTable(tspacket);                   
            }
            else if(tspacket.Pid == (short)ReservedPids.EIT)
            {
                CurrentEitFactory.PushTable(tspacket);                     
            }
            ...

        }

Перечисленные выше три таблицы, наиболее "жирные" и их сборка и парсинг наиболее ресурсоёмкие. Но эти таблицы не зависят от других и изначально имеют фиксированный пид. Поэтому их можно обрабатывать каждый в отдельном потоке. Но каждый поток должен работать только с одним экземпляром класса фабрики. Очерёдность прихода пакетов в фабрику должна сохранятся в том виде в каком они пришли в этот метод. При этом желательно не менять сами фабрики. Как это лучше сделать?


Ответы (0 шт):