aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src
diff options
context:
space:
mode:
Diffstat (limited to 'client/src')
-rw-r--r--client/src/assets/player/webtorrent/webtorrent-plugin.ts40
-rw-r--r--client/src/standalone/videos/embed-api.ts41
-rw-r--r--client/src/standalone/videos/test-embed.ts2
3 files changed, 25 insertions, 58 deletions
diff --git a/client/src/assets/player/webtorrent/webtorrent-plugin.ts b/client/src/assets/player/webtorrent/webtorrent-plugin.ts
index a464f02d5..1a1cd7f1a 100644
--- a/client/src/assets/player/webtorrent/webtorrent-plugin.ts
+++ b/client/src/assets/player/webtorrent/webtorrent-plugin.ts
@@ -178,7 +178,7 @@ class WebTorrentPlugin extends Plugin {
178 this.selectAppropriateResolution(true) 178 this.selectAppropriateResolution(true)
179 } 179 }
180 180
181 updateResolution (resolutionId: number, delay = 0) { 181 updateEngineResolution (resolutionId: number, delay = 0) {
182 // Remember player state 182 // Remember player state
183 const currentTime = this.player.currentTime() 183 const currentTime = this.player.currentTime()
184 const isPaused = this.player.paused() 184 const isPaused = this.player.paused()
@@ -236,6 +236,22 @@ class WebTorrentPlugin extends Plugin {
236 return this.currentVideoFile 236 return this.currentVideoFile
237 } 237 }
238 238
239 changeQuality (id: number) {
240 if (id === -1) {
241 if (this.autoResolutionPossible === true) {
242 this.autoResolution = true
243
244 this.selectAppropriateResolution(false)
245 }
246
247 return
248 }
249
250 this.autoResolution = false
251 this.updateEngineResolution(id)
252 this.selectAppropriateResolution(false)
253 }
254
239 private addTorrent ( 255 private addTorrent (
240 magnetOrTorrentUrl: string, 256 magnetOrTorrentUrl: string,
241 previousVideoFile: VideoFile, 257 previousVideoFile: VideoFile,
@@ -458,7 +474,7 @@ class WebTorrentPlugin extends Plugin {
458 } 474 }
459 475
460 if (changeResolution === true) { 476 if (changeResolution === true) {
461 this.updateResolution(file.resolution.id, changeResolutionDelay) 477 this.updateEngineResolution(file.resolution.id, changeResolutionDelay)
462 478
463 // Wait some seconds in observation of our new resolution 479 // Wait some seconds in observation of our new resolution
464 this.isAutoResolutionObservation = true 480 this.isAutoResolutionObservation = true
@@ -598,14 +614,14 @@ class WebTorrentPlugin extends Plugin {
598 label: this.buildQualityLabel(file), 614 label: this.buildQualityLabel(file),
599 height: file.resolution.id, 615 height: file.resolution.id,
600 selected: false, 616 selected: false,
601 selectCallback: () => this.qualitySwitchCallback(file.resolution.id) 617 selectCallback: () => this.changeQuality(file.resolution.id)
602 })) 618 }))
603 619
604 resolutions.push({ 620 resolutions.push({
605 id: -1, 621 id: -1,
606 label: this.player.localize('Auto'), 622 label: this.player.localize('Auto'),
607 selected: true, 623 selected: true,
608 selectCallback: () => this.qualitySwitchCallback(-1) 624 selectCallback: () => this.changeQuality(-1)
609 }) 625 })
610 626
611 this.player.peertubeResolutions().add(resolutions) 627 this.player.peertubeResolutions().add(resolutions)
@@ -621,22 +637,6 @@ class WebTorrentPlugin extends Plugin {
621 return label 637 return label
622 } 638 }
623 639
624 private qualitySwitchCallback (id: number) {
625 if (id === -1) {
626 if (this.autoResolutionPossible === true) {
627 this.autoResolution = true
628
629 this.selectAppropriateResolution(false)
630 }
631
632 return
633 }
634
635 this.autoResolution = false
636 this.updateResolution(id)
637 this.selectAppropriateResolution(false)
638 }
639
640 private selectAppropriateResolution (byEngine: boolean) { 640 private selectAppropriateResolution (byEngine: boolean) {
641 const resolution = this.autoResolution 641 const resolution = this.autoResolution
642 ? -1 642 ? -1
diff --git a/client/src/standalone/videos/embed-api.ts b/client/src/standalone/videos/embed-api.ts
index 8443cb7e9..a28aeeaef 100644
--- a/client/src/standalone/videos/embed-api.ts
+++ b/client/src/standalone/videos/embed-api.ts
@@ -64,19 +64,12 @@ export class PeerTubeEmbedApi {
64 if (this.isWebtorrent()) { 64 if (this.isWebtorrent()) {
65 if (resolutionId === -1 && this.embed.player.webtorrent().isAutoResolutionPossible() === false) return 65 if (resolutionId === -1 && this.embed.player.webtorrent().isAutoResolutionPossible() === false) return
66 66
67 // Auto resolution 67 this.embed.player.webtorrent().changeQuality(resolutionId)
68 if (resolutionId === -1) {
69 this.embed.player.webtorrent().enableAutoResolution()
70 return
71 }
72
73 this.embed.player.webtorrent().disableAutoResolution()
74 this.embed.player.webtorrent().updateResolution(resolutionId)
75 68
76 return 69 return
77 } 70 }
78 71
79 this.embed.player.p2pMediaLoader().getHLSJS().nextLevel = resolutionId 72 this.embed.player.p2pMediaLoader().getHLSJS().currentLevel = resolutionId
80 } 73 }
81 74
82 private getCaptions (): PeerTubeTextTrack[] { 75 private getCaptions (): PeerTubeTextTrack[] {
@@ -142,6 +135,8 @@ export class PeerTubeEmbedApi {
142 this.embed.player.peertubeResolutions().on('resolutionsAdded', () => this.loadResolutions()) 135 this.embed.player.peertubeResolutions().on('resolutionsAdded', () => this.loadResolutions())
143 this.embed.player.peertubeResolutions().on('resolutionChanged', () => this.loadResolutions()) 136 this.embed.player.peertubeResolutions().on('resolutionChanged', () => this.loadResolutions())
144 137
138 this.loadResolutions()
139
145 this.embed.player.on('volumechange', () => { 140 this.embed.player.on('volumechange', () => {
146 this.channel.notify({ 141 this.channel.notify({
147 method: 'volumeChange', 142 method: 'volumeChange',
@@ -150,37 +145,11 @@ export class PeerTubeEmbedApi {
150 }) 145 })
151 } 146 }
152 147
153 private loadWebTorrentResolutions () {
154 this.resolutions = []
155
156 const currentResolutionId = this.embed.player.webtorrent().getCurrentResolutionId()
157
158 for (const videoFile of this.embed.player.webtorrent().videoFiles) {
159 let label = videoFile.resolution.label
160 if (videoFile.fps && videoFile.fps >= 50) {
161 label += videoFile.fps
162 }
163
164 this.resolutions.push({
165 id: videoFile.resolution.id,
166 label,
167 src: videoFile.magnetUri,
168 active: videoFile.resolution.id === currentResolutionId,
169 height: videoFile.resolution.id
170 })
171 }
172
173 this.channel.notify({
174 method: 'resolutionUpdate',
175 params: this.resolutions
176 })
177 }
178
179 private loadResolutions () { 148 private loadResolutions () {
180 this.resolutions = this.embed.player.peertubeResolutions().getResolutions() 149 this.resolutions = this.embed.player.peertubeResolutions().getResolutions()
181 .map(r => ({ 150 .map(r => ({
182 id: r.id, 151 id: r.id,
183 label: r.height + 'p', 152 label: r.label,
184 active: r.selected, 153 active: r.selected,
185 width: r.width, 154 width: r.width,
186 height: r.height 155 height: r.height
diff --git a/client/src/standalone/videos/test-embed.ts b/client/src/standalone/videos/test-embed.ts
index 301c95d7b..7213cbf8b 100644
--- a/client/src/standalone/videos/test-embed.ts
+++ b/client/src/standalone/videos/test-embed.ts
@@ -84,8 +84,6 @@ window.addEventListener('load', async () => {
84 captionEl.innerHTML = '' 84 captionEl.innerHTML = ''
85 85
86 captions.forEach(c => { 86 captions.forEach(c => {
87 console.log(c)
88
89 if (c.mode === 'showing') { 87 if (c.mode === 'showing') {
90 const itemEl = document.createElement('strong') 88 const itemEl = document.createElement('strong')
91 itemEl.innerText = `${c.label} (active)` 89 itemEl.innerText = `${c.label} (active)`