playerElement: HTMLVideoElement
userRating: UserVideoRateType = null
video: VideoDetails = null
- videoPlayerLoaded = false
videoNotFound = false
descriptionLoading = false
private otherVideos: Video[] = []
private paramsSub: Subscription
- private videojsInstance: videojs.Player
constructor (
private elementRef: ElementRef,
)
this.paramsSub = this.route.params.subscribe(routeParams => {
- if (this.videoPlayerLoaded) {
+ if (this.player) {
this.player.pause()
}
}
ngOnDestroy () {
- // Remove player if it exists
- if (this.videoPlayerLoaded === true) {
- videojs(this.playerElement).dispose()
- }
+ this.flushPlayer()
// Unsubscribe subscriptions
this.paramsSub.unsubscribe()
if (res === false) return this.redirectService.redirectToHomepage()
}
- // Player was already loaded, remove old videojs
- if (this.videojsInstance) {
- this.videojsInstance.dispose()
- this.videojsInstance = undefined
- }
+ // Flush old player if needed
+ this.flushPlayer()
// Build video element, because videojs remove it on dispose
const playerElementWrapper = this.elementRef.nativeElement.querySelector('#video-element-wrapper')
const videojsOptions = getVideojsOptions({
autoplay: this.isAutoplay(),
- inactivityTimeout: 4000,
+ inactivityTimeout: 2500,
videoFiles: this.video.files,
playerElement: this.playerElement,
videoViewUrl: this.videoService.getVideoViewUrl(this.video.uuid),
poster: this.video.previewUrl
})
- this.videoPlayerLoaded = true
-
const self = this
this.zone.runOutsideAngular(() => {
- self.videojsInstance = videojs(this.playerElement, videojsOptions, function () {
+ videojs(this.playerElement, videojsOptions, function () {
self.player = this
this.on('customError', (event, data) => self.handleError(data.err))
})
// Be sure the autoPlay is set to false
return this.user.autoPlayVideo !== false
}
+
+ private flushPlayer () {
+ // Remove player if it exists
+ if (this.player) {
+ this.player.dispose()
+ this.player = undefined
+ }
+ }
}