From 1d2911ed568266a130da06d7b5ad2b426ec99a79 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 6 Sep 2021 19:38:00 +0530 Subject: [PATCH 1/5] Port "Add support for LBRY's HLS streams" See https://github.com/TeamPiped/Piped/commit/3dc0287dffd8c672e656fb8eef13a2e4c1a973e0 --- src/components/Player.vue | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/components/Player.vue b/src/components/Player.vue index a9bc610..05dfba3 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -62,7 +62,7 @@ export default { } }, methods: { - loadVideo () { + async loadVideo () { const component = this const videoEl = this.$refs.videoEl @@ -78,12 +78,14 @@ export default { streams.push(...this.video.videoStreams) const MseSupport = window.MediaSource !== undefined + const lbry = this.video.videoStreams.filter(stream => stream.quality === 'LBRY')[0] - let uri + let uri, mime if (this.video.livestream) { uri = this.video.hls - } else if (this.video.audioStreams.length > 0 && MseSupport) { + mime = 'application/x-mpegURL' + } else if (this.video.audioStreams.length > 0 && !lbry && MseSupport) { if (!this.video.dash) { const dash = DashUtils.generate_dash_file_from_formats( streams, @@ -93,6 +95,14 @@ export default { } else { uri = this.video.dash } + mime = 'application/dash+xml' + } else if (lbry) { + const contentType = await fetch(uri, { + method: 'HEAD' + }).then(response => response.headers.get('Content-Type')) + + mime = contentType + uri = lbry.uri } else { uri = this.video.videoStreams.filter(stream => stream.codec == null).slice(-1)[0].url } @@ -101,17 +111,22 @@ export default { shaka.polyfill.installAll() const localPlayer = new shaka.Player(videoEl) + const proxyHost = new URL(component.video.proxyUrl).host localPlayer.getNetworkingEngine().registerRequestFilter((_type, request) => { const uri = request.uris[0] const url = new URL(uri) - if (url.host.endsWith('.googlevideo.com')) { + const headers = request.headers + if ( + url.host.endsWith('.googlevideo.com') || + (url.host.endsWith('.lbryplayer.xyz') && headers.Range) + ) { url.searchParams.set('host', url.host) - url.host = new URL(component.video.proxyUrl).host + url.host = proxyHost request.uris[0] = url.toString() } + if (url.pathname === '/videoplayback') { - const headers = request.headers if (headers.Range) { url.searchParams.set('range', headers.Range.split('=')[1]) request.headers = {} @@ -125,8 +140,8 @@ export default { Math.max(this.$store.getters.getPreferenceNumber('bufferGoal', 10), 10) ) - this.setPlayerAttrs(localPlayer, videoEl, uri, shaka) - } else this.setPlayerAttrs(this.player, videoEl, uri, shaka) + this.setPlayerAttrs(localPlayer, videoEl, uri, mime, shaka) + } else this.setPlayerAttrs(this.player, videoEl, uri, mime, shaka) if (noPrevPlayer) { videoEl.addEventListener('timeupdate', () => { @@ -176,7 +191,7 @@ export default { // TODO: Add sponsors on seekbar: https://github.com/ajayyy/SponsorBlock/blob/e39de9fd852adb9196e0358ed827ad38d9933e29/src/js-components/previewBar.ts#L12 }, - setPlayerAttrs (localPlayer, videoEl, uri, shaka) { + setPlayerAttrs (localPlayer, videoEl, uri, mime, shaka) { if (!this.ui) { this.ui = new shaka.ui.Overlay(localPlayer, this.$refs.container, videoEl) @@ -211,7 +226,7 @@ export default { quality > 0 && (this.video.audioStreams.length > 0 || this.video.livestream) && !disableVideo if (qualityConds) this.player.configure('abr.enabled', false) - player.load(uri, 0, uri.indexOf('dash') >= 0 ? 'application/dash+xml' : 'video/mp4').then(() => { + player.load(uri, 0, mime).then(() => { if (qualityConds) { let leastDiff = Number.MAX_VALUE let bestStream = null From 16776b206da23b9fb90e07d90e5c8a121a62055b Mon Sep 17 00:00:00 2001 From: root Date: Sun, 3 Oct 2021 12:54:31 +0530 Subject: [PATCH 2/5] Fixes issue & relayout --- src/App.vue | 50 ++++++++++++++-------------------- src/routes/TrendingPage.vue | 4 +-- src/store/watched-videos-db.js | 6 ++-- 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/src/App.vue b/src/App.vue index 2d4e7ff..51e0485 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,36 +5,26 @@ color="primary" dark > - - - - - - {{ $t(link.name) }} - - - - - - - - - - + + {{ $t(link.name) }} + + + diff --git a/src/routes/TrendingPage.vue b/src/routes/TrendingPage.vue index 04978da..8b97cac 100644 --- a/src/routes/TrendingPage.vue +++ b/src/routes/TrendingPage.vue @@ -5,7 +5,7 @@ - + @@ -47,7 +47,7 @@ export default { }, computed: { chunkedByFour () { - return _chunk(this.videos, 4) + return _chunk(this.videos, 6) } }, components: { diff --git a/src/store/watched-videos-db.js b/src/store/watched-videos-db.js index 8a946f1..0cfe416 100644 --- a/src/store/watched-videos-db.js +++ b/src/store/watched-videos-db.js @@ -13,8 +13,10 @@ export const WatchedVideosDB = new PouchDB('WatchedVideosDB', { export async function addWatchedVideo (videoObj, currentUrl) { return WatchedVideosDB.put({ _id: generateRandomID(), - video: videoObj, - url: currentUrl, + video: { + ...videoObj, + url: currentUrl + }, timestamp: new Date() }) } From 2dde9fc7808631ab8b4252997f62e2738e61dc01 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 3 Oct 2021 21:00:07 +0530 Subject: [PATCH 3/5] Revert back to old app bar layout --- src/App.vue | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/App.vue b/src/App.vue index 51e0485..2d4e7ff 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,26 +5,36 @@ color="primary" dark > - - {{ $t(link.name) }} - - - + + + + + + {{ $t(link.name) }} + + + + + + + + + + From b9ecb06f6192b913734bb25699a6bc45f9a4542d Mon Sep 17 00:00:00 2001 From: root Date: Sun, 3 Oct 2021 21:01:09 +0530 Subject: [PATCH 4/5] Don't need to git add anymore --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index da2e6cd..78a06c8 100644 --- a/package.json +++ b/package.json @@ -74,8 +74,7 @@ "license": "AGPL-3.0-or-later", "lint-staged": { "*.{js,jsx,vue}": [ - "vue-cli-service lint", - "git add" + "vue-cli-service lint" ] } } From 96e40e9faf7681a5daa4ee5678a62f2052e5efb5 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 Oct 2021 22:08:12 +0530 Subject: [PATCH 5/5] Port "Store preferred playback rate" and "Fix safari fullscreen" --- src/components/Player.vue | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/components/Player.vue b/src/components/Player.vue index 05dfba3..a3a6859 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -22,6 +22,10 @@ left: auto !important; } +.shaka-video-container:-webkit-full-screen { + max-height: none !important; +} + .shaka-text-container * { background-color: rgba(8, 8, 8, 0.75) !important; color: white !important; @@ -167,6 +171,13 @@ export default { }) }) + videoEl.addEventListener('ratechange', () => { + this.$store.commit('setPrefs', { + id: 'rate', + value: videoEl.playbackRate + }) + }) + videoEl.addEventListener('ended', () => { if (!this.selectedAutoLoop && this.selectedAutoPlay && this.video.relatedStreams.length > 0) { const params = this.$route.query @@ -254,6 +265,7 @@ export default { ) }) videoEl.volume = this.$store.getters.getPreferenceNumber('volume', 1) + videoEl.playbackRate = this.$store.getters.getPreferenceNumber('rate', 1) }) } },