<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Bruno Aggierni 🇺🇾</title>
    <description>The latest articles on Forem by Bruno Aggierni 🇺🇾 (@braggio).</description>
    <link>https://forem.com/braggio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1248714%2F9ba3b28e-7e08-46e6-8d9b-720957fe45a5.png</url>
      <title>Forem: Bruno Aggierni 🇺🇾</title>
      <link>https://forem.com/braggio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/braggio"/>
    <language>en</language>
    <item>
      <title>🚀 Meet CTV Bridge: The Open-Source Desktop App That Simplifies Tizen, webOS &amp; AndroidTV Development</title>
      <dc:creator>Bruno Aggierni 🇺🇾</dc:creator>
      <pubDate>Fri, 30 Jan 2026 12:45:55 +0000</pubDate>
      <link>https://forem.com/braggio/meet-ctv-bridge-the-open-source-desktop-app-that-simplifies-tizen-webos-development-3i14</link>
      <guid>https://forem.com/braggio/meet-ctv-bridge-the-open-source-desktop-app-that-simplifies-tizen-webos-development-3i14</guid>
      <description>&lt;p&gt;Developing apps for Samsung Tizen, LG webOS and AndroidTV TVs usually means juggling two SDKs, multiple CLI tools, different packaging formats, and long build/deploy cycles (Basically, a living hell). &lt;/p&gt;

&lt;p&gt;After years of dealing with this workflow (and getting extremely frustrated with 1000 coffees in my bloodstream), I built something to fix it.&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;em&gt;CTV Bridge&lt;/em&gt;&lt;/strong&gt;. A free, open-source desktop tool that unifies the entire Connected TV development workflow for both Samsung Tizen, LG webOS and AndroidTV.&lt;/p&gt;

&lt;p&gt;👉 GitHub: &lt;a href="https://github.com/Braggiouy/ctv-bridge" rel="noopener noreferrer"&gt;https://github.com/Braggiouy/ctv-bridge&lt;/a&gt; &lt;br&gt;
👉 Latest Release: &lt;a href="https://github.com/Braggiouy/ctv-bridge/releases" rel="noopener noreferrer"&gt;https://github.com/Braggiouy/ctv-bridge/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 What Is CTV Bridge?&lt;/p&gt;

&lt;p&gt;CTV Bridge is a cross-platform Electron app (macOS, Windows, Linux) built with React and TypeScript. It provides a simple and unified UI for device management, deployment, and debugging.&lt;/p&gt;

&lt;p&gt;It supports TVs from 2015 onward and requires zero CLI knowledge.&lt;/p&gt;

&lt;p&gt;⭐ Key Features&lt;/p&gt;

&lt;p&gt;🖥️ 1. Multi-Platform Support&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Samsung Tizen&lt;br&gt;
Full integration with Tizen Studio CLI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LG webOS&lt;br&gt;
Full support for webOS CLI tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android TV&lt;br&gt;
ADB-based deployment and debugging&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Configure all SDK paths directly in the app (no ENV variables required)&lt;/p&gt;

&lt;p&gt;⚡ 2. One-Click Deployment&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated Builds: Build .wgt .ipk and .apk packages automatically.&lt;/li&gt;
&lt;li&gt;Smart Logic: Automatically handles uninstallation of old versions and installation of new packages.&lt;/li&gt;
&lt;li&gt;Instant Launch: Auto-launches your app on the TV after deployment.&lt;/li&gt;
&lt;li&gt;Live Logs: Stream real-time deployment logs and detailed CLI output directly in the UI if something goes wrong.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🐞 3. Advanced Debugging&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in Inspector: Launch the webOS Inspector with Chrome DevTools in one click.&lt;/li&gt;
&lt;li&gt;Debug Mode: Automatically launches your app with debugging enabled.&lt;/li&gt;
&lt;li&gt;Run apps in debug mode via ADB. Stream logcat output directly in the app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📱 4. Unified Device Manager&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom Naming: Manage all your TVs by name, not just IP addresses.&lt;/li&gt;
&lt;li&gt;Auto-Detection: Smart SSH key handling and connection guidance.&lt;/li&gt;
&lt;li&gt;Connection Doctor: Built-in troubleshooting for connection issues.&lt;/li&gt;
&lt;li&gt;Secure Storage: WebOS passphrases are stored securely in your system's keychain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧩 Technical Overview&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tech stack: Electron + React + TypeScript&lt;/li&gt;
&lt;li&gt;License: MIT&lt;/li&gt;
&lt;li&gt;Privacy-focused: All data stored locally or in your system keychain.&lt;/li&gt;
&lt;li&gt;Auto-update notifications included.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🏁 Getting Started&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the latest release.&lt;/li&gt;
&lt;li&gt;Install required SDKs:

