m2ts-probe.test.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. 'use strict';
  2. var segments = require('data-files!segments');
  3. var
  4. QUnit = require('qunit'),
  5. probe = require('../lib/m2ts/probe.js'),
  6. testSegment = segments['test-segment.ts'](),
  7. stuffedPesPacket = segments['test-stuffed-pes.ts']();
  8. /**
  9. * All subarray indices verified with the use of thumbcoil.
  10. */
  11. var patPacket = testSegment.subarray(188, 376);
  12. var pmtPid = 4095;
  13. var programMapTable = {
  14. 256: 0x1B,
  15. 257: 0x0F
  16. };
  17. var pmtPacket = testSegment.subarray(376, 564);
  18. var pesPacket = testSegment.subarray(564, 752);
  19. var videoPacket = testSegment.subarray(564, 1692);
  20. var videoNoKeyFramePacket = testSegment.subarray(1880, 2820);
  21. var audioPacket = testSegment.subarray(6956, 7144);
  22. var notPusiPacket = testSegment.subarray(1316, 1504);
  23. QUnit.module('M2TS Probe');
  24. QUnit.test('correctly parses packet type', function(assert) {
  25. assert.equal(probe.parseType(patPacket), 'pat', 'parses pat type');
  26. assert.equal(probe.parseType(pmtPacket), null,
  27. 'cannot determine type of pmt packet when pmt pid has not been parsed yet');
  28. assert.equal(probe.parseType(pmtPacket, pmtPid), 'pmt', 'parses pmt type');
  29. assert.equal(probe.parseType(pesPacket), null,
  30. 'cannot determine type of pes packet when pmt pid has not been parsed yet');
  31. assert.equal(probe.parseType(pesPacket, pmtPid), 'pes', 'parses pes type');
  32. });
  33. QUnit.test('correctly parses pmt pid from pat packet', function(assert) {
  34. assert.equal(probe.parsePat(patPacket), pmtPid, 'parses pmt pid from pat');
  35. });
  36. QUnit.test('correctly parses program map table from pmt packet', function(assert) {
  37. assert.deepEqual(probe.parsePmt(pmtPacket), programMapTable, 'generates correct pmt');
  38. });
  39. QUnit.test('correctly parses payload unit start indicator', function(assert) {
  40. assert.ok(probe.parsePayloadUnitStartIndicator(pesPacket),
  41. 'detects payload unit start indicator');
  42. assert.ok(!probe.parsePayloadUnitStartIndicator(notPusiPacket),
  43. 'detects no payload unit start indicator');
  44. });
  45. QUnit.test('correctly parses type of pes packet', function(assert) {
  46. assert.equal(probe.parsePesType(videoPacket, programMapTable), 'video',
  47. 'parses video pes type');
  48. assert.equal(probe.parsePesType(audioPacket, programMapTable), 'audio',
  49. 'parses audio pes type');
  50. });
  51. QUnit.test('correctly parses dts and pts values of pes packet', function(assert) {
  52. var videoPes = probe.parsePesTime(videoPacket);
  53. assert.equal(videoPes.dts, 126000, 'correct dts value');
  54. assert.equal(videoPes.pts, 126000, 'correct pts value');
  55. videoPes = probe.parsePesTime(stuffedPesPacket);
  56. assert.equal(videoPes, null,
  57. 'correctly returned null when there is no packet data, only stuffing');
  58. });
  59. QUnit.test('correctly determines if video pes packet contains a key frame', function(assert) {
  60. assert.ok(probe.videoPacketContainsKeyFrame(videoPacket), 'detects key frame in packet');
  61. assert.ok(!probe.videoPacketContainsKeyFrame(videoNoKeyFramePacket),
  62. 'detects no key frame in packet');
  63. });