mirror of https://github.com/Chocobozzz/PeerTube
Merge 2ff8bc1419
into 46b45dc51d
commit
5118c6f0f2
|
@ -116,7 +116,9 @@ export async function processHLSTranscoding (options: ProcessOptions<RunnerJobVO
|
|||
|
||||
const successBody: VODHLSTranscodingSuccess = {
|
||||
resolutionPlaylistFile: outputPath,
|
||||
videoFile: videoPath
|
||||
videoFile: videoPath,
|
||||
uploadVideoFileUrl: payload.output.videoFileUrl,
|
||||
uploadResolutionPlaylistFileUrl: payload.output.playlistFileUrl
|
||||
}
|
||||
|
||||
await server.runnerJobs.success({
|
||||
|
|
|
@ -23,12 +23,19 @@ export interface RunnerJobVODWebVideoTranscodingPayload {
|
|||
}
|
||||
}
|
||||
|
||||
export interface UploadUrlTranscodingResultPayload {
|
||||
url: string
|
||||
fields: { [key: string]: any } | undefined
|
||||
}
|
||||
|
||||
export interface RunnerJobVODHLSTranscodingPayload {
|
||||
input: {
|
||||
videoFileUrl: string
|
||||
}
|
||||
|
||||
output: {
|
||||
videoFileUrl?: UploadUrlTranscodingResultPayload
|
||||
playlistFileUrl?: UploadUrlTranscodingResultPayload
|
||||
resolution: number
|
||||
fps: number
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import { UploadUrlTranscodingResultPayload } from '@peertube/peertube-models'
|
||||
|
||||
export interface RunnerJobSuccessBody {
|
||||
runnerToken: string
|
||||
jobToken: string
|
||||
|
@ -5,6 +7,12 @@ export interface RunnerJobSuccessBody {
|
|||
payload: RunnerJobSuccessPayload
|
||||
}
|
||||
|
||||
export interface UploadTranscodingResult {
|
||||
runnerToken: string
|
||||
jobToken: string
|
||||
uploadResultUrl: UploadUrlTranscodingResultPayload
|
||||
file: string | Blob
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export type RunnerJobSuccessPayload =
|
||||
|
@ -16,15 +24,19 @@ export type RunnerJobSuccessPayload =
|
|||
|
||||
export interface VODWebVideoTranscodingSuccess {
|
||||
videoFile: Blob | string
|
||||
uploadVideoFileUrl?: UploadUrlTranscodingResultPayload
|
||||
}
|
||||
|
||||
export interface VODHLSTranscodingSuccess {
|
||||
videoFile: Blob | string
|
||||
resolutionPlaylistFile: Blob | string
|
||||
uploadVideoFileUrl?: UploadUrlTranscodingResultPayload
|
||||
uploadResolutionPlaylistFileUrl?: UploadUrlTranscodingResultPayload
|
||||
}
|
||||
|
||||
export interface VODAudioMergeTranscodingSuccess {
|
||||
videoFile: Blob | string
|
||||
uploadVideoFileUrl?: UploadUrlTranscodingResultPayload
|
||||
}
|
||||
|
||||
export interface LiveRTMPHLSTranscodingSuccess {
|
||||
|
@ -33,6 +45,7 @@ export interface LiveRTMPHLSTranscodingSuccess {
|
|||
|
||||
export interface VideoStudioTranscodingSuccess {
|
||||
videoFile: Blob | string
|
||||
uploadVideoFileUrl?: UploadUrlTranscodingResultPayload
|
||||
}
|
||||
|
||||
export function isWebVideoOrAudioMergeTranscodingPayloadSuccess (
|
||||
|
|
|
@ -22,6 +22,7 @@ import {
|
|||
RunnerJobType,
|
||||
RunnerJobUpdateBody,
|
||||
RunnerJobVODPayload,
|
||||
UploadTranscodingResult,
|
||||
VODHLSTranscodingSuccess,
|
||||
VODWebVideoTranscodingSuccess
|
||||
} from '@peertube/peertube-models'
|
||||
|
@ -177,7 +178,7 @@ export class RunnerJobsCommand extends AbstractCommand {
|
|||
})
|
||||
}
|
||||
|
||||
success (options: OverrideCommandOptions & RunnerJobSuccessBody & { jobUUID: string }) {
|
||||
async success (options: OverrideCommandOptions & RunnerJobSuccessBody & { jobUUID: string }) {
|
||||
const { payload } = options
|
||||
|
||||
const path = '/api/v1/runners/jobs/' + options.jobUUID + '/success'
|
||||
|
@ -185,15 +186,31 @@ export class RunnerJobsCommand extends AbstractCommand {
|
|||
let payloadWithoutFiles = payload
|
||||
|
||||
if ((isWebVideoOrAudioMergeTranscodingPayloadSuccess(payload) || isHLSTranscodingPayloadSuccess(payload)) && payload.videoFile) {
|
||||
attaches[`payload[videoFile]`] = payload.videoFile
|
||||
|
||||
payloadWithoutFiles = omit(payloadWithoutFiles as VODWebVideoTranscodingSuccess, [ 'videoFile' ])
|
||||
if (payload.uploadVideoFileUrl) {
|
||||
await this.uploadTranscodeResult({
|
||||
uploadResultUrl: payload.uploadVideoFileUrl,
|
||||
file: payload.videoFile,
|
||||
runnerToken: options.runnerToken,
|
||||
jobToken: options.jobToken
|
||||
})
|
||||
} else {
|
||||
attaches[`payload[videoFile]`] = payload.videoFile
|
||||
payloadWithoutFiles = omit(payloadWithoutFiles as VODWebVideoTranscodingSuccess, [ 'videoFile' ])
|
||||
}
|
||||
}
|
||||
|
||||
if (isHLSTranscodingPayloadSuccess(payload) && payload.resolutionPlaylistFile) {
|
||||
attaches[`payload[resolutionPlaylistFile]`] = payload.resolutionPlaylistFile
|
||||
|
||||
payloadWithoutFiles = omit(payloadWithoutFiles as VODHLSTranscodingSuccess, [ 'resolutionPlaylistFile' ])
|
||||
if (payload.uploadResolutionPlaylistFileUrl) {
|
||||
await this.uploadTranscodeResult({
|
||||
uploadResultUrl: payload.uploadResolutionPlaylistFileUrl,
|
||||
file: payload.resolutionPlaylistFile,
|
||||
runnerToken: options.runnerToken,
|
||||
jobToken: options.jobToken
|
||||
})
|
||||
} else {
|
||||
attaches[`payload[resolutionPlaylistFile]`] = payload.resolutionPlaylistFile
|
||||
payloadWithoutFiles = omit(payloadWithoutFiles as VODHLSTranscodingSuccess, [ 'resolutionPlaylistFile' ])
|
||||
}
|
||||
}
|
||||
|
||||
return this.postUploadRequest({
|
||||
|
@ -211,6 +228,27 @@ export class RunnerJobsCommand extends AbstractCommand {
|
|||
})
|
||||
}
|
||||
|
||||
uploadTranscodeResult (options: UploadTranscodingResult) {
|
||||
const { uploadResultUrl, file } = options
|
||||
const parsedUrl = new URL(uploadResultUrl.url)
|
||||
const attaches: { [id: string]: any } = {
|
||||
file
|
||||
}
|
||||
|
||||
return this.postUploadRequest({
|
||||
url: parsedUrl.origin,
|
||||
path: parsedUrl.pathname,
|
||||
fields: {
|
||||
...uploadResultUrl.fields,
|
||||
...pick(options, [ 'jobToken', 'runnerToken' ]),
|
||||
file
|
||||
},
|
||||
attaches,
|
||||
implicitToken: false,
|
||||
defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
|
||||
})
|
||||
}
|
||||
|
||||
getJobFile (options: OverrideCommandOptions & { url: string, jobToken: string, runnerToken: string }) {
|
||||
const { host, protocol, pathname } = new URL(options.url)
|
||||
|
||||
|
|
Loading…
Reference in New Issue