A detailed introduction to Video Streaming API
Video is now the go-to medium of content consumption on the internet. We can see video taking center stage on all social media and streaming platforms. If not already working on it heavily, content and e-commerce businesses are introducing videos as a key content form they produce. Videos combine visuals, audio, and text to create content that's easy to comprehend and has high retention, resulting in higher user engagement, which means higher revenue and customer retention for a business.
What is video streaming and why is it important?
While videos are a great form of content for all the above reasons, they present a challenge in processing and delivering an optimized experience on the end user's device. Videos are large in size, and the playback time can vary from a few seconds to several minutes. A 30-second video shot using a modern camera phone can easily be over 100MBs.
Traditionally, when loading content on the internet, the entire file is downloaded and displayed on the user's device. However, with 100MB files, that's not the right approach. The user would spend several seconds before the video could even start playing.
At 100MB file size and a 1MB per second download speed, you will wait 100 seconds before the video starts playing.
Video streaming is the continuous transmission of data in smaller chunks to the user's device so that the player can play the video segment available with each chunk. The original large video file remains on a remote storage or server, and only the smaller chunks of shorter duration are downloaded on the user's device.
When the same 100MB video is divided into 20 chunks of equal size, the video playback can now start in 5 seconds.
While the first chunk plays, the second gets queued for download, and so on.
As a result of video streaming,
- We can offer a better experience for our users with a quick video start time. A happier user means better retention and conversions for a business.
- Less wastage of bandwidth for the user as only smaller chunks are being downloaded, and if the user doesn't watch the whole video, then not all the chunks will get downloaded. This also reduces data transfer costs for the business serving the video content.
Adaptive Bitrate Streaming
Adaptive Bitrate Streaming is a kind of video streaming where each smaller chunk of a video is encoded at multiple bitrates. Lower bitrate means smaller video size.
With chunks available in different sizes, the video player can now adjust which one to load depending on the user's network quality. Users on a poor network get a lighter, low-resolution video. The player can load a better, high-resolution video as the network improves. This technique is similar to what you might have seen on Youtube or Netflix, where the video quality or resolution adjusts to your network speed.
What is a video streaming API?
Video streaming API is a programming interface that takes an original single video file as an input, divides it, and encodes it into smaller chunks as output that are ready for streaming. Optionally, the video streaming API can host the streaming chunks and deliver the video stream to the end user using a content delivery network.
Depending on the kind of content, video streaming APIs can either be Video-On-Demand (VOD) or live streaming video APIs.
1. Video-On-Demand (VOD) streaming API
VOD streaming APIs use a pre-recorded video as input, in a format like MP4 or MOV, and then encode it to get it ready for streaming using popular streaming protocols like DASH and HLS.
2. Live Streaming Video API
A live streaming video API gets its input from the video feed of a live event and then streams it to the users. The underlying technology for live streaming video APIs can either be WebRTC or HLS, depending on the desired latency and the number of users you need to cater. WebRTC is for low-latency, low-user count, whereas HLS is for slightly higher latency but several thousands of users simultaneously.
Factors to consider while selecting a video streaming API
Video Streaming is complex. You need to know about different video formats, streaming protocols, codecs, audio streams, different devices, and more to build a video streaming service on your own. Therefore, using an existing video streaming API for your business is almost always advisable.
Before selecting a third-party video streaming service, you need to consider the following items.
1. Feature support
You need to decide if you need video-on-demand or live streaming support. For video-on-demand streaming, you need to consider the input and the output formats you need to support, whereas, for live streaming, you need to consider the number of live users and the latency you can afford for your use case.
2. Ease of integration
You don't want to turn your existing video setup or the video upload process upside down to be able to use a streaming service or to go through a steep learning curve and several different steps to do so. The video streaming API should be easily integrable with your existing infrastructure and work with your existing video storage.
A good API will use standard defaults for different streaming options that result in a good streaming experience while allowing you to play around with different options to customize the streaming experience even further if needed.
3. Processing times
When building a video streaming experience, you wouldn't want the users who upload the videos to wait ages for their video to get processed and ready to use. Imagine uploading a video post on Instagram and waiting several minutes for it to get published! You should therefore look for a video processing API suitable for your business requirements and provide the output in seconds, if not in real-time.
4. Video Hosting and Management
If you are just getting started with video streaming, you would need access to an extensible cloud storage to store the videos you upload and the streaming segments generated for it. This storage should be usable on the web, like AWS S3, Google Cloud Storage, etc.
Many streaming APIs rely on you to manage the storage, whereas some good ones integrate with video storage and manage it for you. While this is optional, having an integrated video hosting solution simplifies the entire integration by reducing the number of components you must consider.
5. Video delivery using a CDN
Again, a purely optional requirement, but the end goal of encoding your video for streaming is to deliver it to your users. The video delivery needs to happen over a content delivery network or a CDN to ensure fast load times for your user globally. Therefore, if the streaming API comes integrated with a video CDN, it simplifies your setup while ensuring a world-class experience for your users.
6. Supporting APIs for video streaming
Apart from the main video's streaming itself, there are a lot of other actions you would need to take to build a complete, well-rounded video streaming experience. For example, you would need to create a video thumbnail or maybe a short video preview to show your users.
You might also need to add captions to the videos or need a customizable video player for your requirements. While these things can be built outside the streaming service, depending on your business requirements, it might be beneficial if the streaming service also provides these supporting APIs.
Video Streaming API by ImageKit
ImageKit is a cloud-hosted, complete media management and optimization product. It provides a real-time video streaming API that works with small URL changes and gets you up and running in no time. Even if you have really short videos that won't benefit from Adaptive Bitrate Streaming, ImageKit provides several other format optimizations, compression, and real-time video transformations to help you deliver perfect videos to your users.
And the best part is that ImageKit also comes with integrated video hosting, thumbnail creation API, video trimming APIs, and a global integrated CDN by AWS Cloudfront for super fast video delivery. You can also use it for the images on your websites and apps, making it a single product for all your media delivery and hosting requirements.
There are two ways of using ImageKit. You could either upload the video to ImageKit's integrated hosting called the Media Library or connect your existing storage like AWS S3, Google Cloud Storage, or Azure Blob Storage, amongst others. These videos are then accessible via an ImageKit URL that you can use on websites and apps along with the integrated CDN.
Let's look at how quickly we can set up Adaptive Bitrate Streaming with ImageKit.
Adaptive Bitrate Streaming with ImageKit
ImageKit offers Adaptive Bitrate Streaming using both DASH and HLS streaming protocols. To get your streaming set up, you just need to make a small URL change to your video URL. This is unlike other tools that require you to send your data to the service provider, set up webhooks, and understand all the complex API parameters.
We have uploaded a video to the integrated video hosting for this example. You can access the demo video here -
https://ik.imagekit.io/ikmedia/video_demo/test-video.mp4
Note: You could have also integrated your external storage like AWS S3, Google Cloud Storage, Azure Blob Storage, and more to stream videos stored in these object storages.
The above URL is ready to load an optimized video over a CDN, but it is still not ready for ABS. Let's see how we can do that.
Using HLS for Adaptive Bitrate Streaming with ImageKit
Adaptive Bitrate Streaming requires us to create a manifest file you can load into a video player. To create an HLS manifest file, you must add `ik-master.m3u8` at the end of your video file URL and specify the representations you want for this stream.
For example, to create a video stream with 360p, 480p, and 720p, the above URL will change to -
https://ik.imagekit.io/ikmedia/video_demo/test-video.mp4/ik-master.m3u8?tr=sr-360_480_720
When accessed for the first time, ImageKit will automatically start transcoding your video into different resolutions in the background and return the manifest file for HLS streaming.
We can load the above URL directly in a video player supporting HLS streams, and our adaptive bitrate streaming setup is ready! We can see in the screenshot below that the browser first started with a couple of 360p video segments for a fast load time before switching up the resolution to 720p because the user's device could load a higher resolution video.
Since generating manifests with multiple resolutions for ABS can take slightly longer than other real-time video optimizations and transformations, you can use video webhooks to listen to events indicating the completion of this transcoding process. Unlike AWS's native tooling, these video webhooks are optional and meant to enhance the developer experience. You can still offer adaptive bitrate streaming on your apps without using them.
Supporting APIs for video streaming in ImageKit
ImageKit also offers a URL-based API to generate video thumbnails from any frame of the original video and to generate a shorter video clip from any part of the video. Again, these APIs do not require extensive setup, just a small URL change.
For example, to get a video thumbnail from the 8th second of our sample video, the URL changes to -
https://ik.imagekit.io/ikmedia/video_demo/test-video.mp4/ik-thumbnail.jpg?tr=so-8
Here so
stands for start offset, or the number of seconds from the beginning of the video to capture the thumbnail.
You can combine this with other real-time image transformations offered by ImageKit like width, height, overlays, and more to get this video thumbnail set for your requirements.
The streaming manifest generated by ImageKit's ABS API can work with any video player. So you are free to use ImageKit with your existing video player or pick an open source like video.js and use it on your website.
Real-time optimizations and transformations without ABS using ImageKit
You might have really short videos that would not benefit from the network "adaptation" provided by adaptive bitrate streaming. Or you might want to keep your setup simple to be able to play a video file from its URL without needing a dedicated video player.
This is also something that ImageKit can help you with. Every video, either uploaded to ImageKit or in a connected storage, is accessible using a URL. Apart from Adaptive Bitrate Streaming, ImageKit offers several other real-time video optimizations and transformations that you can apply to your videos directly from the URL.
For example, we can optimize the video to a lighter WebM format, convert it to a vertical video and add our logo as a watermark, all from the URL.
https://ik.imagekit.io/ikmedia/video_demo/test-video.mp4?tr=w-400,h-640,l-image,i-logo_HuFO6vJ2x.png,lx-10,ly-10,w-100,l-end
Conclusion
Video streaming is an efficient way of loading large videos on a user's device and ensuring fast playback. With Adaptive Bitrate Streaming, you can adapt to the user's network speed and provide a good streaming experience globally.
Selecting a suitable video streaming API is crucial. It should fit your requirements, have quick response times, be easily integrable, and take care of critical aspects like video hosting and delivery.
ImageKit's video API is one such API that provides real-time URL-based adaptive bitrate streaming and video transformation APIs, along with an elaborate digital asset management system and a CDN. You can integrate it with your existing infrastructure and get started in minutes.
ImageKit also offers a generous free tier with 600 seconds of free video processing, 5GB of video storage, and 20GB of data delivery in a month.