Cleanup peertube plugin after dispose

This commit is contained in:
Chocobozzz 2018-04-05 16:50:08 +02:00
parent 877b0528f8
commit 7ee4a4af0b
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
1 changed files with 25 additions and 11 deletions

View File

@ -44,19 +44,23 @@ class PeerTubePlugin extends Plugin {
INFO_SCHEDULER: 1000, // Don't change this INFO_SCHEDULER: 1000, // Don't change this
AUTO_QUALITY_SCHEDULER: 3000, // Check quality every 3 seconds AUTO_QUALITY_SCHEDULER: 3000, // Check quality every 3 seconds
AUTO_QUALITY_THRESHOLD_PERCENT: 30, // Bandwidth should be 30% more important than a resolution bitrate to change to it AUTO_QUALITY_THRESHOLD_PERCENT: 30, // Bandwidth should be 30% more important than a resolution bitrate to change to it
AUTO_QUALITY_OBSERVATION_TIME: 10000, // Wait 10 seconds before potentially changing the definition AUTO_QUALITY_OBSERVATION_TIME: 10000, // Wait 10 seconds after having change the resolution before another check
AUTO_QUALITY_UPPER_RESOLUTION_DELAY: 5000, // Buffer upper resolution during 5 seconds AUTO_QUALITY_HIGHER_RESOLUTION_DELAY: 5000, // Buffering higher resolution during 5 seconds
BANDWIDTH_AVERAGE_NUMBER_OF_VALUES: 5 // Last 5 seconds to build average bandwidth BANDWIDTH_AVERAGE_NUMBER_OF_VALUES: 5 // Last 5 seconds to build average bandwidth
} }
private player: any private player: any
private currentVideoFile: VideoFile private currentVideoFile: VideoFile
private torrent: WebTorrent.Torrent private torrent: WebTorrent.Torrent
private autoResolution = true
private isAutoResolutionObservation = false
private videoViewInterval private videoViewInterval
private torrentInfoInterval private torrentInfoInterval
private autoQualityInterval private autoQualityInterval
private autoResolution = true private addTorrentDelay
private isAutoResolutionObservation = false private qualityObservationTimer
private runAutoQualitySchedulerTimer
private downloadSpeeds: number[] = [] private downloadSpeeds: number[] = []
@ -91,7 +95,9 @@ class PeerTubePlugin extends Plugin {
this.player.one('play', () => { this.player.one('play', () => {
// Don't run immediately scheduler, wait some seconds the TCP connections are maid // Don't run immediately scheduler, wait some seconds the TCP connections are maid
setTimeout(() => this.runAutoQualityScheduler(), this.CONSTANTS.AUTO_QUALITY_SCHEDULER) this.runAutoQualitySchedulerTimer = setTimeout(() => {
this.runAutoQualityScheduler()
}, this.CONSTANTS.AUTO_QUALITY_SCHEDULER)
}) })
}) })
@ -102,6 +108,10 @@ class PeerTubePlugin extends Plugin {
} }
dispose () { dispose () {
clearTimeout(this.addTorrentDelay)
clearTimeout(this.qualityObservationTimer)
clearTimeout(this.runAutoQualitySchedulerTimer)
clearInterval(this.videoViewInterval) clearInterval(this.videoViewInterval)
clearInterval(this.torrentInfoInterval) clearInterval(this.torrentInfoInterval)
clearInterval(this.autoQualityInterval) clearInterval(this.autoQualityInterval)
@ -167,7 +177,7 @@ class PeerTubePlugin extends Plugin {
oldTorrent.removePeer(oldTorrent['ws']) oldTorrent.removePeer(oldTorrent['ws'])
} }
setTimeout(() => { this.addTorrentDelay = setTimeout(() => {
this.flushVideoFile(previousVideoFile) this.flushVideoFile(previousVideoFile)
const options = { autoplay: true, controls: true } const options = { autoplay: true, controls: true }
@ -265,7 +275,7 @@ class PeerTubePlugin extends Plugin {
const fileBitrate = (f.size / this.videoDuration) const fileBitrate = (f.size / this.videoDuration)
let threshold = fileBitrate let threshold = fileBitrate
// If this is for a higher resolution, or an initial load -> add a upper margin // If this is for a higher resolution or an initial load: add a margin
if (!this.currentVideoFile || f.resolution.id > this.currentVideoFile.resolution.id) { if (!this.currentVideoFile || f.resolution.id > this.currentVideoFile.resolution.id) {
threshold += ((fileBitrate * this.CONSTANTS.AUTO_QUALITY_THRESHOLD_PERCENT) / 100) threshold += ((fileBitrate * this.CONSTANTS.AUTO_QUALITY_THRESHOLD_PERCENT) / 100)
} }
@ -313,6 +323,7 @@ class PeerTubePlugin extends Plugin {
private runAutoQualityScheduler () { private runAutoQualityScheduler () {
this.autoQualityInterval = setInterval(() => { this.autoQualityInterval = setInterval(() => {
// Not initialized or in HTTP fallback // Not initialized or in HTTP fallback
if (this.torrent === undefined || this.torrent === null) return if (this.torrent === undefined || this.torrent === null) return
if (this.isAutoResolutionOn() === false) return if (this.isAutoResolutionOn() === false) return
@ -326,10 +337,10 @@ class PeerTubePlugin extends Plugin {
if (this.isPlayerWaiting() && file.resolution.id < this.currentVideoFile.resolution.id) { if (this.isPlayerWaiting() && file.resolution.id < this.currentVideoFile.resolution.id) {
console.log('Downgrading automatically the resolution to: %s', file.resolution.label) console.log('Downgrading automatically the resolution to: %s', file.resolution.label)
changeResolution = true changeResolution = true
} else if (file.resolution.id > this.currentVideoFile.resolution.id) { // Greater resolution } else if (file.resolution.id > this.currentVideoFile.resolution.id) { // Higher resolution
console.log('Upgrading automatically the resolution to: %s', file.resolution.label) console.log('Upgrading automatically the resolution to: %s', file.resolution.label)
changeResolution = true changeResolution = true
changeResolutionDelay = this.CONSTANTS.AUTO_QUALITY_UPPER_RESOLUTION_DELAY changeResolutionDelay = this.CONSTANTS.AUTO_QUALITY_HIGHER_RESOLUTION_DELAY
} }
if (changeResolution === true) { if (changeResolution === true) {
@ -337,13 +348,16 @@ class PeerTubePlugin extends Plugin {
// Wait some seconds in observation of our new resolution // Wait some seconds in observation of our new resolution
this.isAutoResolutionObservation = true this.isAutoResolutionObservation = true
setTimeout(() => this.isAutoResolutionObservation = false, this.CONSTANTS.AUTO_QUALITY_OBSERVATION_TIME)
this.qualityObservationTimer = setTimeout(() => {
this.isAutoResolutionObservation = false
}, this.CONSTANTS.AUTO_QUALITY_OBSERVATION_TIME)
} }
}, this.CONSTANTS.AUTO_QUALITY_SCHEDULER) }, this.CONSTANTS.AUTO_QUALITY_SCHEDULER)
} }
private isPlayerWaiting () { private isPlayerWaiting () {
return this.player.hasClass('vjs-waiting') return this.player && this.player.hasClass('vjs-waiting')
} }
private runTorrentInfoScheduler () { private runTorrentInfoScheduler () {