Skip to content

Commit

Permalink
Utils typescript (#2182)
Browse files Browse the repository at this point in the history
Add typing information to buffer-helper and is-supported.
  • Loading branch information
itsjamie committed Mar 27, 2019
1 parent 592860f commit 1177e18
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 21 deletions.
4 changes: 2 additions & 2 deletions src/is-supported.js → src/is-supported.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { getMediaSource } from './utils/mediasource-helper';

export function isSupported () {
export function isSupported (): boolean {
const mediaSource = getMediaSource();
const sourceBuffer = window.SourceBuffer || window.WebKitSourceBuffer;
const sourceBuffer = SourceBuffer || (window as any).WebKitSourceBuffer;
const isTypeSupported = mediaSource &&
typeof mediaSource.isTypeSupported === 'function' &&
mediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"');
Expand Down
57 changes: 47 additions & 10 deletions src/utils/buffer-helper.js → src/utils/buffer-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,23 @@
* Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
*/

type BufferTimeRange = {
start: number
end: number
}

type Bufferable = {
buffered: TimeRanges
}

export class BufferHelper {
/**
* Return true if `media`'s buffered include `position`
* @param {HTMLMediaElement|SourceBuffer} media
* @param {Bufferable} media
* @param {number} position
* @returns {boolean}
*/
static isBuffered (media, position) {
static isBuffered (media: Bufferable, position: number): boolean {
try {
if (media) {
let buffered = media.buffered;
Expand All @@ -33,10 +42,21 @@ export class BufferHelper {
return false;
}

static bufferInfo (media, pos, maxHoleDuration) {
static bufferInfo (
media: Bufferable,
pos: number,
maxHoleDuration: number
): {
len: number,
start: number,
end: number,
nextStart?: number,
} {
try {
if (media) {
let vbuffered = media.buffered, buffered = [], i;
let vbuffered = media.buffered;
let buffered: BufferTimeRange[] = [];
let i: number;
for (i = 0; i < vbuffered.length; i++) {
buffered.push({ start: vbuffered.start(i), end: vbuffered.end(i) });
}
Expand All @@ -51,10 +71,16 @@ export class BufferHelper {
return { len: 0, start: pos, end: pos, nextStart: undefined };
}

static bufferedInfo (buffered, pos, maxHoleDuration) {
let buffered2 = [],
// bufferStart and bufferEnd are buffer boundaries around current video position
bufferLen, bufferStart, bufferEnd, bufferStartNext, i;
static bufferedInfo (
buffered: BufferTimeRange[],
pos: number,
maxHoleDuration: number
): {
len: number,
start: number,
end: number,
nextStart?: number,
} {
// sort on buffer.start/smaller end (IE does not always return sorted buffered range)
buffered.sort(function (a, b) {
let diff = a.start - b.start;
Expand All @@ -64,10 +90,12 @@ export class BufferHelper {
return b.end - a.end;
}
});

let buffered2: BufferTimeRange[] = [];
// there might be some small holes between buffer time range
// consider that holes smaller than maxHoleDuration are irrelevant and build another
// buffer time range representations that discards those holes
for (i = 0; i < buffered.length; i++) {
for (let i = 0; i < buffered.length; i++) {
let buf2len = buffered2.length;
if (buf2len) {
let buf2end = buffered2[buf2len - 1].end;
Expand All @@ -89,7 +117,16 @@ export class BufferHelper {
buffered2.push(buffered[i]);
}
}
for (i = 0, bufferLen = 0, bufferStart = bufferEnd = pos; i < buffered2.length; i++) {

let bufferLen = 0;

// bufferStartNext can possibly be undefined based on the conditional logic below
let bufferStartNext: number | undefined;

// bufferStart and bufferEnd are buffer boundaries around current video position
let bufferStart: number = pos;
let bufferEnd: number = pos;
for (let i = 0; i < buffered2.length; i++) {
let start = buffered2[i].start,
end = buffered2[i].end;
// logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));
Expand Down
9 changes: 0 additions & 9 deletions src/utils/mediasource-helper.js

This file was deleted.

7 changes: 7 additions & 0 deletions src/utils/mediasource-helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/**
* MediaSource helper
*/

export function getMediaSource (): typeof MediaSource {
return MediaSource || (window as any).WebKitMediaSource;
}

0 comments on commit 1177e18

Please sign in to comment.