diff --git a/packages/live-share-media/src/MediaPlayerSynchronizer.ts b/packages/live-share-media/src/MediaPlayerSynchronizer.ts index d5cc88d2..5ad0d2c9 100644 --- a/packages/live-share-media/src/MediaPlayerSynchronizer.ts +++ b/packages/live-share-media/src/MediaPlayerSynchronizer.ts @@ -204,7 +204,9 @@ export class MediaPlayerSynchronizer extends EventEmitter { // needed because cannot tell if its a user initiated event, so disallow pause if ( this._expectedPlaybackState === "playing" && - !this._mediaSession.coordinator.isSuspended + !this._mediaSession.coordinator.isSuspended && + // some players have ended, but emit a pause event immediately before ended event. Do not play if ended + !this._player.ended ) { this._player.play(); } diff --git a/samples/javascript/21.react-media-template/src/utils/AzureMediaPlayer.js b/samples/javascript/21.react-media-template/src/utils/AzureMediaPlayer.js index e4e57e0f..cb377209 100644 --- a/samples/javascript/21.react-media-template/src/utils/AzureMediaPlayer.js +++ b/samples/javascript/21.react-media-template/src/utils/AzureMediaPlayer.js @@ -163,7 +163,9 @@ export class AzureMediaPlayer extends EventTarget { } get ended() { - return this._player.ended(); + // It is important that ended is reported properly. + // Some players like to reset at the end of playback and set ended to false. + return this._player.ended() || this._track.ended; } get autoplay() { @@ -357,9 +359,6 @@ export class AzureMediaPlayer extends EventTarget { this._applySkipTo(false); break; case PlayerEvent.ended: - this.load(); - this.play(); - this.pause(); this._stopPositionTracker(); this._track.ended = true; this._track.playing = false; diff --git a/samples/typescript/21.react-media-template/src/utils/AzureMediaPlayer.ts b/samples/typescript/21.react-media-template/src/utils/AzureMediaPlayer.ts index 064e91e9..1bb980cc 100644 --- a/samples/typescript/21.react-media-template/src/utils/AzureMediaPlayer.ts +++ b/samples/typescript/21.react-media-template/src/utils/AzureMediaPlayer.ts @@ -178,7 +178,9 @@ export class AzureMediaPlayer extends EventTarget { } get ended(): boolean { - return this._player.ended(); + // It is important that ended is reported properly. + // Some players like to reset at the end of playback and set ended to false. + return this._player.ended() || this._track.ended; } get autoplay(): boolean { @@ -372,9 +374,6 @@ export class AzureMediaPlayer extends EventTarget { // this._applySkipTo(false); break; case PlayerEvent.ended: - this.load(); - this.play(); - this.pause(); this._stopPositionTracker(); this._track.ended = true; this._track.playing = false;