mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-04 02:09: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
|
@ -17,7 +17,7 @@ export interface PeerTubeRequestError extends Error {
|
|||
requestHeaders?: any
|
||||
}
|
||||
|
||||
type PeerTubeRequestOptions = {
|
||||
export type PeerTubeRequestOptions = {
|
||||
timeout?: number
|
||||
activityPub?: boolean
|
||||
bodyKBLimit?: number // 1MB
|
||||
|
@ -35,7 +35,7 @@ type PeerTubeRequestOptions = {
|
|||
followRedirect?: boolean
|
||||
} & Pick<OptionsInit, 'headers' | 'json' | 'method' | 'searchParams'>
|
||||
|
||||
const peertubeGot = got.extend({
|
||||
export const peertubeGot = got.extend({
|
||||
...getAgent(),
|
||||
|
||||
headers: {
|
||||
|
@ -116,25 +116,21 @@ const peertubeGot = got.extend({
|
|||
}
|
||||
})
|
||||
|
||||
function doRequest (url: string, options: PeerTubeRequestOptions = {}) {
|
||||
export function doRequest (url: string, options: PeerTubeRequestOptions = {}) {
|
||||
const gotOptions = buildGotOptions(options) as OptionsOfTextResponseBody
|
||||
|
||||
return peertubeGot(url, gotOptions)
|
||||
.catch(err => { throw buildRequestError(err) })
|
||||
}
|
||||
|
||||
function doJSONRequest <T> (url: string, options: PeerTubeRequestOptions = {}) {
|
||||
export function doJSONRequest <T> (url: string, options: PeerTubeRequestOptions = {}) {
|
||||
const gotOptions = buildGotOptions(options)
|
||||
|
||||
return peertubeGot<T>(url, { ...gotOptions, responseType: 'json' })
|
||||
.catch(err => { throw buildRequestError(err) })
|
||||
}
|
||||
|
||||
async function doRequestAndSaveToFile (
|
||||
url: string,
|
||||
destPath: string,
|
||||
options: PeerTubeRequestOptions = {}
|
||||
) {
|
||||
export async function doRequestAndSaveToFile (url: string, destPath: string, options: PeerTubeRequestOptions = {}) {
|
||||
const gotOptions = buildGotOptions({ ...options, timeout: options.timeout ?? REQUEST_TIMEOUTS.FILE })
|
||||
|
||||
const outFile = createWriteStream(destPath)
|
||||
|
@ -152,7 +148,13 @@ async function doRequestAndSaveToFile (
|
|||
}
|
||||
}
|
||||
|
||||
function getAgent () {
|
||||
export function generateRequestStream (url: string, options: PeerTubeRequestOptions = {}) {
|
||||
const gotOptions = buildGotOptions({ ...options, timeout: options.timeout ?? REQUEST_TIMEOUTS.DEFAULT })
|
||||
|
||||
return peertubeGot.stream(url, { ...gotOptions, isStream: true })
|
||||
}
|
||||
|
||||
export function getAgent () {
|
||||
if (!isProxyEnabled()) return {}
|
||||
|
||||
const proxy = getProxy()
|
||||
|
@ -176,27 +178,16 @@ function getAgent () {
|
|||
}
|
||||
}
|
||||
|
||||
function getUserAgent () {
|
||||
export function getUserAgent () {
|
||||
return `PeerTube/${PEERTUBE_VERSION} (+${WEBSERVER.URL})`
|
||||
}
|
||||
|
||||
function isBinaryResponse (result: Response<any>) {
|
||||
export function isBinaryResponse (result: Response<any>) {
|
||||
return BINARY_CONTENT_TYPES.has(result.headers['content-type'])
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export {
|
||||
type PeerTubeRequestOptions,
|
||||
|
||||
doRequest,
|
||||
doJSONRequest,
|
||||
doRequestAndSaveToFile,
|
||||
isBinaryResponse,
|
||||
getAgent,
|
||||
peertubeGot
|
||||
}
|
||||
|
||||
// Private
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
function buildGotOptions (options: PeerTubeRequestOptions): OptionsOfUnknownResponseBody {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue