aac-utils.test.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. 'use strict';
  2. var segments = require('data-files!segments');
  3. var
  4. QUnit = require('qunit'),
  5. utils = require('../lib/aac/utils.js'),
  6. testSegment = segments['test-aac-segment.aac']();
  7. var id3TagOffset = 0;
  8. var audioFrameOffset = 73;
  9. QUnit.module('AAC Utils');
  10. QUnit.test('correctly determines aac data', function(assert) {
  11. assert.ok(utils.isLikelyAacData(testSegment), 'test segment is aac');
  12. var id3Offset = utils.parseId3TagSize(testSegment, 0);
  13. var id3 = Array.prototype.slice.call(testSegment, 0, id3Offset);
  14. var segmentOnly = testSegment.subarray(id3Offset);
  15. var multipleId3 = new Uint8Array([]
  16. .concat(id3)
  17. .concat(id3)
  18. .concat(id3)
  19. .concat(id3)
  20. .concat(Array.prototype.slice.call(segmentOnly))
  21. );
  22. assert.ok(utils.isLikelyAacData(segmentOnly), 'test segment is aac without id3');
  23. assert.notOk(utils.isLikelyAacData(testSegment.subarray(id3Offset + 25)), 'non aac data not recognized');
  24. assert.notOk(utils.isLikelyAacData(testSegment.subarray(0, 5)), 'not enough aac data is not recognized');
  25. assert.ok(utils.isLikelyAacData(multipleId3), 'test segment with multilpe id3');
  26. });
  27. QUnit.test('correctly parses aac packet type', function(assert) {
  28. assert.equal(utils.parseType(testSegment, id3TagOffset), 'timed-metadata',
  29. 'parsed timed-metadata type');
  30. assert.equal(utils.parseType(testSegment, 1), null,
  31. 'parsed unknown type');
  32. assert.equal(utils.parseType(testSegment, audioFrameOffset), 'audio',
  33. 'parsed audio type');
  34. });
  35. QUnit.test('correctly parses ID3 tag size', function(assert) {
  36. assert.equal(utils.parseId3TagSize(testSegment, id3TagOffset), 73,
  37. 'correct id3 tag size');
  38. });
  39. QUnit.test('correctly parses timestamp from ID3 metadata', function(assert) {
  40. var frameSize = utils.parseId3TagSize(testSegment, id3TagOffset);
  41. var frame = testSegment.subarray(id3TagOffset, id3TagOffset + frameSize);
  42. assert.equal(utils.parseAacTimestamp(frame), 895690, 'correct aac timestamp');
  43. });
  44. QUnit.test('correctly parses adts frame size', function(assert) {
  45. assert.equal(utils.parseAdtsSize(testSegment, audioFrameOffset), 13,
  46. 'correct adts frame size');
  47. });
  48. QUnit.test('correctly parses packet sample rate', function(assert) {
  49. var frameSize = utils.parseAdtsSize(testSegment, audioFrameOffset);
  50. var frame = testSegment.subarray(audioFrameOffset, audioFrameOffset + frameSize);
  51. assert.equal(utils.parseSampleRate(frame), 44100, 'correct sample rate');
  52. });
  53. QUnit.test('parses correct ID3 tag size', function(assert) {
  54. var packetStream = new Uint8Array(10);
  55. packetStream[9] = 63;
  56. assert.equal(utils.parseId3TagSize(packetStream, 0),
  57. 73,
  58. 'correctly parsed a header without a footer');
  59. });
  60. QUnit.test('parses correct ADTS Frame size', function(assert) {
  61. var packetStream = new Uint8Array(6);
  62. packetStream[3] = 128;
  63. packetStream[4] = 29;
  64. packetStream[5] = 255;
  65. assert.equal(utils.parseAdtsSize(packetStream, 0), 239, 'correctly parsed framesize');
  66. });