Create webtorrent client on player load

So we don't run Angular change detection every 250ms on webtorrent
import, when https://github.com/mafintosh/speedometer/pull/7 will be
merged
This commit is contained in:
Chocobozzz 2018-06-18 09:28:08 +02:00
parent 80d7cf3a15
commit b7f1747dc7
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
3 changed files with 25 additions and 26 deletions

View File

@ -16,7 +16,7 @@ import { MenuComponent } from './menu'
import { SharedModule } from './shared' import { SharedModule } from './shared'
import { SignupModule } from './signup' import { SignupModule } from './signup'
import { VideosModule } from './videos' import { VideosModule } from './videos'
import { buildFileLocale, getCompleteLocale, getDefaultLocale, isDefaultLocale } from '../../../shared/models/i18n' import { buildFileLocale, getCompleteLocale, isDefaultLocale } from '../../../shared/models/i18n'
import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils' import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils'
export function metaFactory (serverService: ServerService): MetaLoader { export function metaFactory (serverService: ServerService): MetaLoader {

View File

@ -17,23 +17,7 @@ import {
import * as CacheChunkStore from 'cache-chunk-store' import * as CacheChunkStore from 'cache-chunk-store'
import { PeertubeChunkStore } from './peertube-chunk-store' import { PeertubeChunkStore } from './peertube-chunk-store'
const webtorrent = new WebTorrent({ const Plugin: VideoJSComponentInterface = videojs.getPlugin('plugin')
tracker: {
rtcConfig: {
iceServers: [
{
urls: 'stun:stun.stunprotocol.org'
},
{
urls: 'stun:stun.framasoft.org'
}
]
}
},
dht: false
})
const Plugin: VideoJSComponentInterface = videojsUntyped.getPlugin('plugin')
class PeerTubePlugin extends Plugin { class PeerTubePlugin extends Plugin {
private readonly playerElement: HTMLVideoElement private readonly playerElement: HTMLVideoElement
@ -52,9 +36,26 @@ class PeerTubePlugin extends Plugin {
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 readonly webtorrent = new WebTorrent({
tracker: {
rtcConfig: {
iceServers: [
{
urls: 'stun:stun.stunprotocol.org'
},
{
urls: 'stun:stun.framasoft.org'
}
]
}
},
dht: false
})
private player: any private player: any
private currentVideoFile: VideoFile private currentVideoFile: VideoFile
private torrent: WebTorrent.Torrent private torrent: WebTorrent.Torrent
private renderer
private fakeRenderer private fakeRenderer
private autoResolution = true private autoResolution = true
private isAutoResolutionObservation = false private isAutoResolutionObservation = false
@ -194,7 +195,7 @@ class PeerTubePlugin extends Plugin {
}) })
} }
this.torrent = webtorrent.add(magnetOrTorrentUrl, torrentOptions, torrent => { this.torrent = this.webtorrent.add(magnetOrTorrentUrl, torrentOptions, torrent => {
console.log('Added ' + magnetOrTorrentUrl + '.') console.log('Added ' + magnetOrTorrentUrl + '.')
if (oldTorrent) { if (oldTorrent) {
@ -287,10 +288,10 @@ class PeerTubePlugin extends Plugin {
} }
flushVideoFile (videoFile: VideoFile, destroyRenderer = true) { flushVideoFile (videoFile: VideoFile, destroyRenderer = true) {
if (videoFile !== undefined && webtorrent.get(videoFile.magnetUri)) { if (videoFile !== undefined && this.webtorrent.get(videoFile.magnetUri)) {
if (destroyRenderer === true && this.renderer && this.renderer.destroy) this.renderer.destroy() if (destroyRenderer === true && this.renderer && this.renderer.destroy) this.renderer.destroy()
webtorrent.remove(videoFile.magnetUri) this.webtorrent.remove(videoFile.magnetUri)
console.log('Removed ' + videoFile.magnetUri) console.log('Removed ' + videoFile.magnetUri)
} }
} }
@ -460,8 +461,8 @@ class PeerTubePlugin extends Plugin {
// Http fallback // Http fallback
if (this.torrent === null) return this.trigger('torrentInfo', false) if (this.torrent === null) return this.trigger('torrentInfo', false)
// webtorrent.downloadSpeed because we need to take into account the potential old torrent too // this.webtorrent.downloadSpeed because we need to take into account the potential old torrent too
if (webtorrent.downloadSpeed !== 0) this.downloadSpeeds.push(webtorrent.downloadSpeed) if (this.webtorrent.downloadSpeed !== 0) this.downloadSpeeds.push(this.webtorrent.downloadSpeed)
return this.trigger('torrentInfo', { return this.trigger('torrentInfo', {
downloadSpeed: this.torrent.downloadSpeed, downloadSpeed: this.torrent.downloadSpeed,
@ -596,5 +597,5 @@ class PeerTubePlugin extends Plugin {
} }
} }
videojsUntyped.registerPlugin('peertube', PeerTubePlugin) videojs.registerPlugin('peertube', PeerTubePlugin)
export { PeerTubePlugin } export { PeerTubePlugin }

View File

@ -1,6 +1,4 @@
import { isTestInstance } from '../../helpers/core-utils'
import { logger } from '../../helpers/logger' import { logger } from '../../helpers/logger'
import { JobQueue } from '../job-queue'
import { AbstractScheduler } from './abstract-scheduler' import { AbstractScheduler } from './abstract-scheduler'
import { ScheduleVideoUpdateModel } from '../../models/video/schedule-video-update' import { ScheduleVideoUpdateModel } from '../../models/video/schedule-video-update'
import { retryTransactionWrapper } from '../../helpers/database-utils' import { retryTransactionWrapper } from '../../helpers/database-utils'