Cleanup peertube plugin after dispose
This commit is contained in:
parent
877b0528f8
commit
7ee4a4af0b
|
@ -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 () {
|
||||||
|
|
Loading…
Reference in New Issue