aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/assets/player/shared/stats/stats-card.ts
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/assets/player/shared/stats/stats-card.ts')
-rw-r--r--client/src/assets/player/shared/stats/stats-card.ts45
1 files changed, 33 insertions, 12 deletions
diff --git a/client/src/assets/player/shared/stats/stats-card.ts b/client/src/assets/player/shared/stats/stats-card.ts
index 471a5e46c..fad68cec9 100644
--- a/client/src/assets/player/shared/stats/stats-card.ts
+++ b/client/src/assets/player/shared/stats/stats-card.ts
@@ -7,7 +7,7 @@ import { bytes } from '../common'
7interface StatsCardOptions extends videojs.ComponentOptions { 7interface StatsCardOptions extends videojs.ComponentOptions {
8 videoUUID: string 8 videoUUID: string
9 videoIsLive: boolean 9 videoIsLive: boolean
10 mode: 'webtorrent' | 'p2p-media-loader' 10 mode: 'web-video' | 'p2p-media-loader'
11 p2pEnabled: boolean 11 p2pEnabled: boolean
12} 12}
13 13
@@ -34,7 +34,7 @@ class StatsCard extends Component {
34 34
35 updateInterval: any 35 updateInterval: any
36 36
37 mode: 'webtorrent' | 'p2p-media-loader' 37 mode: 'web-video' | 'p2p-media-loader'
38 38
39 metadataStore: any = {} 39 metadataStore: any = {}
40 40
@@ -63,6 +63,9 @@ class StatsCard extends Component {
63 63
64 private liveLatency: InfoElement 64 private liveLatency: InfoElement
65 65
66 private onP2PInfoHandler: (_event: any, data: EventPlayerNetworkInfo) => void
67 private onHTTPInfoHandler: (_event: any, data: EventPlayerNetworkInfo) => void
68
66 createEl () { 69 createEl () {
67 this.containerEl = videojs.dom.createEl('div', { 70 this.containerEl = videojs.dom.createEl('div', {
68 className: 'vjs-stats-content' 71 className: 'vjs-stats-content'
@@ -86,9 +89,7 @@ class StatsCard extends Component {
86 89
87 this.populateInfoBlocks() 90 this.populateInfoBlocks()
88 91
89 this.player_.on('p2pInfo', (event: any, data: EventPlayerNetworkInfo) => { 92 this.onP2PInfoHandler = (_event, data) => {
90 if (!data) return // HTTP fallback
91
92 this.mode = data.source 93 this.mode = data.source
93 94
94 const p2pStats = data.p2p 95 const p2pStats = data.p2p
@@ -105,11 +106,29 @@ class StatsCard extends Component {
105 this.playerNetworkInfo.downloadedFromServer = bytes(httpStats.downloaded).join(' ') 106 this.playerNetworkInfo.downloadedFromServer = bytes(httpStats.downloaded).join(' ')
106 this.playerNetworkInfo.downloadedFromPeers = bytes(p2pStats.downloaded).join(' ') 107 this.playerNetworkInfo.downloadedFromPeers = bytes(p2pStats.downloaded).join(' ')
107 } 108 }
108 }) 109 }
110
111 this.onHTTPInfoHandler = (_event, data) => {
112 this.mode = data.source
113
114 this.playerNetworkInfo.totalDownloaded = bytes(data.http.downloaded).join(' ')
115 }
116
117 this.player().on('p2p-info', this.onP2PInfoHandler)
118 this.player().on('http-info', this.onHTTPInfoHandler)
109 119
110 return this.containerEl 120 return this.containerEl
111 } 121 }
112 122
123 dispose () {
124 if (this.updateInterval) clearInterval(this.updateInterval)
125
126 this.player().off('p2p-info', this.onP2PInfoHandler)
127 this.player().off('http-info', this.onHTTPInfoHandler)
128
129 super.dispose()
130 }
131
113 toggle () { 132 toggle () {
114 if (this.updateInterval) this.hide() 133 if (this.updateInterval) this.hide()
115 else this.show() 134 else this.show()
@@ -122,7 +141,7 @@ class StatsCard extends Component {
122 try { 141 try {
123 const options = this.mode === 'p2p-media-loader' 142 const options = this.mode === 'p2p-media-loader'
124 ? this.buildHLSOptions() 143 ? this.buildHLSOptions()
125 : await this.buildWebTorrentOptions() // Default 144 : await this.buildWebVideoOptions() // Default
126 145
127 this.populateInfoValues(options) 146 this.populateInfoValues(options)
128 } catch (err) { 147 } catch (err) {
@@ -170,8 +189,8 @@ class StatsCard extends Component {
170 } 189 }
171 } 190 }
172 191
173 private async buildWebTorrentOptions () { 192 private async buildWebVideoOptions () {
174 const videoFile = this.player_.webtorrent().getCurrentVideoFile() 193 const videoFile = this.player_.webVideo().getCurrentVideoFile()
175 194
176 if (!this.metadataStore[videoFile.fileUrl]) { 195 if (!this.metadataStore[videoFile.fileUrl]) {
177 this.metadataStore[videoFile.fileUrl] = await fetch(videoFile.metadataUrl).then(res => res.json()) 196 this.metadataStore[videoFile.fileUrl] = await fetch(videoFile.metadataUrl).then(res => res.json())
@@ -194,7 +213,7 @@ class StatsCard extends Component {
194 213
195 const resolution = videoFile?.resolution.label + videoFile?.fps 214 const resolution = videoFile?.resolution.label + videoFile?.fps
196 const buffer = this.timeRangesToString(this.player_.buffered()) 215 const buffer = this.timeRangesToString(this.player_.buffered())
197 const progress = this.player_.webtorrent().getTorrent()?.progress 216 const progress = this.player_.bufferedPercent()
198 217
199 return { 218 return {
200 playerNetworkInfo: this.playerNetworkInfo, 219 playerNetworkInfo: this.playerNetworkInfo,
@@ -284,8 +303,10 @@ class StatsCard extends Component {
284 ? `${(progress * 100).toFixed(1)}% (${(progress * duration).toFixed(1)}s)` 303 ? `${(progress * 100).toFixed(1)}% (${(progress * duration).toFixed(1)}s)`
285 : undefined 304 : undefined
286 305
287 this.setInfoValue(this.playerMode, this.mode || 'HTTP') 306 const p2pEnabled = this.options_.p2pEnabled && this.mode === 'p2p-media-loader'
288 this.setInfoValue(this.p2p, player.localize(this.options_.p2pEnabled ? 'enabled' : 'disabled')) 307
308 this.setInfoValue(this.playerMode, this.mode)
309 this.setInfoValue(this.p2p, player.localize(p2pEnabled ? 'enabled' : 'disabled'))
289 this.setInfoValue(this.uuid, this.options_.videoUUID) 310 this.setInfoValue(this.uuid, this.options_.videoUUID)
290 311
291 this.setInfoValue(this.viewport, frames) 312 this.setInfoValue(this.viewport, frames)