2626
2727namespace PhpBg \DvbPsi \Tests ;
2828
29+ use PhpBg \DvbPsi \Descriptors \NetworkName ;
30+ use PhpBg \DvbPsi \Descriptors \TerrestrialDeliverySystem ;
2931use PhpBg \DvbPsi \Parser ;
3032use PhpBg \DvbPsi \ParserFactory ;
3133use PhpBg \DvbPsi \TableParsers \Pmt ;
3234use PhpBg \DvbPsi \TableParsers \TableParserInterface ;
3335use PhpBg \DvbPsi \Tables \Eit ;
36+ use PhpBg \DvbPsi \Tables \Nit ;
37+ use PhpBg \DvbPsi \Tables \NitTs ;
3438use PhpBg \DvbPsi \Tables \Pat ;
3539
3640/**
@@ -213,4 +217,73 @@ public function getRegisteredPidsDatasource()
213217 [new \PhpBg \DvbPsi \TableParsers \Tdt ()]
214218 ];
215219 }
220+
221+ public function testParseNit ()
222+ {
223+ $ data = $ this ->getTestFileContent ('8_mpegts_nit_packets.ts ' );
224+
225+ $ mpegTsParser = new \PhpBg \MpegTs \Parser ();
226+ $ mpegTsParser ->filterAllPids = true ;
227+
228+ $ dvbPsiParser = ParserFactory::create ();
229+
230+ $ dvbPsiParser ->on ('error ' , function ($ e ) {
231+ $ this ->assertTrue (false );
232+ });
233+ $ incomingNit = null ;
234+ $ dvbPsiParser ->on ('nit ' , function ($ eit ) use (&$ incomingNit ) {
235+ if ($ incomingNit !== null ) {
236+ throw new \Exception ('Only one nit is expected ' );
237+ }
238+ $ incomingNit = $ eit ;
239+ });
240+ $ mpegTsParser ->on ('error ' , function ($ e ) {
241+ $ this ->assertTrue (false );
242+ });
243+ $ mpegTsParser ->on ('pes ' , function ($ pid , $ data ) use ($ dvbPsiParser ) {
244+ $ dvbPsiParser ->write ($ pid , $ data );
245+ });
246+
247+ $ mpegTsParser ->write ($ data );
248+
249+ $ this ->assertInstanceOf (Nit::class, $ incomingNit );
250+ /**
251+ * @var Nit $incomingNit
252+ */
253+ $ this ->assertSame (0x20fa , $ incomingNit ->networkId );
254+ $ this ->assertSame (0x1e , $ incomingNit ->versionNumber );
255+ $ this ->assertSame (0x1 , $ incomingNit ->currentNextIndicator );
256+ $ this ->assertSame (1 , count ($ incomingNit ->descriptors ));
257+ $ nnd = current ($ incomingNit ->descriptors );
258+ $ this ->assertInstanceOf (NetworkName::class, $ nnd );
259+ /**
260+ * @var NetworkName $nnd
261+ */
262+ $ this ->assertSame ('F ' , $ nnd ->networkName );
263+
264+ $ this ->assertSame (7 , count ($ incomingNit ->transportStreams ));
265+ $ stream004 = null ;
266+ foreach ($ incomingNit ->transportStreams as $ ts ) {
267+ if ($ ts ->transportStreamId === 0x4 ) {
268+ $ stream004 = $ ts ;
269+ }
270+ }
271+ $ this ->assertInstanceOf (NitTs::class, $ stream004 );
272+ $ this ->assertSame (0x20fa , $ stream004 ->networkId );
273+
274+ // There are 4 descriptors, but the 0x83 one is not yet supported
275+ $ this ->assertSame (3 , count ($ stream004 ->descriptors ));
276+
277+ $ tds = null ;
278+ foreach ($ stream004 ->descriptors as $ descriptor ) {
279+ if ($ descriptor instanceof TerrestrialDeliverySystem) {
280+ $ tds = $ descriptor ;
281+ }
282+ }
283+ $ this ->assertInstanceOf (TerrestrialDeliverySystem::class, $ tds );
284+ $ this ->assertSame (42949672950 , $ tds ->centreFrequency );
285+ $ this ->assertSame (8000000 , $ tds ->bandwidth );
286+ $ this ->assertSame ('64-QAM ' , TerrestrialDeliverySystem::CONSTELLATION_MAPPING [$ tds ->constellation ]);
287+ $ this ->assertSame ('1/8 ' , TerrestrialDeliverySystem::GUARD_INTERVAL_MAPPING [$ tds ->guardInterval ]);
288+ }
216289}
0 commit comments