mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-03 01:39:37 +02:00
Separate HLS audio and video streams
Allows: * The HLS player to propose an "Audio only" resolution * The live to output an "Audio only" resolution * The live to ingest and output an "Audio only" stream This feature is under a config for VOD videos and is enabled by default for lives In the future we can imagine: * To propose multiple audio streams for a specific video * To ingest an audio only VOD and just output an audio only "video" (the player would play the audio file and PeerTube would not generate additional resolutions) This commit introduce a new way to download videos: * Add "/download/videos/generate/:videoId" endpoint where PeerTube can mux an audio only and a video only file to a mp4 container * The download client modal introduces a new default panel where the user can choose resolutions it wants to download
This commit is contained in:
parent
e77ba2dfbc
commit
816f346a60
186 changed files with 5748 additions and 2807 deletions
|
@ -24,7 +24,8 @@ import {
|
|||
PlaylistFetcher,
|
||||
PlaylistTracker,
|
||||
Translations,
|
||||
VideoFetcher
|
||||
VideoFetcher,
|
||||
getBackendUrl
|
||||
} from './shared'
|
||||
import { PlayerHTML } from './shared/player-html'
|
||||
|
||||
|
@ -58,7 +59,7 @@ export class PeerTubeEmbed {
|
|||
private requiresPassword: boolean
|
||||
|
||||
constructor (videoWrapperId: string) {
|
||||
logger.registerServerSending(window.location.origin)
|
||||
logger.registerServerSending(getBackendUrl())
|
||||
|
||||
this.http = new AuthHTTP()
|
||||
|
||||
|
@ -73,7 +74,9 @@ export class PeerTubeEmbed {
|
|||
try {
|
||||
this.config = JSON.parse((window as any)['PeerTubeServerConfig'])
|
||||
} catch (err) {
|
||||
logger.error('Cannot parse HTML config.', err)
|
||||
if (!(import.meta as any).env.DEV) {
|
||||
logger.error('Cannot parse HTML config.', err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,12 +93,12 @@ export class PeerTubeEmbed {
|
|||
// ---------------------------------------------------------------------------
|
||||
|
||||
async init () {
|
||||
this.translationsPromise = TranslationsManager.getServerTranslations(window.location.origin, navigator.language)
|
||||
this.translationsPromise = TranslationsManager.getServerTranslations(getBackendUrl(), navigator.language)
|
||||
this.PeerTubePlayerManagerModulePromise = import('../../assets/player/peertube-player')
|
||||
|
||||
// Issue when we parsed config from HTML, fallback to API
|
||||
if (!this.config) {
|
||||
this.config = await this.http.fetch('/api/v1/config', { optionalAuth: false })
|
||||
this.config = await this.http.fetch(getBackendUrl() + '/api/v1/config', { optionalAuth: false })
|
||||
.then(res => res.json())
|
||||
}
|
||||
|
||||
|
@ -265,7 +268,7 @@ export class PeerTubeEmbed {
|
|||
|
||||
// If already played, we are in a playlist so we don't want to display the poster between videos
|
||||
if (!this.alreadyPlayed) {
|
||||
this.peertubePlayer.setPoster(window.location.origin + video.previewPath)
|
||||
this.peertubePlayer.setPoster(getBackendUrl() + video.previewPath)
|
||||
}
|
||||
|
||||
const playlist = this.playlistTracker
|
||||
|
@ -351,6 +354,16 @@ export class PeerTubeEmbed {
|
|||
// ---------------------------------------------------------------------------
|
||||
|
||||
private getResourceId () {
|
||||
const search = window.location.search
|
||||
|
||||
if (search.startsWith('?videoId=')) {
|
||||
return search.replace(/^\?videoId=/, '')
|
||||
}
|
||||
|
||||
if (search.startsWith('?videoPlaylistId=')) {
|
||||
return search.replace(/^\?videoPlaylistId=/, '')
|
||||
}
|
||||
|
||||
const urlParts = window.location.pathname.split('/')
|
||||
return urlParts[urlParts.length - 1]
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue