UNPKG

2.62 kBJavaScriptView Raw
1/**
2 * @file bin-utils.js
3 */
4
5/**
6 * convert a TimeRange to text
7 *
8 * @param {TimeRange} range the timerange to use for conversion
9 * @param {Number} i the iterator on the range to convert
10 */
11const textRange = function(range, i) {
12 return range.start(i) + '-' + range.end(i);
13};
14
15/**
16 * format a number as hex string
17 *
18 * @param {Number} e The number
19 * @param {Number} i the iterator
20 */
21const formatHexString = function(e, i) {
22 let value = e.toString(16);
23
24 return '00'.substring(0, 2 - value.length) + value + (i % 2 ? ' ' : '');
25};
26const formatAsciiString = function(e) {
27 if (e >= 0x20 && e < 0x7e) {
28 return String.fromCharCode(e);
29 }
30 return '.';
31};
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 */
43const createTransferableMessage = function(message) {
44 const transferable = {};
45
46 Object.keys(message).forEach((key) => {
47 const value = message[key];
48
49 if (ArrayBuffer.isView(value)) {
50 transferable[key] = {
51 bytes: value.buffer,
52 byteOffset: value.byteOffset,
53 byteLength: value.byteLength
54 };
55 } else {
56 transferable[key] = value;
57 }
58 });
59
60 return transferable;
61};
62
63/**
64 * Returns a unique string identifier for a media initialization
65 * segment.
66 */
67const initSegmentId = function(initSegment) {
68 let byterange = initSegment.byterange || {
69 length: Infinity,
70 offset: 0
71 };
72
73 return [
74 byterange.length, byterange.offset, initSegment.resolvedUri
75 ].join(',');
76};
77
78/**
79 * utils to help dump binary data to the console
80 */
81const utils = {
82 hexDump(data) {
83 let bytes = Array.prototype.slice.call(data);
84 let step = 16;
85 let result = '';
86 let hex;
87 let ascii;
88
89 for (let j = 0; j < bytes.length / step; j++) {
90 hex = bytes.slice(j * step, j * step + step).map(formatHexString).join('');
91 ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join('');
92 result += hex + ' ' + ascii + '\n';
93 }
94 return result;
95 },
96 tagDump(tag) {
97 return utils.hexDump(tag.bytes);
98 },
99 textRanges(ranges) {
100 let result = '';
101 let i;
102
103 for (i = 0; i < ranges.length; i++) {
104 result += textRange(ranges, i) + ' ';
105 }
106 return result;
107 },
108 createTransferableMessage,
109 initSegmentId
110};
111
112export default utils;