&lt;ul&gt;
&lt;li&gt;Tizen Studio (Samsung)&lt;/li&gt;
&lt;li&gt;webOS CLI (LG)&lt;/li&gt;
&lt;li&gt;Android SDK / ADB (Android TV)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Open CTV Bridge and configure SDK paths.&lt;/li&gt;

&lt;li&gt;Add your TV device (and give it a custom name!).&lt;/li&gt;

&lt;li&gt;Click Deploy to build, package, install, and launch your app.&lt;/li&gt;

&lt;li&gt;That’s it. No terminal required.
&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Contributions and feature requests are welcome!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⭐ Try CTV Bridge If you build Smart TV apps, give it a try and if it helps you, consider starring the repo!&lt;/p&gt;

&lt;p&gt;👉 GitHub: &lt;a href="https://github.com/Braggiouy/ctv-bridge" rel="noopener noreferrer"&gt;https://github.com/Braggiouy/ctv-bridge&lt;/a&gt; &lt;br&gt;
👉 Releases: &lt;a href="https://github.com/Braggiouy/ctv-bridge/releases" rel="noopener noreferrer"&gt;https://github.com/Braggiouy/ctv-bridge/releases&lt;/a&gt; &lt;br&gt;
👉 Issues / Feature Requests: &lt;a href="https://github.com/Braggiouy/ctv-bridge/issues" rel="noopener noreferrer"&gt;https://github.com/Braggiouy/ctv-bridge/issues&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ctv</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>electron</category>
    </item>
    <item>
      <title>🚀 Just Launched My Smart TV / OTT Portfolio 📺</title>
      <dc:creator>Bruno Aggierni 🇺🇾</dc:creator>
      <pubDate>Sun, 11 Jan 2026 19:05:26 +0000</pubDate>
      <link>https://forem.com/braggio/just-launched-my-smart-tv-ott-portfolio-3ela</link>
      <guid>https://forem.com/braggio/just-launched-my-smart-tv-ott-portfolio-3ela</guid>
      <description>&lt;p&gt;&lt;strong&gt;This isn’t a typical personal website.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a Frontend Engineer with a focus on OTT, Streaming, and SmartTV applications, I wanted to do something different.&lt;/p&gt;

&lt;p&gt;🔗 Live demo: &lt;a href="https://braggio.dev/" rel="noopener noreferrer"&gt;https://braggio.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s a TV-first streaming app pretending your browser is a Smart TV 📺&lt;/p&gt;

&lt;p&gt;(yes, you can navigate it with ↑ ↓ ← → + Enter).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s inside? 👀&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Remote-first navigation (actual TV-style focus, not “tab until it works”)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time QoS dashboard (bitrate, buffer health, dropped frames)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multiple video players under one abstraction (Shaka, HLS.js, Dash.js, Video.js, RX Player)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React 18 + TypeScript + Vite&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;@noriginmedia/norigin-spatial-navigation doing the heavy lifting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tailwind CSS + shadcn/ui (glassmorphic dark vibes)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Three.js via @react-three/fiber because… why not ✨&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;💡 The idea was simple:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My portfolio shouldn’t talk about OTT apps I develop. It &lt;em&gt;&lt;strong&gt;should&lt;/strong&gt;&lt;/em&gt; be one. &lt;/p&gt;

