type: 'new-resolution-to-webtorrent',
videoUUID: video.uuid,
+ createHLSIfNeeded: true,
+
// FIXME: check the file has audio
hasAudio: true,
async function createTranscoding (req: express.Request, res: express.Response) {
const video = res.locals.videoAll
- logger.info('Creating %s transcoding job for %s.', req.body.type, video.url, lTags())
+ logger.info('Creating %s transcoding job for %s.', req.body.transcodingType, video.url, lTags())
const body: VideoTranscodingCreate = req.body
type: 'new-resolution-to-webtorrent',
videoUUID: video.uuid,
isNewVideo: false,
- resolution: resolution,
+ resolution,
hasAudio: !!audioStream,
+ createHLSIfNeeded: false,
isPortraitMode
})
}
import {
HLSTranscodingPayload,
MergeAudioTranscodingPayload,
- NewResolutionTranscodingPayload,
+ NewWebTorrentResolutionTranscodingPayload,
OptimizeTranscodingPayload,
VideoResolution,
VideoTranscodingPayload
async function handleNewWebTorrentResolutionJob (
job: Job,
- payload: NewResolutionTranscodingPayload,
+ payload: NewWebTorrentResolutionTranscodingPayload,
video: MVideoFullLight,
user: MUserId
) {
async function onNewWebTorrentFileResolution (
video: MVideo,
user: MUserId,
- payload: NewResolutionTranscodingPayload | MergeAudioTranscodingPayload
+ payload: NewWebTorrentResolutionTranscodingPayload | MergeAudioTranscodingPayload
) {
- await createHlsJobIfEnabled(user, { hasAudio: true, copyCodecs: true, isMaxQuality: false, ...payload })
+ if (payload.createHLSIfNeeded) {
+ await createHlsJobIfEnabled(user, { hasAudio: true, copyCodecs: true, isMaxQuality: false, ...payload })
+ }
+
await VideoJobInfoModel.decrease(video.uuid, 'pendingTranscode')
await retryTransactionWrapper(moveToNextState, video, payload.isNewVideo)
resolution,
isPortraitMode,
hasAudio,
+ createHLSIfNeeded: true,
isNewVideo
}
type: 'merge-audio-to-webtorrent',
resolution: DEFAULT_AUDIO_RESOLUTION,
videoUUID: video.uuid,
+ createHLSIfNeeded: true,
isNewVideo: true
}
} else {
await makeRawRequest(file.fileUrl, HttpStatusCode.OK_200)
}
- for (const file of video.streamingPlaylists[0].files) {
+ const streamingPlaylistFiles = video.streamingPlaylists.length === 0
+ ? []
+ : video.streamingPlaylists[0].files
+
+ for (const file of streamingPlaylistFiles) {
expectStartWith(file.fileUrl, ObjectStorageCommand.getPlaylistBaseUrl())
await makeRawRequest(file.fileUrl, HttpStatusCode.OK_200)
}
}
})
+ it('Should only generate WebTorrent', async function () {
+ this.timeout(60000)
+
+ await servers[0].videos.removeHLSFiles({ videoId: videoUUID })
+ await waitJobs(servers)
+
+ await servers[0].videos.runTranscoding({ videoId: videoUUID, transcodingType: 'webtorrent' })
+ await waitJobs(servers)
+
+ for (const server of servers) {
+ const videoDetails = await server.videos.get({ id: videoUUID })
+
+ expect(videoDetails.files).to.have.lengthOf(5)
+ expect(videoDetails.streamingPlaylists).to.have.lengthOf(0)
+
+ if (objectStorage) await checkFilesInObjectStorage(videoDetails)
+ }
+ })
+
it('Should not have updated published at attributes', async function () {
const video = await servers[0].videos.get({ id: videoUUID })
isMaxQuality: boolean
}
-export interface NewResolutionTranscodingPayload extends BaseTranscodingPayload {
+export interface NewWebTorrentResolutionTranscodingPayload extends BaseTranscodingPayload {
type: 'new-resolution-to-webtorrent'
resolution: VideoResolution
hasAudio: boolean
+ createHLSIfNeeded: boolean
isPortraitMode?: boolean
}
export interface MergeAudioTranscodingPayload extends BaseTranscodingPayload {
type: 'merge-audio-to-webtorrent'
resolution: VideoResolution
+ createHLSIfNeeded: true
}
export interface OptimizeTranscodingPayload extends BaseTranscodingPayload {
export type VideoTranscodingPayload =
HLSTranscodingPayload
- | NewResolutionTranscodingPayload
+ | NewWebTorrentResolutionTranscodingPayload
| OptimizeTranscodingPayload
| MergeAudioTranscodingPayload