mirror of https://github.com/Chocobozzz/PeerTube
Add transcoding fail message in client
parent
4e29f4fe23
commit
221ee1adc9
|
@ -1,3 +1,7 @@
|
|||
<div i18n class="alert alert-warning" *ngIf="isVideoTranscodingFailed()">
|
||||
Transcoding failed, this video may not work properly.
|
||||
</div>
|
||||
|
||||
<div i18n class="alert alert-warning" *ngIf="isVideoToImport()">
|
||||
The video is being imported, it will be available when the import is finished.
|
||||
</div>
|
||||
|
|
|
@ -14,6 +14,10 @@ export class VideoAlertComponent {
|
|||
return this.video && this.video.state.id === VideoState.TO_TRANSCODE
|
||||
}
|
||||
|
||||
isVideoTranscodingFailed () {
|
||||
return this.video && this.video.state.id === VideoState.TRANSCODING_FAILED
|
||||
}
|
||||
|
||||
isVideoToImport () {
|
||||
return this.video && this.video.state.id === VideoState.TO_IMPORT
|
||||
}
|
||||
|
|
|
@ -175,6 +175,10 @@ export class VideoMiniatureComponent implements OnInit {
|
|||
return $localize`Publication scheduled on ` + updateAt
|
||||
}
|
||||
|
||||
if (video.state.id === VideoState.TRANSCODING_FAILED) {
|
||||
return $localize`Transcoding failed`
|
||||
}
|
||||
|
||||
if (video.state.id === VideoState.TO_TRANSCODE && video.waitTranscoding === true) {
|
||||
return $localize`Waiting transcoding`
|
||||
}
|
||||
|
|
|
@ -7,14 +7,12 @@ import { federateVideoIfNeeded } from '@server/lib/activitypub/videos'
|
|||
import { generateWebTorrentVideoFilename } from '@server/lib/paths'
|
||||
import { addMoveToObjectStorageJob } from '@server/lib/video'
|
||||
import { VideoPathManager } from '@server/lib/video-path-manager'
|
||||
import { UserModel } from '@server/models/user/user'
|
||||
import { MVideoFullLight } from '@server/types/models'
|
||||
import { VideoFileImportPayload, VideoStorage } from '@shared/models'
|
||||
import { getVideoFileFPS, getVideoFileResolution } from '../../../helpers/ffprobe-utils'
|
||||
import { logger } from '../../../helpers/logger'
|
||||
import { VideoModel } from '../../../models/video/video'
|
||||
import { VideoFileModel } from '../../../models/video/video-file'
|
||||
import { createHlsJobIfEnabled } from './video-transcoding'
|
||||
|
||||
async function processVideoFileImport (job: Job) {
|
||||
const payload = job.data as VideoFileImportPayload
|
||||
|
@ -27,20 +25,8 @@ async function processVideoFileImport (job: Job) {
|
|||
return undefined
|
||||
}
|
||||
|
||||
const data = await getVideoFileResolution(payload.filePath)
|
||||
|
||||
await updateVideoFile(video, payload.filePath)
|
||||
|
||||
const user = await UserModel.loadByChannelActorId(video.VideoChannel.actorId)
|
||||
|
||||
await createHlsJobIfEnabled(user, {
|
||||
videoUUID: video.uuid,
|
||||
resolution: data.resolution,
|
||||
isPortraitMode: data.isPortraitMode,
|
||||
copyCodecs: true,
|
||||
isMaxQuality: false
|
||||
})
|
||||
|
||||
if (CONFIG.OBJECT_STORAGE.ENABLED) {
|
||||
await addMoveToObjectStorageJob(video)
|
||||
} else {
|
||||
|
|
|
@ -2,7 +2,7 @@ import { Job } from 'bull'
|
|||
import { TranscodeOptionsType } from '@server/helpers/ffmpeg-utils'
|
||||
import { addTranscodingJob, getTranscodingJobPriority } from '@server/lib/video'
|
||||
import { VideoPathManager } from '@server/lib/video-path-manager'
|
||||
import { moveToFailedState, moveToNextState } from '@server/lib/video-state'
|
||||
import { moveToFailedTranscodingState, moveToNextState } from '@server/lib/video-state'
|
||||
import { UserModel } from '@server/models/user/user'
|
||||
import { VideoJobInfoModel } from '@server/models/video/video-job-info'
|
||||
import { MUser, MUserId, MVideo, MVideoFullLight, MVideoWithFile } from '@server/types/models'
|
||||
|
@ -52,14 +52,15 @@ async function processVideoTranscoding (job: Job) {
|
|||
const handler = handlers[payload.type]
|
||||
|
||||
if (!handler) {
|
||||
await moveToFailedState(video)
|
||||
await moveToFailedTranscodingState(video)
|
||||
|
||||
throw new Error('Cannot find transcoding handler for ' + payload.type)
|
||||
}
|
||||
|
||||
try {
|
||||
await handler(job, payload, video, user)
|
||||
} catch (error) {
|
||||
await moveToFailedState(video)
|
||||
await moveToFailedTranscodingState(video)
|
||||
|
||||
throw error
|
||||
}
|
||||
|
|
|
@ -79,10 +79,8 @@ async function moveToExternalStorageState (video: MVideoFullLight, isNewVideo: b
|
|||
}
|
||||
}
|
||||
|
||||
function moveToFailedState (video: MVideoFullLight) {
|
||||
return sequelizeTypescript.transaction(async t => {
|
||||
await video.setNewState(VideoState.TRANSCODING_FAILED, false, t)
|
||||
})
|
||||
function moveToFailedTranscodingState (video: MVideoFullLight) {
|
||||
return video.setNewState(VideoState.TRANSCODING_FAILED, false, undefined)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -90,7 +88,7 @@ function moveToFailedState (video: MVideoFullLight) {
|
|||
export {
|
||||
buildNextVideoState,
|
||||
moveToExternalStorageState,
|
||||
moveToFailedState,
|
||||
moveToFailedTranscodingState,
|
||||
moveToNextState
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ import {
|
|||
setAccessTokensToServers,
|
||||
waitJobs
|
||||
} from '@shared/extra-utils'
|
||||
import { HttpStatusCode, VideoDetails, VideoFile } from '@shared/models'
|
||||
import { HttpStatusCode, VideoDetails, VideoFile, VideoInclude } from '@shared/models'
|
||||
|
||||
const expect = chai.expect
|
||||
|
||||
|
@ -100,7 +100,7 @@ function runTests (objectStorage: boolean) {
|
|||
await waitJobs(servers)
|
||||
|
||||
for (const server of servers) {
|
||||
const { data: videos } = await server.videos.list()
|
||||
const { data: videos } = await server.videos.listWithToken({ include: VideoInclude.NOT_PUBLISHED_STATE })
|
||||
expect(videos).to.have.lengthOf(2)
|
||||
|
||||
const video = videos.find(({ uuid }) => uuid === video2UUID)
|
||||
|
@ -124,7 +124,7 @@ function runTests (objectStorage: boolean) {
|
|||
await waitJobs(servers)
|
||||
|
||||
for (const server of servers) {
|
||||
const { data: videos } = await server.videos.list()
|
||||
const { data: videos } = await server.videos.listWithToken({ include: VideoInclude.NOT_PUBLISHED_STATE })
|
||||
expect(videos).to.have.lengthOf(2)
|
||||
|
||||
const video = videos.find(({ shortUUID }) => shortUUID === video1ShortId)
|
||||
|
|
|
@ -292,7 +292,8 @@ $ docker-compose exec -u peertube peertube npm run create-transcoding-job -- --g
|
|||
|
||||
### create-import-video-file-job.js
|
||||
|
||||
You can use this script to import a video file to replace an already uploaded file or to add a new resolution to a video. PeerTube needs to be running.
|
||||
You can use this script to import a video file to replace an already uploaded file or to add a new webtorrent resolution to a video. PeerTube needs to be running.
|
||||
You can then create a transcoding job using `npm run create-transcoding-job` if you need to optimize your file or create an HLS version of it.
|
||||
|
||||
```bash
|
||||
$ # Basic installation
|
||||
|
|
Loading…
Reference in New Issue