&lt;p&gt;If you’re into frontend, OTT, Smart TV apps (or just curious), I’d love to hear what you think 😃  🍿&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>portfolio</category>
      <category>react</category>
      <category>showdev</category>
    </item>
    <item>
      <title>🎬 The Beginner’s Guide to Open-Source Web Video Players for OTT Front-End Developers</title>
      <dc:creator>Bruno Aggierni 🇺🇾</dc:creator>
      <pubDate>Wed, 19 Nov 2025 16:15:05 +0000</pubDate>
      <link>https://forem.com/braggio/the-beginners-guide-to-open-source-web-video-players-for-ott-front-end-developers-3l9k</link>
      <guid>https://forem.com/braggio/the-beginners-guide-to-open-source-web-video-players-for-ott-front-end-developers-3l9k</guid>
      <description>&lt;h2&gt;
  
  
  &lt;code&gt;Introduction : What the F is this?&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;If you're getting into &lt;strong&gt;OTT&lt;/strong&gt; (Over-The-Top) streaming development (whether for Smart TVs, web platforms, streaming startups or whatever crazy project you are working on), understanding video players is a must. &lt;/p&gt;

&lt;p&gt;This article explains, in a beginner-friendly way:&lt;/p&gt;

&lt;p&gt;✔ What a video player actually does&lt;br&gt;
✔ The difference between &lt;strong&gt;HLS and MPEG-DASH&lt;/strong&gt;, as well as what &lt;strong&gt;DRM&lt;/strong&gt; is&lt;br&gt;
✔ List of (IMO) the best and most used open source OTT video players&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;What Exactly Is a Web Video Player?&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;A web video player is the part of a streaming app that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Displays the video (of course 🤦)&lt;/li&gt;
&lt;li&gt;Controls playback (play/pause/seek)&lt;/li&gt;
&lt;li&gt;Loads segments over the internet&lt;/li&gt;
&lt;li&gt;Manages adaptive streaming (quality changes)&lt;/li&gt;
&lt;li&gt;Handles &lt;strong&gt;DRM&lt;/strong&gt; (if required; More on this in a future article)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the hood, a player works on top of &lt;code&gt;HTMLVideoElement&lt;/code&gt;, and may rely on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MSE (Media Source Extensions)&lt;/strong&gt; → lets the player feed video chunks to the browser&lt;br&gt;
&lt;strong&gt;EME (Encrypted Media Extensions)&lt;/strong&gt; → required for DRM&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;Streaming Formats You MUST Know in OTT&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Most OTT services rely on &lt;strong&gt;Adaptive Bitrate Streaming&lt;/strong&gt; so video quality adjusts to network conditions.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Used By&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HLS (.m3u8)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adaptive streaming from Apple, extremely common on Web &amp;amp; TV&lt;/td&gt;
&lt;td&gt;Apple TV, iOS, Safari, many web players&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MPEG-DASH (.mpd)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open standard adaptive streaming&lt;/td&gt;
&lt;td&gt;Android TV, Tizen, WebOS, set-top boxes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Quick Tip: Most professional OTT apps support &lt;strong&gt;both formats&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;The Essential Open Source Players for OTT&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Personal list, order not relevant&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;1 - Video.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Getting started, building full featured web streaming UIs&lt;br&gt;
&lt;strong&gt;Supports:&lt;/strong&gt; HLS, DASH (via plugins), subtitles, ads, analytics&lt;br&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Easy to learn, huge plugin ecosystem&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Great for beginners&lt;/li&gt;
&lt;li&gt;Used by many streaming platforms&lt;/li&gt;
&lt;li&gt;Fully customizable UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Recommended for &lt;strong&gt;beginner OTT developers&lt;/strong&gt;. &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;2 - HLS.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Web apps streaming (HLS only).&lt;br&gt;
&lt;strong&gt;Supports:&lt;/strong&gt; HLS via MSE for Chrome/Firefox (Safari supports it natively)&lt;/p&gt;

