39 lines
1.6 KiB
Plaintext
39 lines
1.6 KiB
Plaintext
@startuml Création de vidéo
|
|
|
|
actor Client
|
|
participant "videoRoutes" as Routes
|
|
participant "VideoController" as Controller
|
|
participant "Video" as Model
|
|
participant "Measurement" as MeasurementModel
|
|
participant "VideoService" as Service
|
|
participant "FFmpeg" as FFmpeg
|
|
database Database
|
|
|
|
Client -> Routes: POST /videos
|
|
Routes -> Controller: createVideo(req, res)
|
|
Controller -> Model: createVideo(project_id, measurement_ids, name, resolution, duration)
|
|
Model -> Database: INSERT INTO videos
|
|
Database --> Model: video data
|
|
Model --> Controller: video object
|
|
|
|
Controller -> Controller: getMeasurementPathList(measurement_ids, project_id)
|
|
Controller -> MeasurementModel: getMeasurementByProjectAndOrderId(projectId, orderId)
|
|
MeasurementModel -> Database: SELECT * FROM measurements
|
|
Database --> MeasurementModel: measurement data
|
|
MeasurementModel --> Controller: measurement object with path
|
|
|
|
Controller -> Service: createVideoFromImages(project_id, pathList, duration, video_id, resWidth, resHeight)
|
|
Service -> FFmpeg: spawn('ffmpeg', ffmpegArgs)
|
|
Service -> Model: updateVideo(videoId, {status: rendering, progress: 0})
|
|
Model -> Database: UPDATE videos SET status = rendering, progress = 0
|
|
FFmpeg --> Service: stderr progress events
|
|
Service -> Model: updateVideoProgress(videoId, progress, eta)
|
|
Model -> Database: UPDATE videos SET progress = X, eta = Y
|
|
FFmpeg --> Service: process complete
|
|
Service -> Model: updateVideo(videoId, {status: completed, progress: 100})
|
|
Model -> Database: UPDATE videos SET status = completed, progress = 100
|
|
Service --> Controller: videoFile path
|
|
Controller --> Routes: { message: success, id: video.id }
|
|
Routes --> Client: 200 OK - JSON Response
|
|
|
|
@enduml |