silence.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * mux.js
  3. *
  4. * Copyright (c) Brightcove
  5. * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE
  6. */
  7. var highPrefix = [33, 16, 5, 32, 164, 27];
  8. var lowPrefix = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252];
  9. var zeroFill = function(count) {
  10. var a = [];
  11. while (count--) {
  12. a.push(0);
  13. }
  14. return a;
  15. };
  16. var makeTable = function(metaTable) {
  17. return Object.keys(metaTable).reduce(function(obj, key) {
  18. obj[key] = new Uint8Array(metaTable[key].reduce(function(arr, part) {
  19. return arr.concat(part);
  20. }, []));
  21. return obj;
  22. }, {});
  23. };
  24. var silence;
  25. module.exports = function() {
  26. if (!silence) {
  27. // Frames-of-silence to use for filling in missing AAC frames
  28. var coneOfSilence = {
  29. 96000: [highPrefix, [227, 64], zeroFill(154), [56]],
  30. 88200: [highPrefix, [231], zeroFill(170), [56]],
  31. 64000: [highPrefix, [248, 192], zeroFill(240), [56]],
  32. 48000: [highPrefix, [255, 192], zeroFill(268), [55, 148, 128], zeroFill(54), [112]],
  33. 44100: [highPrefix, [255, 192], zeroFill(268), [55, 163, 128], zeroFill(84), [112]],
  34. 32000: [highPrefix, [255, 192], zeroFill(268), [55, 234], zeroFill(226), [112]],
  35. 24000: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 112], zeroFill(126), [224]],
  36. 16000: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 255], zeroFill(269), [223, 108], zeroFill(195), [1, 192]],
  37. 12000: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 253, 128], zeroFill(259), [56]],
  38. 11025: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 255, 192], zeroFill(268), [55, 175, 128], zeroFill(108), [112]],
  39. 8000: [lowPrefix, zeroFill(268), [3, 121, 16], zeroFill(47), [7]]
  40. };
  41. silence = makeTable(coneOfSilence);
  42. }
  43. return silence;
  44. };