Skip to content

Commit 7b91f75

Browse files
committed
trigger PLAYBACK_WAITING event when 'waiting' event is raised on video element
1 parent 1d6c084 commit 7b91f75

File tree

5 files changed

+52
-0
lines changed

5 files changed

+52
-0
lines changed

build/typings/index.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ declare namespace dashjs {
256256
PLAYBACK_SEEKING: 'playbackSeeking';
257257
PLAYBACK_STARTED: 'playbackStarted';
258258
PLAYBACK_TIME_UPDATED: 'playbackTimeUpdated';
259+
PLAYBACK_WAITING: 'playbackWaiting';
259260
PROTECTION_CREATED: 'public_protectioncreated';
260261
PROTECTION_DESTROYED: 'public_protectiondestroyed';
261262
TRACK_CHANGE_RENDERED: 'trackChangeRendered';
@@ -462,6 +463,11 @@ declare namespace dashjs {
462463
timeToEnd: number;
463464
}
464465

466+
export interface PlaybackWaitingEvent extends Event {
467+
type: MediaPlayerEvents['PLAYBACK_WAITING'];
468+
playingTime: number | null;
469+
}
470+
465471
export interface ProtectionCreatedEvent extends Event {
466472
type: MediaPlayerEvents['PROTECTION_CREATED'];
467473
controller: object;

index.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ declare namespace dashjs {
256256
PLAYBACK_SEEKING: 'playbackSeeking';
257257
PLAYBACK_STARTED: 'playbackStarted';
258258
PLAYBACK_TIME_UPDATED: 'playbackTimeUpdated';
259+
PLAYBACK_WAITING: 'playbackWaiting';
259260
PROTECTION_CREATED: 'public_protectioncreated';
260261
PROTECTION_DESTROYED: 'public_protectiondestroyed';
261262
TRACK_CHANGE_RENDERED: 'trackChangeRendered';
@@ -462,6 +463,11 @@ declare namespace dashjs {
462463
timeToEnd: number;
463464
}
464465

466+
export interface PlaybackWaitingEvent extends Event {
467+
type: MediaPlayerEvents['PLAYBACK_WAITING'];
468+
playingTime: number | null;
469+
}
470+
465471
export interface ProtectionCreatedEvent extends Event {
466472
type: MediaPlayerEvents['PROTECTION_CREATED'];
467473
controller: object;

samples/getting-started-basic-embed/listening-to-events.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@
127127
<option>PLAYBACK_SEEKING</option>
128128
<option>PLAYBACK_STARTED</option>
129129
<option>PLAYBACK_TIME_UPDATED</option>
130+
<option>PLAYBACK_WAITING</option>
130131
<option>STREAM_INITIALIZED</option>
131132
<option>TEXT_TRACK_ADDED</option>
132133
<option>TEXT_TRACKS_ADDED</option>

src/streaming/MediaPlayerEvents.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ class MediaPlayerEvents extends EventsBase {
4646
* Check delay property in payload to determine time before playback will start.
4747
*/
4848
this.AST_IN_FUTURE = 'astInFuture';
49+
4950
/**
5051
* Triggered when the video element's buffer state changes to stalled.
5152
* Check mediaType in payload to determine type (Video, Audio, FragmentedText).
5253
* @event MediaPlayerEvents#BUFFER_EMPTY
5354
*/
5455
this.BUFFER_EMPTY = 'bufferStalled';
56+
5557
/**
5658
* Triggered when the video element's buffer state changes to loaded.
5759
* Check mediaType in payload to determine type (Video, Audio, FragmentedText).
@@ -76,52 +78,62 @@ class MediaPlayerEvents extends EventsBase {
7678
* @event MediaPlayerEvents#FRAGMENT_LOADING_COMPLETED
7779
*/
7880
this.FRAGMENT_LOADING_COMPLETED = 'fragmentLoadingCompleted';
81+
7982
/**
8083
* Triggered when a fragment download has started.
8184
* @event MediaPlayerEvents#FRAGMENT_LOADING_STARTED
8285
*/
8386
this.FRAGMENT_LOADING_STARTED = 'fragmentLoadingStarted';
87+
8488
/**
8589
* Triggered when a fragment download is abandoned due to detection of slow download base on the ABR abandon rule..
8690
* @event MediaPlayerEvents#FRAGMENT_LOADING_ABANDONED
8791
*/
8892
this.FRAGMENT_LOADING_ABANDONED = 'fragmentLoadingAbandoned';
93+
8994
/**
9095
* Triggered when {@link module:Debug} log method is called.
9196
* @event MediaPlayerEvents#LOG
9297
*/
9398
this.LOG = 'log';
99+
94100
//TODO refactor with internal event
95101
/**
96102
* Triggered when the manifest load is complete
97103
* @event MediaPlayerEvents#MANIFEST_LOADED
98104
*/
99105
this.MANIFEST_LOADED = 'manifestLoaded';
106+
100107
/**
101108
* Triggered anytime there is a change to the overall metrics.
102109
* @event MediaPlayerEvents#METRICS_CHANGED
103110
*/
104111
this.METRICS_CHANGED = 'metricsChanged';
112+
105113
/**
106114
* Triggered when an individual metric is added, updated or cleared.
107115
* @event MediaPlayerEvents#METRIC_CHANGED
108116
*/
109117
this.METRIC_CHANGED = 'metricChanged';
118+
110119
/**
111120
* Triggered every time a new metric is added.
112121
* @event MediaPlayerEvents#METRIC_ADDED
113122
*/
114123
this.METRIC_ADDED = 'metricAdded';
124+
115125
/**
116126
* Triggered every time a metric is updated.
117127
* @event MediaPlayerEvents#METRIC_UPDATED
118128
*/
119129
this.METRIC_UPDATED = 'metricUpdated';
130+
120131
/**
121132
* Triggered at the stream end of a period.
122133
* @event MediaPlayerEvents#PERIOD_SWITCH_COMPLETED
123134
*/
124135
this.PERIOD_SWITCH_COMPLETED = 'periodSwitchCompleted';
136+
125137
/**
126138
* Triggered when a new period starts.
127139
* @event MediaPlayerEvents#PERIOD_SWITCH_STARTED
@@ -169,6 +181,7 @@ class MediaPlayerEvents extends EventsBase {
169181
* @event MediaPlayerEvents#TEXT_TRACKS_ADDED
170182
*/
171183
this.TEXT_TRACKS_ADDED = 'allTextTracksAdded';
184+
172185
/**
173186
* Triggered when a text track is added to the video element's TextTrackList
174187
* @event MediaPlayerEvents#TEXT_TRACK_ADDED
@@ -201,46 +214,54 @@ class MediaPlayerEvents extends EventsBase {
201214
* @event MediaPlayerEvents#PLAYBACK_ERROR
202215
*/
203216
this.PLAYBACK_ERROR = 'playbackError';
217+
204218
/**
205219
* Sent when playback is not allowed (for example if user gesture is needed).
206220
* @event MediaPlayerEvents#PLAYBACK_NOT_ALLOWED
207221
*/
208222
this.PLAYBACK_NOT_ALLOWED = 'playbackNotAllowed';
223+
209224
/**
210225
* The media's metadata has finished loading; all attributes now
211226
* contain as much useful information as they're going to.
212227
* @event MediaPlayerEvents#PLAYBACK_METADATA_LOADED
213228
*/
214229
this.PLAYBACK_METADATA_LOADED = 'playbackMetaDataLoaded';
230+
215231
/**
216232
* Sent when playback is paused.
217233
* @event MediaPlayerEvents#PLAYBACK_PAUSED
218234
*/
219235
this.PLAYBACK_PAUSED = 'playbackPaused';
236+
220237
/**
221238
* Sent when the media begins to play (either for the first time, after having been paused,
222239
* or after ending and then restarting).
223240
*
224241
* @event MediaPlayerEvents#PLAYBACK_PLAYING
225242
*/
226243
this.PLAYBACK_PLAYING = 'playbackPlaying';
244+
227245
/**
228246
* Sent periodically to inform interested parties of progress downloading
229247
* the media. Information about the current amount of the media that has
230248
* been downloaded is available in the media element's buffered attribute.
231249
* @event MediaPlayerEvents#PLAYBACK_PROGRESS
232250
*/
233251
this.PLAYBACK_PROGRESS = 'playbackProgress';
252+
234253
/**
235254
* Sent when the playback speed changes.
236255
* @event MediaPlayerEvents#PLAYBACK_RATE_CHANGED
237256
*/
238257
this.PLAYBACK_RATE_CHANGED = 'playbackRateChanged';
258+
239259
/**
240260
* Sent when a seek operation completes.
241261
* @event MediaPlayerEvents#PLAYBACK_SEEKED
242262
*/
243263
this.PLAYBACK_SEEKED = 'playbackSeeked';
264+
244265
/**
245266
* Sent when a seek operation begins.
246267
* @event MediaPlayerEvents#PLAYBACK_SEEKING
@@ -260,11 +281,20 @@ class MediaPlayerEvents extends EventsBase {
260281
* @event MediaPlayerEvents#PLAYBACK_STARTED
261282
*/
262283
this.PLAYBACK_STARTED = 'playbackStarted';
284+
263285
/**
264286
* The time indicated by the element's currentTime attribute has changed.
265287
* @event MediaPlayerEvents#PLAYBACK_TIME_UPDATED
266288
*/
267289
this.PLAYBACK_TIME_UPDATED = 'playbackTimeUpdated';
290+
291+
/**
292+
* Sent when the media playback has stopped because of a temporary lack of data.
293+
*
294+
* @event MediaPlayerEvents#PLAYBACK_WAITING
295+
*/
296+
this.PLAYBACK_WAITING = 'playbackWaiting';
297+
268298
/**
269299
* Manifest validity changed - As a result of an MPD validity expiration event.
270300
* @event MediaPlayerEvents#MANIFEST_VALIDITY_CHANGED

src/streaming/controllers/PlaybackController.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,13 @@ function PlaybackController() {
381381
});
382382
}
383383

384+
function onPlaybackWaiting() {
385+
log('Native video element event: waiting');
386+
eventBus.trigger(Events.PLAYBACK_WAITING, {
387+
playingTime: getTime()
388+
});
389+
}
390+
384391
function onPlaybackPlaying() {
385392
log('Native video element event: playing');
386393
eventBus.trigger(Events.PLAYBACK_PLAYING, {
@@ -557,6 +564,7 @@ function PlaybackController() {
557564
function addAllListeners() {
558565
videoModel.addEventListener('canplay', onCanPlay);
559566
videoModel.addEventListener('play', onPlaybackStart);
567+
videoModel.addEventListener('waiting', onPlaybackWaiting);
560568
videoModel.addEventListener('playing', onPlaybackPlaying);
561569
videoModel.addEventListener('pause', onPlaybackPaused);
562570
videoModel.addEventListener('error', onPlaybackError);
@@ -572,6 +580,7 @@ function PlaybackController() {
572580
function removeAllListeners() {
573581
videoModel.removeEventListener('canplay', onCanPlay);
574582
videoModel.removeEventListener('play', onPlaybackStart);
583+
videoModel.removeEventListener('waiting', onPlaybackWaiting);
575584
videoModel.removeEventListener('playing', onPlaybackPlaying);
576585
videoModel.removeEventListener('pause', onPlaybackPaused);
577586
videoModel.removeEventListener('error', onPlaybackError);

0 commit comments

Comments
 (0)