Skip to content

Commit 822ea77

Browse files
committed
Added NIT parsing unit test
1 parent c16de7e commit 822ea77

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

tests/ParserTest.php

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,15 @@
2626

2727
namespace PhpBg\DvbPsi\Tests;
2828

29+
use PhpBg\DvbPsi\Descriptors\NetworkName;
30+
use PhpBg\DvbPsi\Descriptors\TerrestrialDeliverySystem;
2931
use PhpBg\DvbPsi\Parser;
3032
use PhpBg\DvbPsi\ParserFactory;
3133
use PhpBg\DvbPsi\TableParsers\Pmt;
3234
use PhpBg\DvbPsi\TableParsers\TableParserInterface;
3335
use PhpBg\DvbPsi\Tables\Eit;
36+
use PhpBg\DvbPsi\Tables\Nit;
37+
use PhpBg\DvbPsi\Tables\NitTs;
3438
use 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
}

tests/data/8_mpegts_nit_packets.ts

1.47 KB
Binary file not shown.

0 commit comments

Comments
 (0)