Video on-demand workflows
Video on-demand (VOD) means making content available in the cloud so users can watch or listen to it whenever they want. This chapter covers the complete workflow from uploading media to delivering streams to your audience.
Prerequisites
Before starting, ensure 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 organizes everything related to a piece of content. It's not just a single file, but a complete content package that includes:
- Name and description - Metadata for organization
- Files - Video, audio, subtitles, manifests, and any supporting files
- Associated locators - Publishing permissions and URLs
- Filters - Content modification rules
Key concept: Think of an Asset as a folder that can contain multiple files of any type. While you'll typically upload audiovisual files for transformation, you can also include images, documents, or metadata files that can be made available 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, with Google Cloud Storage coming soon.
Step 1: Get your Azure Storage account access information
- Go to your Azure Portal
- 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 Settings → 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 will be:
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>Important: 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
- Access the MK.IO dashboard at app.mk.io
- Go to 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
Critical: Ensure you remove the trailing "/" from the URL, or you'll get an error.
Creating your first asset
Step 1: Create the asset container
-
Go to Assets:
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 will copy to cloud storage)
-
Configure the Asset:
- Storage account: Select your connected storage
- Storage container: Name for organization (e.g., "tutorial-content")
- Asset name: Descriptive name for this content
- Storage directory (optional): Folder structure within container
- Description (optional): Additional metadata
- Upon asset deletion: Choose whether deleting the Asset removes files from storage
-
Click Add
Tip: Check your cloud portal to verify the container was created. It will be empty initially and populate 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 (e.g., .mp4, .mov, .avi), and click Upload
Once uploaded, you'll see the file listed in the Files on storage section. Now we're ready to prepare it for streaming.
Understanding transformations
A Transformation is a recipe that defines how to convert media for different uses. Common transformation 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, we'll use an adaptive bitrate streaming profile.
What is Adaptive Bitrate (ABR)? ABR creates multiple versions of your video at different quality levels. The player automatically switches between these versions in real-time based on the viewer's network conditions, device capabilities, and screen size. This ensures smooth playback even when connection quality varies
Creating a streaming transformation
-
Go to Video Processing → Transforms:
https://app.mk.io/project/<your-project-name>/videoProcessing/transforms -
Click + Create Transform
-
Configure the transformation:
- Name: "StreamingTransform" (or descriptive name)
- Type: Encoding (prepares content for streaming)
- Encoding: Creates streaming-optimized versions
- Asset conversion: Converts to new formats
- AI workflow: Applies artificial intelligence processing
- Built-in preset: H.264 Multiple Bitrate 1080p (good balance of quality and performance)
-
Click Create
Running the transformation job
Now we'll apply our transformation to convert the uploaded video for streaming:
-
Go to Video Processing → Jobs:
https://app.mk.io/project/<your-project-name>/videoProcessing/jobs -
Click + Create Job
-
Configure the job:
- Job name
- Description
- Priority: By default, jobs will run in Normal priority.
You can adjust this to either High or Low priority. Assigning a high priority to a job will not interrupt any currently running jobs. However, the next time MK.IO picks a job to run, it will prioritise high-priority jobs. If multiple high-priority jobs are queued, they will be executed 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 earlier.
- Output: Specify the Output asset name (e.g., "tutorial-streaming")
-
Click Create
Cost Alert: Starting a transformation job triggers resource usage and may incur costs. See mk.io/pricing for details
Your transformation job has started! You’ll see it in the job list.
Job status monitoring:
- Scheduled: Job is queued, waiting for available resources
- Processing: Job is actively running
- Finished: Transformation completed successfully
- Error: Job encountered an issue
Troubleshooting: If your job errors, check the "highlevel.log" file in the output Asset container. This provides diagnostic information you can share with MK.IO support.
Once finished, your output Asset will contain multiple video files optimized 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 be accessed by viewers, you need three components:
- Streaming Endpoint - The delivery infrastructure
- Endpoint Assignment - Link the Asset to the endpoint
- Streaming Locator - 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
Key facts: You can assign hundreds of Assets to one endpoint, but each Asset can only be assigned to one endpoint at a time (though you can change this anytime).
To create an endpoint:
- Go to Streaming Endpoints:
https://app.mk.io/project/<your-project-name>/streamingEndpoints - Click + Create Streaming Endpoint
- Configure:
- Name: "TutorialEndpoint" (descriptive name)
- Base URL: "tutorial" (forms part of your streaming URLs)
- Type: Shared (for this tutorial)
- Click Create then Start the endpoint
Cost Alert: Running endpoints generate costs even when idle. See mk.io/pricing for details.
Assigning the endpoint to your asset
- Open your transformed Asset (e.g., "tutorial-streaming")
Tip: A quick way to access your most recent transformed assets is via the Video Processing **Jobs ** page, 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/expires
- DRM protection - Whether content requires authorization
- Access methods - Streaming vs. download permissions
Key requirements:
- 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: (empty) - used for DRM protection
- Expiration time: (empty) - content doesn't expire
- Asset filters: (empty) - used for content modification
- Account filters: (empty) - used for account-level filters
- Click Add
Understanding 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. MK.IO lets you control which access methods are allowed through the Streaming Policy.
Accessing your content
Once the streaming locator is created, your asset will show 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)
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)
Cost alert: When users access streaming URLs, bandwidth costs apply. See mk.io/pricing 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
Your first VOD workflow is now complete! You've successfully uploaded, transformed, and published video content for on-demand streaming.
Next Steps and advanced features
Now that you have a working VOD workflow, explore these advanced features:
- Video transcriptions - Generate automatic subtitles with WebVTT
- Thumbnail extraction - Create preview images from video content
- Audio processing - Extract audio tracks for podcast distribution
- Player customization - Integrate MKPlayer into your own websites
- Content protection - Add DRM for secure content delivery
For player integration, check the MKPlayer documentation to embed your content in custom applications.
Updated 4 days ago