Video on demand workflows
Video on demand (VOD) makes content available in the cloud so viewers can watch it whenever they choose. This page covers the complete workflow from uploading media to delivering streams to your audience.
Prerequisites
Before you begin, make sure you have:
- Access to your MK.IO account (Account setup guide)
- Cloud storage connected (Storage setup covered below)
Understanding assets in MK.IO
An asset in MK.IO is a container that organises everything related to a piece of content. It is not just a single file — it is a complete content package that includes:
- Name and description — Metadata for organisation
- Files — Video, audio, subtitles, manifests, and any supporting files
- Associated locators — Publishing permissions and URLs
- Filters — Content modification rules
Think of an asset as a folder that can hold multiple files of any type. You typically upload audiovisual files for transformation, but you can also include images, documents, or metadata files for download.
Connecting your cloud storage
MK.IO needs access to cloud storage to store and process your video assets. Currently supported providers are Azure Storage and Amazon S3. Google Cloud Storage support is coming soon.
Step 1: Get your Azure Storage account access information
- Go to your Azure Portal (opens in a new tab).
- Navigate to Settings > Storage accounts.
- Select your desired storage account.
- Generate a Shared Access Signature (SAS token):
- Go to Settings > Access keys (ensure keys are configured).
- Navigate to Security + Networking > Shared access signature.
- Under Allowed services, check Blob.
- Under Allowed resource types, check Container and Object.
- Set appropriate Start and expiry date/time.
- Click Generate SAS and connection string.
- Copy the Blob service SAS URL and store it securely.
The URL format is:
https://<storage-name>.blob.core.windows.net/?sv=<date>&...&sig=<signature>For easier use, split this into two parts:
Line 1: https://<storage-name>.blob.core.windows.net/
Line 2: ?sv=<date>&...&sig=<signature>Your Azure Storage account must be in the same region as your MK.IO project to avoid unnecessary egress costs.
Step 2: Add the connection in MK.IO
- Go to app.mk.io (opens in a new tab).
- Select Storage from the left navigation.
- Click Add Storage.
- Fill in the required information:
- Storage account name and optional description
- URL: Paste the first line (remove the trailing slash)
- SAS token: Paste the second line
- Click Submit.
Remove the trailing / from the URL before submitting. Leaving it in causes an error.
Creating your first asset
- Go to Assets at
https://app.mk.io/project/<your-project-name>/assets. - Click + Create Asset.
- Choose your upload method:
- From a storage account — Reference existing files from cloud storage
- From local files — Upload local files (MK.IO copies them to cloud storage)
- Configure the asset:
- Storage account: Select your connected storage
- Storage container: A name for organisation (for example,
tutorial-content) - Asset name: A descriptive name for this content
- Storage directory (optional): Folder structure within the container
- Description (optional): Additional metadata
- Upon asset deletion: Choose whether deleting the asset also removes files from storage
- Click Add.
Check your cloud portal to verify the container was created. It is empty initially and populates as you add content.
Uploading video content
- Open your newly created asset.
- Scroll down to the Files on storage section.
- Click + Add files to upload your video.
- Select your video file (for example,
.mp4,.mov, or.avi) and click Upload.
Once uploaded, the file appears in the Files on storage section. The asset is now ready for transformation.
Understanding transforms
A transform is a recipe that defines how to convert media for different uses. Common transform types include:
- Prepare content for web streaming — Adaptive bitrate encoding
- Extract audio — For podcast distribution
- Create thumbnails — Generate preview images
- Generate transcriptions — Add captions and subtitles
For streaming video content, use an adaptive bitrate streaming profile.
Adaptive Bitrate (ABR) creates multiple versions of your video at different quality levels. The player switches between these versions in real-time based on network conditions, device capabilities, and screen size, ensuring smooth playback even when connection quality varies.
Creating a streaming transform
- Go to Video Processing > Transforms at
https://app.mk.io/project/<your-project-name>/videoProcessing/transforms. - Click + Create Transform.
- Configure the transform:
- Name:
StreamingTransform(or a descriptive name of your choice) - Type: Encoding (prepares content for streaming)
- Encoding: Creates streaming-optimised versions
- Asset conversion: Converts to new formats
- AI workflow: Applies AI processing
- Built-in preset: H.264 Multiple Bitrate 1080p (a good balance of quality and performance)
- Name:
- Click Create.
Running the transformation job
Apply your transform to convert the uploaded video for streaming:
-
Go to Video Processing > Jobs at
https://app.mk.io/project/<your-project-name>/videoProcessing/jobs. -
Click + Create Job.
-
Configure the job:
- Job name
- Description
- Priority: Normal by default.
You can set priority to High or Low. High priority does not interrupt currently running jobs — it means MK.IO picks this job next when resources are available. If multiple high-priority jobs are queued, MK.IO runs them in the order they were created.
- Transform: Select
StreamingTransform(or your transform name) from the dropdown - Select Input: Click Select Existing Asset under Input Asset Name and choose the media file you uploaded
- Output: Enter the output asset name (for example,
tutorial-streaming)
-
Click Create.
Starting a transformation job triggers resource usage and may incur costs. See MK.IO pricing (opens in a new tab) for details.
The job appears in the job list. Monitor its status:
- Scheduled — Job is queued, waiting for available resources
- Processing — Job is actively running
- Finished — Transformation completed successfully
- Error — Job encountered an issue
If your job errors, check the highlevel.log file in the output asset container. This file provides diagnostic information you can share with MK.IO support.
Once finished, your output asset contains multiple files optimised for streaming, including:
- Multiple resolution video tracks
- Audio tracks
- Manifest files (
.ism,.mpd,.mpi) - Log files
Setting up streaming infrastructure
Before your transformed video can reach viewers, you need three components:
The three components
The delivery infrastructure
Link the asset to the endpoint
The access permissions and URLs
Creating a streaming endpoint
A streaming endpoint is the infrastructure component that makes your content available on the internet.
Endpoint types:
- Shared — Cost-effective, up to 200 concurrent users, ideal for lighter workloads
- Dedicated — High performance, up to 10,000 concurrent users
- CDN — Maximum performance, unlimited users, lowest latency
You can assign hundreds of assets to one endpoint, but each asset can only be assigned to one endpoint at a time. You can change the assignment at any time.
To create an endpoint:
- Go to Streaming Endpoints at
https://app.mk.io/project/<your-project-name>/streamingEndpoints. - Click + Create Streaming Endpoint.
- Configure:
- Name:
TutorialEndpoint - Base URL:
tutorial(forms part of your streaming URLs) - Type: Shared (for this guide)
- Name:
- Click Create then Start the endpoint.
Running endpoints generate costs even when idle. See MK.IO pricing (opens in a new tab) for details.
Assigning the endpoint to your asset
- Open your transformed asset (for example,
tutorial-streaming).
A quick way to access your most recently transformed assets is via Video Processing > Jobs, under Output Asset.
- In the Streaming Endpoint section, select your running endpoint.
- The assignment is now active.
Creating a streaming locator
The streaming locator controls how your content is published and accessed. It acts as the permission ticket that determines:
- Availability dates — When content becomes available or expires
- DRM protection — Whether content requires authorisation
- Access methods — Streaming versus download permissions
Every asset needs at least one streaming locator to be published. You can create multiple locators per asset, each generating unique URLs. Locator names must be unique within your project.
To create a streaming locator:
- In your asset, scroll to the Streaming Locators section.
- Click + Add Streaming Locator.
- Configure:
- Name:
tutorial-locator(unique identifier) - Streaming policy:
Predefined_DownloadAndClearStreaming(allows both streaming and download) - Content key policy: Leave empty unless you require DRM protection
- Expiration time: Leave empty for content that does not expire
- Asset filters: Leave empty unless you need content modification
- Account filters: Leave empty unless you need account-level filters
- Name:
- Click Add.
Streaming vs. download: Streaming delivers content in real-time using adaptive protocols (HLS/DASH) that adjust quality based on network conditions. Download (progressive download) transfers the complete file linearly without quality adaptation. The streaming policy you choose controls which access methods are permitted.
Accessing your content
Once the streaming locator is created, your asset shows at the top of the page:
- Playback URLs in both HLS and DASH formats
- Built-in MKPlayer for immediate preview
- Download links for direct file access (if enabled by your streaming policy)
URL structure example:
https://tutorial.uksouth.streaming.mediakind.com/<locator-id>/<asset-name>.ism/manifest(format=mpd-time-cmaf)- Base URL: From your streaming endpoint
- Locator ID: Generated when you created the locator
- Manifest: Either HLS (
m3u8-cmaf) or DASH (mpd-time-cmaf)
When viewers access streaming URLs, bandwidth costs apply. See MK.IO pricing (opens in a new tab) for details.
Testing your stream
- Reload your asset page to see the embedded MKPlayer.
- Click Play to test your stream.
- Click Show all URLs to see all available formats and download links.