1 | import { isArrayBufferView } from '@videojs/vhs-utils/es/byte-helpers';
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | const textRange = function(range, i) {
|
15 | return range.start(i) + '-' + range.end(i);
|
16 | };
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | const formatHexString = function(e, i) {
|
26 | const value = e.toString(16);
|
27 |
|
28 | return '00'.substring(0, 2 - value.length) + value + (i % 2 ? ' ' : '');
|
29 | };
|
30 | const formatAsciiString = function(e) {
|
31 | if (e >= 0x20 && e < 0x7e) {
|
32 | return String.fromCharCode(e);
|
33 | }
|
34 | return '.';
|
35 | };
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 | export const createTransferableMessage = function(message) {
|
48 | const transferable = {};
|
49 |
|
50 | Object.keys(message).forEach((key) => {
|
51 | const value = message[key];
|
52 |
|
53 | if (isArrayBufferView(value)) {
|
54 | transferable[key] = {
|
55 | bytes: value.buffer,
|
56 | byteOffset: value.byteOffset,
|
57 | byteLength: value.byteLength
|
58 | };
|
59 | } else {
|
60 | transferable[key] = value;
|
61 | }
|
62 | });
|
63 |
|
64 | return transferable;
|
65 | };
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 | export const initSegmentId = function(initSegment) {
|
77 | const byterange = initSegment.byterange || {
|
78 | length: Infinity,
|
79 | offset: 0
|
80 | };
|
81 |
|
82 | return [
|
83 | byterange.length, byterange.offset, initSegment.resolvedUri
|
84 | ].join(',');
|
85 | };
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | export const segmentKeyId = function(key) {
|
94 | return key.resolvedUri;
|
95 | };
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 | export const hexDump = (data) => {
|
106 | const bytes = Array.prototype.slice.call(data);
|
107 | const step = 16;
|
108 | let result = '';
|
109 | let hex;
|
110 | let ascii;
|
111 |
|
112 | for (let j = 0; j < bytes.length / step; j++) {
|
113 | hex = bytes.slice(j * step, j * step + step).map(formatHexString).join('');
|
114 | ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join('');
|
115 | result += hex + ' ' + ascii + '\n';
|
116 | }
|
117 |
|
118 | return result;
|
119 | };
|
120 |
|
121 | export const tagDump = ({ bytes }) => hexDump(bytes);
|
122 |
|
123 | export const textRanges = (ranges) => {
|
124 | let result = '';
|
125 | let i;
|
126 |
|
127 | for (i = 0; i < ranges.length; i++) {
|
128 | result += textRange(ranges, i) + ' ';
|
129 | }
|
130 | return result;
|
131 | };
|