Products
Products
Video Hosting
Upload and manage your videos in a centralized video library.
Image Hosting
Upload and manage all your images in a centralized library.
Galleries
Choose from 100+templates to showcase your media in style.
Video Messaging
Record, and send personalized video messages.
CincoTube
Create your own community video hub your team, students or fans.
Pages
Create dedicated webpages to share your videos and images.
Live
Create dedicated webpages to share your videos and images.
For Developers
Video API
Build a unique video experience.
DeepUploader
Collect and store user content from anywhere with our file uploader.
Solutions
Solutions
Enterprise
Supercharge your business with secure, internal communication.
Townhall
Webinars
Team Collaboration
Learning & Development
Creative Professionals
Get creative with a built in-suite of editing and marketing tools.
eCommerce
Boost sales with interactive video and easy-embedding.
Townhall
Webinars
Team Collaboration
Learning & Development
eLearning & Training
Host and share course materials in a centralized portal.
Sales & Marketing
Attract, engage and convert with interactive tools and analytics.
"Cincopa helped my Enterprise organization collaborate better through video."
Book a Demo
Resources
Resources
Blog
Learn about the latest industry trends, tips & tricks.
Help Centre
Get access to help articles FAQs, and all things Cincopa.
Partners
Check out our valued list of partners.
Product Updates
Stay up-to-date with our latest greatest features.
Ebooks, Guides & More
Customer Stories
Hear how we've helped businesses succeed.
Boost Campaign Performance Through Video
Discover how to boost your next campaign by using video.
Download Now
Pricing
Watch a Demo
Demo
Login
Start Free Trial
HLS.js is a JavaScript library that enables browsers to decode and play HLS (HTTP Live Streaming) content directly. It is a JavaScript implementation of Apple's HLS specification, which is a widely adopted protocol for adaptive streaming, where video is delivered in small segments. Each segment can be a different bitrate, allowing the client to switch between them based on the viewer's bandwidth. Setting Up HLS.js To get started with HLS.js, you need to install the library and set up a basic HTML5 video player. Step 1: Installing HLS.js Install HLS.js via npm for your project or include it via a CDN. NPM Installation : npm install hls.js CDN Installation : Step 2: HTML5 Video Player Setup Next, need to set up a basic HTML5 video element. This player will serve as the container where the video content will be displayed.
Explanation: The
element is where HLS.js will inject the video content. The controls attribute enables user controls like play, pause, and volume. Integrating HLS.js with the Video Player After setting up the video element, you can initialize HLS.js and bind it to the video player. This allows HLS.js to load and play the video stream. if (Hls.isSupported()) { var video = document.getElementById('video'); var hls = new Hls(); hls.loadSource('https://path/to/your/hls/playlist.m3u8'); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function(event, data) { console.log('Manifest loaded, found ' + data.levels.length + ' quality level(s)'); }); hls.on(Hls.Events.ERROR, function(event, data) { if (data.fatal) { switch (data.type) { case Hls.ErrorTypes.NETWORK_ERROR: console.error('Network error'); break; case Hls.ErrorTypes.MEDIA_ERROR: console.error('Media error'); break; default: console.error('Fatal error'); break; } } }); } else { console.error('HLS.js is not supported in this browser'); } Explanation: Hls.isSupported() : Checks if HLS.js is supported by the browser. hls.loadSource() : Loads the HLS stream, providing the URL to the M3U8 playlist. hls.attachMedia() : Binds the HLS.js instance to the HTML5 video element, enabling playback. Hls.Events.MANIFEST_PARSED : This event is fired when the HLS manifest is successfully parsed, which allows you to check the available quality levels. Hls.Events.ERROR : Handles errors and offers recovery options. Customizing Video Player Features with HLS.js Once HLS.js is integrated into the player, you can add various custom features to enhance user experience. Some common features include: Adaptive Bitrate Streaming HLS.js automatically handles adaptive bitrate streaming, allowing it to switch between different video quality levels based on network conditions. However, you can customize the bitrate switching logic based on your requirements. hls.on(Hls.Events.LEVEL_SWITCHED, function(event, data) { console.log('Switched to level ' + data.level); }); Explanation: LEVEL_SWITCHED : This event is triggered whenever the quality level changes, allowing you to track which quality level is currently being used. Custom Error Handling With HLS.js, you can handle different types of errors, such as network errors or media errors. This is particularly important for ensuring a seamless experience when issues arise during video playback. hls.on(Hls.Events.ERROR, function(event, data) { if (data.fatal) { console.error('Error occurred: ', data); // Perform additional error handling like retry logic or fallback mechanism } }); Explanation: Hls.Events.ERROR : You can use this event to listen for various errors, such as network failures or media decoding errors, and take appropriate actions like retrying the stream or informing the user. Custom Controls and UI Elements You can add custom controls such as a play/pause button, a volume slider, or a seek bar to improve the interactivity of your player. This requires handling the video playback state and updating the UI accordingly. document.getElementById('playPauseButton').addEventListener('click', function() { if (video.paused) { video.play(); } else { video.pause(); } }); Explanation: play() and pause() : Control video playback. The code listens for user input and toggles between playing and pausing the video. Full-Screen Mode Use the Fullscreen API (requestFullscreen() and vendor-prefixed alternatives) to enable full-screen playback. This enhances the viewing experience and should be implemented with cross-browser compatibility. document.getElementById('fullscreenButton').addEventListener('click', function() { if (video.requestFullscreen) { video.requestFullscreen(); } else if (video.mozRequestFullScreen) { // Firefox video.mozRequestFullScreen(); } else if (video.webkitRequestFullscreen) { // Chrome, Safari and Opera video.webkitRequestFullscreen(); } }); Explanation: requestFullscreen() : Requests full-screen mode for the video element, making the viewing experience more engaging. Performance Optimization Tips for HLS.js To ensure optimal performance when using HLS.js, consider the following tips: Limit the Number of Quality Levels: Reducing the number of quality levels in your stream can help improve performance by reducing the load on the player. You can achieve this by manually defining the available quality levels. hls.config.levels = [ { height: 360, bitrate: 500000 }, { height: 720, bitrate: 1500000 } ]; Manage Buffering Efficiently: HLS.js supports buffer management features that allow you to control how much content is buffered before playback. Adjusting buffer sizes based on network speed can help prevent excessive buffering and playback interruptions. hls.config.maxBufferLength = 30; // Set maximum buffer length Optimize Media Fragmentation: Use shorter media segments to reduce latency and improve recovery from network issues. Configure fragment loading timeouts to handle slow or failed requests appropriately. hls.config.fragmentLoadingTimeOut = 5000; // Set timeout for fragment loading