Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Utils typescript #2182

Merged
merged 8 commits into from
Mar 27, 2019
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/is-supported.js → src/is-supported.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { getMediaSource } from './utils/mediasource-helper';

export function isSupported () {
itsjamie marked this conversation as resolved.
Show resolved Hide resolved
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
51 changes: 42 additions & 9 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,19 @@
* Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
*/

interface BufferTimeRange {
itsjamie marked this conversation as resolved.
Show resolved Hide resolved
start: number
end: number
}

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

static bufferInfo (media, pos, maxHoleDuration) {
static bufferInfo (
media: HTMLMediaElement | SourceBuffer,
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++) {
Copy link
Member

@tjenkinson tjenkinson Mar 27, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
for (i = 0; i < vbuffered.length; i++) {
for (let i = 0; i < vbuffered.length; i++) {

then you don't need to define it above

buffered.push({ start: vbuffered.start(i), end: vbuffered.end(i) });
}
Expand All @@ -51,10 +67,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;
itsjamie marked this conversation as resolved.
Show resolved Hide resolved
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 +86,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 +113,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 {
itsjamie marked this conversation as resolved.
Show resolved Hide resolved
return MediaSource || (window as any).WebKitMediaSource;
}