コード例 #1
0
ファイル: TeleTextDecoder.cs プロジェクト: Cinegy/TsAnalyser
        private void Setup(TsDecoder.TransportStream.TsDecoder tsDecoder)
        {
            if (tsDecoder == null || _currentTeletextDescriptor != null) return;

            lock (tsDecoder)
            {
                if (ProgramNumber == 0)
                {
                    var pmt = tsDecoder.GetSelectedPmt(ProgramNumber);
                    if (pmt != null)
                    {
                        ProgramNumber = pmt.ProgramNumber;
                    }
                }

                if (ProgramNumber == 0) return;

                var esStream = tsDecoder.GetEsStreamForProgramNumberByTag(ProgramNumber, 0x6, 0x56);

                _currentTeletextDescriptor =
                    tsDecoder.GetDescriptorForProgramNumberByTag<TeletextDescriptor>(ProgramNumber, 6, 0x56);

                if (_currentTeletextDescriptor == null) return;

                foreach (var lang in _currentTeletextDescriptor.Languages)
                {
                  //  if (lang.TeletextType != 0x02 && lang.TeletextType != 0x05)
                    //    continue;

                    TeletextPid = esStream.ElementaryPid;

                    if (_teletextSubtitlePage == null)
                    {
                        _teletextSubtitlePage = new Dictionary<ushort, TeleText>();
                    }

                    var m = lang.TeletextMagazineNumber;
                    if (lang.TeletextMagazineNumber == 0)
                    {
                        m = 8;
                    }
                    var page = (ushort)((m << 8) + lang.TeletextPageNumber);

                    if (_teletextSubtitlePage.ContainsKey(page)) continue;

                    _teletextSubtitlePage.Add(page, new TeleText(page, TeletextPid));
                    _teletextSubtitlePage[page].TeletextPageRecieved += TeleTextDecoder_TeletextPageRecieved;

                }
            }
        }
コード例 #2
0
ファイル: TeleTextDecoder.cs プロジェクト: Cinegy/TsAnalyser
        public void AddPacket(TsDecoder.TransportStream.TsDecoder tsDecoder, TsPacket tsPacket)
        {
            if (_currentTeletextDescriptor == null)
            {
                Setup(tsDecoder);

                if (_currentTeletextDescriptor != null)
                {
                    Debug.WriteLine($"Locked onto teletext PID for {TeletextPid} ");
                }
            }

            if (tsPacket.Pid != TeletextPid) return;

            if (tsPacket.PayloadUnitStartIndicator)
            {
                if (_currentTeletextPes != null)
                {
                    if (_currentTeletextPes.HasAllBytes())
                    {
                        _currentTeletextPes.Decode();
                        foreach (var key in _teletextSubtitlePage.Keys)
                        {
                            _teletextSubtitlePage[key].DecodeTeletextData(_currentTeletextPes);
                        }
                    }
                }

                _currentTeletextPes = new Pes(tsPacket);
            }
            else
            {
                _currentTeletextPes?.Add(tsPacket);
            }
        }