bin-utils.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /**
  2. * @file bin-utils.js
  3. */
  4. /**
  5. * convert a TimeRange to text
  6. *
  7. * @param {TimeRange} range the timerange to use for conversion
  8. * @param {Number} i the iterator on the range to convert
  9. */
  10. 'use strict';
  11. Object.defineProperty(exports, '__esModule', {
  12. value: true
  13. });
  14. var textRange = function textRange(range, i) {
  15. return range.start(i) + '-' + range.end(i);
  16. };
  17. /**
  18. * format a number as hex string
  19. *
  20. * @param {Number} e The number
  21. * @param {Number} i the iterator
  22. */
  23. var formatHexString = function formatHexString(e, i) {
  24. var value = e.toString(16);
  25. return '00'.substring(0, 2 - value.length) + value + (i % 2 ? ' ' : '');
  26. };
  27. var formatAsciiString = function formatAsciiString(e) {
  28. if (e >= 0x20 && e < 0x7e) {
  29. return String.fromCharCode(e);
  30. }
  31. return '.';
  32. };
  33. /**
  34. * Creates an object for sending to a web worker modifying properties that are TypedArrays
  35. * into a new object with seperated properties for the buffer, byteOffset, and byteLength.
  36. *
  37. * @param {Object} message
  38. * Object of properties and values to send to the web worker
  39. * @return {Object}
  40. * Modified message with TypedArray values expanded
  41. * @function createTransferableMessage
  42. */
  43. var createTransferableMessage = function createTransferableMessage(message) {
  44. var transferable = {};
  45. Object.keys(message).forEach(function (key) {
  46. var value = message[key];
  47. if (ArrayBuffer.isView(value)) {
  48. transferable[key] = {
  49. bytes: value.buffer,
  50. byteOffset: value.byteOffset,
  51. byteLength: value.byteLength
  52. };
  53. } else {
  54. transferable[key] = value;
  55. }
  56. });
  57. return transferable;
  58. };
  59. /**
  60. * Returns a unique string identifier for a media initialization
  61. * segment.
  62. */
  63. var initSegmentId = function initSegmentId(initSegment) {
  64. var byterange = initSegment.byterange || {
  65. length: Infinity,
  66. offset: 0
  67. };
  68. return [byterange.length, byterange.offset, initSegment.resolvedUri].join(',');
  69. };
  70. /**
  71. * utils to help dump binary data to the console
  72. */
  73. var utils = {
  74. hexDump: function hexDump(data) {
  75. var bytes = Array.prototype.slice.call(data);
  76. var step = 16;
  77. var result = '';
  78. var hex = undefined;
  79. var ascii = undefined;
  80. for (var j = 0; j < bytes.length / step; j++) {
  81. hex = bytes.slice(j * step, j * step + step).map(formatHexString).join('');
  82. ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join('');
  83. result += hex + ' ' + ascii + '\n';
  84. }
  85. return result;
  86. },
  87. tagDump: function tagDump(tag) {
  88. return utils.hexDump(tag.bytes);
  89. },
  90. textRanges: function textRanges(ranges) {
  91. var result = '';
  92. var i = undefined;
  93. for (i = 0; i < ranges.length; i++) {
  94. result += textRange(ranges, i) + ' ';
  95. }
  96. return result;
  97. },
  98. createTransferableMessage: createTransferableMessage,
  99. initSegmentId: initSegmentId
  100. };
  101. exports['default'] = utils;
  102. module.exports = exports['default'];