Skip to content

Commit

Permalink
Play initialization (#2457)
Browse files Browse the repository at this point in the history
Don't interact with video element until stream is initialized
  • Loading branch information
epiclabsDASH committed Mar 7, 2018
1 parent 69d01a7 commit 2d0de0a
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 10 deletions.
19 changes: 18 additions & 1 deletion build/typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ declare namespace dashjs {
codec: string | null;
contentProtection: any | null;
}

export interface MediaPlayerClass {
initialize(view?: HTMLElement, source?: string, autoPlay?: boolean): void;
on(type: AstInFutureEvent['type'], listener: (e: AstInFutureEvent) => void, scope?: object): void;
Expand Down Expand Up @@ -82,6 +82,7 @@ declare namespace dashjs {
on(type: QualityChangeRequestedEvent['type'], listener: (e: QualityChangeRequestedEvent) => void, scope?: object): void;
on(type: StreamInitializedEvent['type'], listener: (e: StreamInitializedEvent) => void, scope?: object): void;
on(type: TextTracksAddedEvent['type'], listener: (e: TextTracksAddedEvent) => void, scope?: object): void;
on(type: TtmlParsedEvent['type'], listener: (e: TtmlParsedEvent) => void, scope?: object): void;
on(type: string, listener: (e: Event) => void, scope?: object): void;
off(type: string, listener: (e: any) => void, scope?: object): void;
extend(parentNameString: string, childInstance: object, override: boolean): void;
Expand Down Expand Up @@ -202,6 +203,7 @@ declare namespace dashjs {
getJumpGaps(): boolean;
setSmallGapLimit(value: number): void;
getSmallGapLimit(): number;
preload(): void;
reset(): void;
}

Expand Down Expand Up @@ -256,11 +258,13 @@ declare namespace dashjs {
PLAYBACK_TIME_UPDATED: 'playbackTimeUpdated';
PROTECTION_CREATED: 'public_protectioncreated';
PROTECTION_DESTROYED: 'public_protectiondestroyed';
TRACK_CHANGE_RENDERED: 'trackChangeRendered';
QUALITY_CHANGE_RENDERED: 'qualityChangeRendered';
QUALITY_CHANGE_REQUESTED: 'qualityChangeRequested';
STREAM_INITIALIZED: 'streamInitialized';
TEXT_TRACKS_ADDED: 'allTextTracksAdded';
TEXT_TRACK_ADDED: 'textTrackAdded';
TTML_PARSED: 'ttmlParsed';
}

export interface Event {
Expand Down Expand Up @@ -469,6 +473,13 @@ declare namespace dashjs {
data: string;
}

export interface TrackChangeRenderedEvent extends Event {
type: MediaPlayerEvents['TRACK_CHANGE_RENDERED'];
mediaType: 'video' | 'audio' | 'fragmentedText';
oldMediaInfo: MediaInfo;
newMediaInfo: MediaInfo;
}

export interface QualityChangeRenderedEvent extends Event {
type: MediaPlayerEvents['QUALITY_CHANGE_RENDERED'];
mediaType: 'video' | 'audio' | 'fragmentedText';
Expand Down Expand Up @@ -501,6 +512,12 @@ declare namespace dashjs {
tracks: TextTrackInfo[];
}

export interface TtmlParsedEvent extends Event {
type: MediaPlayerEvents['TTML_PARSED'];
ttmlString: string;
ttmlDoc: object;
}

export class BitrateInfo {
mediaType: 'video' | 'audio';
bitrate: number;
Expand Down
18 changes: 9 additions & 9 deletions src/streaming/controllers/PlaybackController.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,49 +98,49 @@ function PlaybackController() {
}

function play() {
if (videoModel && videoModel.getElement()) {
if (streamInfo && videoModel && videoModel.getElement()) {
videoModel.play();
} else {
playOnceInitialized = true;
}
}

function isPaused() {
return videoModel ? videoModel.isPaused() : null;
return streamInfo && videoModel ? videoModel.isPaused() : null;
}

function pause() {
if (videoModel) {
if (streamInfo && videoModel) {
videoModel.pause();
}
}

function isSeeking() {
return videoModel ? videoModel.isSeeking() : null;
return streamInfo && videoModel ? videoModel.isSeeking() : null;
}

function seek(time) {
if (videoModel) {
if (streamInfo && videoModel) {
eventBus.trigger(Events.PLAYBACK_SEEK_ASKED);
log('Requesting seek to time: ' + time);
videoModel.setCurrentTime(time);
}
}

function getTime() {
return videoModel ? videoModel.getTime() : null;
return streamInfo && videoModel ? videoModel.getTime() : null;
}

function getPlaybackRate() {
return videoModel ? videoModel.getPlaybackRate() : null;
return streamInfo && videoModel ? videoModel.getPlaybackRate() : null;
}

function getPlayedRanges() {
return videoModel ? videoModel.getPlayedRanges() : null;
return streamInfo && videoModel ? videoModel.getPlayedRanges() : null;
}

function getEnded() {
return videoModel ? videoModel.getEnded() : null;
return streamInfo && videoModel ? videoModel.getEnded() : null;
}

function getIsDynamic() {
Expand Down
6 changes: 6 additions & 0 deletions test/unit/streaming.controllers.PlaybackControllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ describe('PlaybackController', function () {

expect(playbackController.getIsDynamic()).to.not.exist; // jshint ignore:line
expect(playbackController.getLiveStartTime()).to.be.NaN; // jshint ignore:line
expect(playbackController.isPaused()).to.be.null; // jshint ignore:line
expect(playbackController.isSeeking()).to.be.null; // jshint ignore:line
expect(playbackController.getTime()).to.be.null; // jshint ignore:line
expect(playbackController.getPlaybackRate()).to.be.null; // jshint ignore:line
expect(playbackController.getPlayedRanges()).to.be.null; // jshint ignore:line
expect(playbackController.getEnded()).to.be.null; // jshint ignore:line

let streamInfo = {
manifestInfo: {
Expand Down

0 comments on commit 2d0de0a

Please sign in to comment.