&lt;p&gt;Browser support quick tip:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Safari plays HLS natively — Chrome/Firefox do not.&lt;br&gt;
&lt;strong&gt;HLS.js fixes that.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight&lt;/li&gt;
&lt;li&gt;Can be used standalone or inside Video.js&lt;/li&gt;
&lt;li&gt;Ideal for live streaming and VOD when only HLS is required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Recommended for &lt;strong&gt;HLS format handling and Apple developers&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;3 - Shaka Player (Google)&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Production OTT apps, DRM, multi-CDN environments&lt;br&gt;
&lt;strong&gt;Supports:&lt;/strong&gt; HLS, DASH, Widevine/PlayReady/FairPlay DRM&lt;br&gt;
&lt;strong&gt;Why it’s pro:&lt;/strong&gt; Extremely reliable ABR (adaptive bitrate logic)&lt;/p&gt;

&lt;p&gt;Used in enterprise streaming. Excellent for serious OTT engineering (and not so serious OTT engineers 😈) .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DRM support out of the box&lt;/li&gt;
&lt;li&gt;Powerful development APIs&lt;/li&gt;
&lt;li&gt;Great performance on Smart TV browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Recommended for &lt;strong&gt;advanced OTT developers&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;4 - Dash.js&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Services that stream (MPEG-DASH only)&lt;br&gt;
&lt;strong&gt;Supports:&lt;/strong&gt; Adaptive DASH streaming (reference implementation)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintained by the DASH Industry Forum&lt;/li&gt;
&lt;li&gt;Reliable ABR algorithms&lt;/li&gt;
&lt;li&gt;No built-in UI. You must create your own controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Learn if you work with &lt;strong&gt;DASH-only pipelines&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;5 - RxPlayer (by CANAL+)&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; production grade, customizable DASH/HLS playback&lt;br&gt;
&lt;strong&gt;Supports:&lt;/strong&gt; HLS, DASH, DRM, low latency streaming, offline playback&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designed for real OTT use cases&lt;/li&gt;
&lt;li&gt;Strong performance on Smart TVs&lt;/li&gt;
&lt;li&gt;Very robust streaming engine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Recommended for &lt;strong&gt;advanced OTT developers&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;Streaming Player Comparison (HLS / DASH / DRM)&lt;/code&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Player&lt;/th&gt;
&lt;th&gt;HLS&lt;/th&gt;
&lt;th&gt;DASH&lt;/th&gt;
&lt;th&gt;DRM Support&lt;/th&gt;
&lt;th&gt;Integration Complexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠ via VHS/HLS.js/Shaka&lt;/td&gt;
&lt;td&gt;⚠ via contrib-dash/Shaka&lt;/td&gt;
&lt;td&gt;⚠ Depends on engine/plugin&lt;/td&gt;
&lt;td&gt;Easy/Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HLS.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✔ Desktop: via JS, Safari: native&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⚠ Widevine requires EME, FairPlay handled natively in Safari/iOS&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shaka Player&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;✔ Widevine / PlayReady, ⚠ FairPlay only Safari/iOS&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dash.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠ CMAF-HLS only&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;⚠ Requires EME for DRM&lt;/td&gt;
&lt;td&gt;Medium–High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RxPlayer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;✔&lt;/td&gt;
&lt;td&gt;✔ Widevine / PlayReady&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;DASH not supported by HLS.js  &lt;br&gt;
FairPlay supported only in Safari/iOS natively&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;Which Player Should You Learn First? (And suffer in the process)&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Getting started with OTT streaming can feel like a jungle 😅. &lt;/p&gt;

