Example #1
0
        public EITManager GetEITManager(long freq)
        {
            if (_eitManagers.ContainsKey(freq))
            {
                return(_eitManagers[freq]);
            }

            var eitManager = new EITManager(_log);

            _eitManagers.Add(freq, eitManager);

            return(eitManager);
        }
Example #2
0
        public static void AnalyzeMPEGTSPackets(string path, bool includeEIT = true)
        {
            var logger = new FileLoggingService(LoggingLevelEnum.Debug);

            logger.LogFilename = "Log.log";

            Console.Write($"Reading ....... ");

            var bytes   = LoadBytesFromFile(path);
            var packets = MPEGTransportStreamPacket.Parse(bytes);

            Console.WriteLine($" {packets.Count} packets found");

            var packetsByPID = new SortedDictionary <long, List <MPEGTransportStreamPacket> >();

            foreach (var packet in packets)
            {
                if (!packetsByPID.ContainsKey(packet.PID))
                {
                    packetsByPID.Add(packet.PID, new List <MPEGTransportStreamPacket>());
                }

                packetsByPID[packet.PID].Add(packet);
            }

            Console.WriteLine();
            Console.WriteLine($"PID:             Packets count");
            Console.WriteLine("-------------------------------");

            SDTTable sDTTable = null;
            PSITable psiTable = null;

            foreach (var kvp in packetsByPID)
            {
                Console.WriteLine($"{kvp.Key,6} ({"0x" + Convert.ToString(kvp.Key, 16),6}): {kvp.Value.Count,8}");
            }

            if (packetsByPID.ContainsKey(17))
            {
                Console.WriteLine();
                Console.WriteLine($"Service Description Table(SDT):");
                Console.WriteLine($"------------------------------");

                sDTTable = DVBTTable.CreateFromPackets <SDTTable>(packetsByPID[17], 17);  // PID 0x11, Service Description Table (SDT)

                if (sDTTable != null)
                {
                    sDTTable.WriteToConsole();
                }
            }

            if (packetsByPID.ContainsKey(16))
            {
                Console.WriteLine();
                Console.WriteLine($"Network Information Table (NIT):");
                Console.WriteLine($"--------------------------------");


                var niTable = DVBTTable.CreateFromPackets <NITTable>(packetsByPID[16], 16);

                if (niTable != null)
                {
                    niTable.WriteToConsole();
                }
            }

            if (packetsByPID.ContainsKey(0))
            {
                Console.WriteLine();
                Console.WriteLine($"Program Specific Information(PSI):");
                Console.WriteLine($"----------------------------------");

                psiTable = DVBTTable.CreateFromPackets <PSITable>(packetsByPID[0], 0);

                if (psiTable != null)
                {
                    psiTable.WriteToConsole();
                }
            }

            if ((psiTable != null) &&
                (sDTTable != null))
            {
                Console.WriteLine();
                Console.WriteLine($"Program Map Table (PMT):");
                Console.WriteLine($"----------------------------------");
                Console.WriteLine();

                var servicesMapPIDs = MPEGTransportStreamPacket.GetAvailableServicesMapPIDs(sDTTable, psiTable);

                Console.WriteLine($"{"Program name".PadRight(40,' '),40} {"Program number",14} {"     PID",8}");
                Console.WriteLine($"{"------------".PadRight(40,' '),40} {"--------------",14} {"--------"}");

                // scan PMT for each program number
                foreach (var kvp in servicesMapPIDs)
                {
                    Console.WriteLine($"{kvp.Key.ServiceName.PadRight(40, ' ')} {kvp.Key.ProgramNumber,14} {kvp.Value,8}");

                    if (packetsByPID.ContainsKey(Convert.ToInt32(kvp.Value)))
                    {
                        // stream contains this Map PID

                        if (packetsByPID.ContainsKey(kvp.Value))
                        {
                            var mptPacket = DVBTTable.CreateFromPackets <PMTTable>(packetsByPID[kvp.Value], kvp.Value);
                            mptPacket.WriteToConsole();
                        }
                    }
                }
            }


            if (includeEIT)
            {
                if (packetsByPID.ContainsKey(18))
                {
                    Console.WriteLine();
                    Console.WriteLine($"Event Information Table (EIT):");
                    Console.WriteLine($"------------------------------");

                    var eitManager = new EITManager(logger);

                    var packetsEITwithSDT = new List <MPEGTransportStreamPacket>();
                    packetsEITwithSDT.AddRange(packetsByPID[18]);

                    if (packetsByPID.ContainsKey(0))
                    {
                        packetsEITwithSDT.AddRange(packetsByPID[0]);
                    }

                    var eitScanRes = eitManager.Scan(packetsEITwithSDT);

                    if (eitScanRes.UnsupportedEncoding)
                    {
                        Console.WriteLine();
                        Console.WriteLine("Unsupported encoding");
                        Console.WriteLine();
                    }
                    else
                    {
                        Console.WriteLine();
                        Console.WriteLine("Current events");
                        Console.WriteLine();

                        Console.WriteLine($"{"Program number",14} {"Date".PadRight(10, ' '),10} {"From "}-{" To  "} Text");
                        Console.WriteLine($"{"--------------",14} {"----".PadRight(10, '-'),10} {"-----"}-{"-----"} -------------------------------");

                        foreach (var kvp in eitManager.CurrentEvents)
                        {
                            Console.WriteLine(kvp.Value.WriteToString());
                        }


                        Console.WriteLine();
                        Console.WriteLine("Scheduled events");
                        Console.WriteLine();

                        foreach (var programNumber in eitManager.ScheduledEvents.Keys)
                        {
                            foreach (var ev in eitManager.ScheduledEvents[programNumber])
                            {
                                Console.WriteLine(ev.WriteToString());
                            }
                        }

                        Console.WriteLine();
                        Console.WriteLine("Present Events");
                        Console.WriteLine();

                        foreach (var kvp in eitManager.GetEvents(DateTime.Now))
                        {
                            Console.WriteLine($"Program Map PID: {kvp.Key}");

                            foreach (var ev in kvp.Value)
                            {
                                Console.WriteLine(ev.WriteToString());
                            }
                        }
                    }
                }
            }
        }
        public EITManager GetEITManager(long freq)
        {
            var eit = new EITManager(new BasicLoggingService());

            var timeAfterTenMinutes = DateTime.Now.AddMinutes(10);
            var timeBefore5Minutes  = DateTime.Now.AddMinutes(-5);
            var timeBefore50Minutes = DateTime.Now.AddMinutes(-50);

            var loremIpsumText = "Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

            if (freq == 490000000)
            {
                eit.ScheduledEvents.Add(0, new List <EventItem>()
                {
                    new EventItem()
                    {
                        EventId    = 0,
                        EventName  = "Advertisment - current program name",
                        Text       = $"Fructies, Garnier and other ... {Environment.NewLine}{Environment.NewLine}{loremIpsumText}",
                        StartTime  = timeBefore5Minutes,
                        FinishTime = timeAfterTenMinutes
                    },
                    new EventItem()
                    {
                        EventId    = 1,
                        EventName  = "Advertisment - next program name",
                        StartTime  = timeAfterTenMinutes,
                        FinishTime = DateTime.Now.AddHours(2)
                    }
                });

                eit.ProgramNumberToMapPID.Add(0, 310);
            }

            if (freq == 514000000)
            {
                eit.ScheduledEvents.Add(0, new List <EventItem>()
                {
                    new EventItem()
                    {
                        EventId    = 0,
                        EventName  = "Sport - current program name",
                        Text       = $"Figure skating {Environment.NewLine}{Environment.NewLine}{loremIpsumText}",
                        StartTime  = timeBefore5Minutes,
                        FinishTime = timeAfterTenMinutes
                    },
                    new EventItem()
                    {
                        EventId    = 1,
                        EventName  = "Sport - next program name",
                        StartTime  = timeAfterTenMinutes,
                        FinishTime = DateTime.Now.AddHours(2)
                    }
                });

                eit.ScheduledEvents.Add(1, new List <EventItem>()
                {
                    new EventItem()
                    {
                        EventId    = 2,
                        EventName  = "News - current program name",
                        Text       = $"War map sitiation{Environment.NewLine}{Environment.NewLine}{loremIpsumText}",
                        StartTime  = timeBefore50Minutes,
                        FinishTime = timeAfterTenMinutes
                    },
                    new EventItem()
                    {
                        EventId    = 3,
                        EventName  = "News - next program name",
                        StartTime  = timeAfterTenMinutes,
                        FinishTime = DateTime.Now.AddHours(2)
                    },
                });

                eit.ScheduledEvents.Add(2, new List <EventItem>()
                {
                    new EventItem()
                    {
                        EventId    = 4,
                        EventName  = "Radio - current program name",
                        Text       = $"Audio book reading {Environment.NewLine}{Environment.NewLine}{loremIpsumText}",
                        StartTime  = timeBefore5Minutes,
                        FinishTime = timeAfterTenMinutes
                    },
                    new EventItem()
                    {
                        EventId    = 5,
                        EventName  = "Radio - next program name",
                        StartTime  = timeAfterTenMinutes,
                        FinishTime = DateTime.Now.AddHours(2)
                    }
                });

                eit.ProgramNumberToMapPID.Add(0, 2400);
                eit.ProgramNumberToMapPID.Add(1, 2300);
                eit.ProgramNumberToMapPID.Add(2, 7070);
            }

            if (freq == 626000000 && Freq626Loaded)
            {
                eit.ScheduledEvents.Add(0, new List <EventItem>()
                {
                    new EventItem()
                    {
                        EventId    = 0,
                        EventName  = "Informations",
                        StartTime  = timeBefore5Minutes,
                        FinishTime = timeAfterTenMinutes
                    }
                });

                eit.ProgramNumberToMapPID.Add(0, 8888);
            }

            return(eit);
        }