Blame view

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