Skip to main content
Playback can start while a video is still transcoding. The status moves from empty to pending, then to viewable once one rendition is complete, and to ready when every rendition is complete. A processing failure sets the status to error, while an upload or source-check failure can leave the status at empty and put the cause in the error field.

Video status

The status field on the video object reports that progress. The master playlist returns HTTP 404 until the video is viewable or ready.
Playback is available at viewable, including when only some renditions are complete. Further renditions are added to master.m3u8 and master.mpd as processing finishes. The status becomes ready when every rendition is available.
A response while processing is still in progress:
If the upload or the source check fails, the video stays empty and error explains why. A non-video file or a dropped connection is the usual cause. Re-upload from the origin, or delete the entity and create it again with a video file.
A TUS upload or a copy from an external origin_url creates the video through the request in API upload. The backend schedules transcodes for the target quality set, and each rendition becomes an item in converted_videos.

Rendition status

Each video is transcoded into several qualities. Each quality is a rendition, and converted_videos lists them with playback metadata and a processing status.
  • processing: the transcode job is accepted and running for this quality.
  • complete: the rendition is finished. mp4_url is available and the quality is added to the HLS and DASH manifests.
  • error: the rendition failed. The item error string gives the reason.
A rendition at complete is what makes the video viewable. Later renditions appear in the manifests as they finish. The Get video response lists width, height, size, progress from 0 to 100, status, mp4_url when the file exists, error on failure, and the quality name. Transcoder workers report each rendition. The API maps those reports to processing, complete, or error on converted_videos in GET /streaming/videos/{video_id}. Completion events are also delivered through VOD webhooks.

Processing time

Transcoding time grows with the length of the source. A 1 minute video can be processed in seconds, while a 10 hour video can take tens of minutes. Other videos ahead in the queue can add further delay. All renditions are queued together. Lower qualities finish sooner, so SD and other medium resolutions often become available before 1080, 2K, and 4K.

Error handling

During upload and processing, error on the video object or on converted_videos[i].error explains why the file could not be fetched, parsed, or processed. If a video stays empty or pending for a long time, read error and the converted_videos[].status values. The source often does not match the input parameters. Match the message to the table, then check the URL, headers, and source file and retry. If the failure is a quota limit, contact support. The transcoder expects pixel format, color range, and codec parameters to stay stable for the whole file. A source that changes from yuv420p to yuvj420p in the middle can stay in error after a retry. Re-export the file with stable parameters, or trim the broken segment and upload the corrected file. A viewable video can still carry an error on one rendition. The Viewable demo plays that case, and VOD issues lists the same failures in the portal.

Viewable demo

A public demo stays at viewable because one quality was left in error on purpose.
The player plays the video, and the completed files can be downloaded. The rendition vod1080p failed because storage space was limited, and its status is error.
  • Entity status: viewable
  • Renditions:
    • vod360p: complete
    • vod480p: complete
    • vod720p: complete
    • vod1080p: error
master.m3u8 lists only the three completed renditions: