mirror of https://github.com/Chocobozzz/PeerTube
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 mergedpull/681/head
parent
80d7cf3a15
commit
b7f1747dc7
|
@ -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 {
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
|
@ -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'
|
||||||
|
|
Loading…
Reference in New Issue