&lt;p&gt;Here's a simple path I’d recommend:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 — Start with &lt;strong&gt;Video.js&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Video.js is your playground for learning the basics. It lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play HLS (&lt;code&gt;.m3u8&lt;/code&gt;) and DASH (&lt;code&gt;.mpd&lt;/code&gt;) via plugins&lt;/li&gt;
&lt;li&gt;Add subtitles (WebVTT)&lt;/li&gt;
&lt;li&gt;Control playback with JS APIs&lt;/li&gt;
&lt;li&gt;Customize your UI (buttons, progress bar, volume, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Quick tip: HLS works out-of-the-box on Safari/iOS. On Chrome/Firefox, Video.js uses &lt;strong&gt;HLS.js or VHS&lt;/strong&gt; behind the scenes.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2 — Dive into &lt;strong&gt;HLS.js&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Handles HLS on browsers that don’t support it natively&lt;/li&gt;
&lt;li&gt;Lets you play with &lt;strong&gt;adaptive streaming&lt;/strong&gt; and &lt;strong&gt;MSE&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Can be used standalone or inside Video.js for more control&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 3 — Level up with &lt;strong&gt;Shaka Player&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Plays HLS and DASH&lt;/li&gt;
&lt;li&gt;Supports &lt;strong&gt;DRM&lt;/strong&gt; (Widevine/PlayReady, FairPlay on Safari/iOS)&lt;/li&gt;
&lt;li&gt;Smart TV ready&lt;/li&gt;
&lt;li&gt;Advanced ABR logic for smooth playback&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If your goal is Smart TV or professional OTT apps, learning Shaka is essential in my opinion. It's like a "Swiss Army Knife" in the industry. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Quick tip: Don’t rush. Start with Video.js, understand HLS.js, then move to Shaka when you feel comfortable with playback, ABR, and DRM.&lt;/em&gt; &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;OTT Streaming Glossary used&lt;/code&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;What It Means / Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HLS (.m3u8)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apple’s adaptive streaming format. Works natively on Safari/iOS, requires JS players elsewhere (HLS.js/Video.js).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MPEG-DASH (.mpd)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open standard adaptive streaming. Supported widely on Android TV, Tizen, WebOS, and most modern browsers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ABR (Adaptive Bitrate)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adjusts video quality automatically based on network speed to avoid buffering.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DRM (Widevine, FairPlay, PlayReady)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Protects premium content; FairPlay works only natively on Safari/iOS. Widevine &amp;amp; PlayReady require EME integration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CDN Delivery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Content Delivery Network. Distributes video globally to reduce latency and buffering.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Manifest / Playlist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;File linking video chunks (&lt;code&gt;.m3u8&lt;/code&gt; for HLS, &lt;code&gt;.mpd&lt;/code&gt; for DASH). Player reads this to stream content.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MSE (Media Source Extensions)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JS API that allows feeding video chunks to the browser for adaptive streaming.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EME (Encrypted Media Extensions)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JS API required for DRM playback in browsers (Widevine, PlayReady).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VOD (Video on Demand)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pre-recorded streaming content that users can watch anytime.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Live Streaming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time streaming of events; requires low-latency and ABR handling.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Segment / Chunk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Small piece of video streamed separately to allow adaptive bitrate and smooth playback.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Low-Latency Streaming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reduces delay between broadcaster and viewer, important for sports, auctions, or interactive content.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Player Engine / Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The underlying JS library or player (Video.js, Shaka, HLS.js) that handles playback, ABR, DRM, and UI.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plugins / Extensions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Add-ons for Video.js or other players to support DASH, subtitles, analytics, ads, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;If&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="nx"&gt;helped&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;consider&lt;/span&gt; &lt;span class="nx"&gt;sharing&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;other&lt;/span&gt; &lt;span class="nx"&gt;devs&lt;/span&gt; &lt;span class="nx"&gt;starting&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;OTT&lt;/span&gt; &lt;span class="err"&gt;🚀&lt;/span&gt;  
&lt;span class="err"&gt;💬&lt;/span&gt; &lt;span class="nx"&gt;Suggestions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fixes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;or&lt;/span&gt; &lt;span class="nx"&gt;improvements&lt;/span&gt; &lt;span class="nx"&gt;are&lt;/span&gt; &lt;span class="nx"&gt;always&lt;/span&gt; &lt;span class="nx"&gt;welcome&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Made with ❤️ for the streaming developer community by &lt;a href="https://github.com/Braggiouy" rel="noopener noreferrer"&gt;Braggio - GitHub&lt;/a&gt;&lt;/p&gt;




</description>
      <category>streaming</category>
      <category>ott</category>
      <category>frontend</category>
      <category>smarttv</category>
    </item>
    <item>
      <title>Free OTT Streaming Cheat Sheet (HLS, DASH, DRM, ABR &amp; More)</title>
      <dc:creator>Bruno Aggierni 🇺🇾</dc:creator>
      <pubDate>Tue, 18 Nov 2025 10:56:00 +0000</pubDate>
      <link>https://forem.com/braggio/free-ott-streaming-cheat-sheet-hls-dash-drm-abr-more-1ac7</link>
      <guid>https://forem.com/braggio/free-ott-streaming-cheat-sheet-hls-dash-drm-abr-more-1ac7</guid>
      <description>&lt;p&gt;If you're learning about &lt;strong&gt;OTT (Over-The-Top) video streaming&lt;/strong&gt;, Smart TV apps, or working with web video players, this cheat sheet will help you understand the essential terms used in the streaming industry. &lt;/p&gt;

&lt;p&gt;(And will help me get back here whenever I forget about a term 😅 )&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;⚠️ This cheat sheet is evolving. More terms and explanations will be added over time.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📌 Key OTT Streaming Terms
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HLS (.m3u8)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Format&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Apple&lt;/strong&gt; adaptive streaming format widely used in OTT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MPEG-DASH (.mpd)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Format&lt;/td&gt;
&lt;td&gt;Open standard adaptive streaming format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Manifest (Playlist)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Streaming Concept&lt;/td&gt;
&lt;td&gt;File listing video segments, audio, and subtitles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ABR (Adaptive Bitrate)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Streaming Concept&lt;/td&gt;
&lt;td&gt;Automatic quality switching based on network speed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DRM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Security / Playback&lt;/td&gt;
&lt;td&gt;Protects premium content from unauthorized access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Widevine / PlayReady / FairPlay&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;DRM Systems&lt;/td&gt;
&lt;td&gt;Most common DRM platforms for web &amp;amp; Smart TVs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MSE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Browser API&lt;/td&gt;
&lt;td&gt;Browser API for feeding video chunks to playback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EME&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Browser API / DRM&lt;/td&gt;
&lt;td&gt;Browser API required for encrypted playback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Segment / Chunk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Streaming Concept&lt;/td&gt;
&lt;td&gt;Small pieces of video (chunks) delivered during playback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VOD vs Live&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Streaming Type&lt;/td&gt;
&lt;td&gt;On-demand vs real-time streaming content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CDN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Delivery&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Content Delivery Network&lt;/strong&gt; for fast global streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💬 Feedback or Suggestions?
&lt;/h2&gt;

&lt;p&gt;If you want me to expand this cheat sheet into a full OTT Developer Handbook, or include topics like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codecs (AV1, HEVC, VP9, AVC)&lt;/li&gt;
&lt;li&gt;SSAI (Server-Side Ad Insertion) vs CSAI (Client-Side Ad Insertion)&lt;/li&gt;
&lt;li&gt;Multi-CDN routing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment below!&lt;/p&gt;




&lt;p&gt;Follow me on Dev.to to get notified when new articles are out 🚀&lt;/p&gt;




&lt;p&gt;Made with ❤️ for the streaming developer community by &lt;a href="https://github.com/Braggiouy" rel="noopener noreferrer"&gt;Braggio - GitHub&lt;/a&gt;&lt;/p&gt;




</description>
      <category>streaming</category>
      <category>ott</category>
      <category>smarttv</category>
      <category>video</category>
    </item>
  </channel>
</rss>
