<?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>DEV Community: Faridul Islam</title>
    <description>The latest articles on DEV Community by Faridul Islam (@foridpathan).</description>
    <link>https://dev.to/foridpathan</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%2F1167817%2F0e8b3094-96f5-4272-95e4-ea08c121da1a.jpeg</url>
      <title>DEV Community: Faridul Islam</title>
      <link>https://dev.to/foridpathan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/foridpathan"/>
    <language>en</language>
    <item>
      <title>Building Smart TV Apps Just Got Easier</title>
      <dc:creator>Faridul Islam</dc:creator>
      <pubDate>Sun, 19 Oct 2025 09:08:22 +0000</pubDate>
      <link>https://dev.to/foridpathan/building-smart-tv-apps-just-got-easier-2lae</link>
      <guid>https://dev.to/foridpathan/building-smart-tv-apps-just-got-easier-2lae</guid>
      <description>&lt;h1&gt;
  
  
  Introducing the Smart TV
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;A comprehensive guide to creating professional Smart TV applications with React and TypeScript&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you're building Smart TV apps, you need to check out the &lt;strong&gt;Smart TV&lt;/strong&gt; — a comprehensive monorepo with everything you need to build professional streaming apps. It includes a powerful video player, data fetching utilities, and a CLI to get started in seconds. All open-source and ready to use!&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: Smart TV Development Is Hard
&lt;/h2&gt;

&lt;p&gt;Let me paint you a picture: You're a developer tasked with building a streaming app for Smart TVs. Sounds exciting, right? Until you realize...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎮 &lt;strong&gt;Navigation is completely different&lt;/strong&gt; — Users navigate with remote controls, not mice or touchscreens&lt;/li&gt;
&lt;li&gt;📱 &lt;strong&gt;Multiple platforms&lt;/strong&gt; — Samsung Tizen, LG webOS, Fire TV... each with quirks&lt;/li&gt;
&lt;li&gt;🎬 &lt;strong&gt;Video playback is complex&lt;/strong&gt; — Adaptive streaming, DRM, subtitle support, live content&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Performance matters&lt;/strong&gt; — TV hardware is limited; every KB counts&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Data management&lt;/strong&gt; — Efficient caching and fetching for smooth experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could spend weeks (or months!) solving these problems from scratch. Or you could use a toolkit that's already solved them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution: Smart TV
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Smart TV&lt;/strong&gt; is an open-source monorepo that provides everything developers need to build modern Smart TV applications. Think of it as your development accelerator — it handles the hard parts so you can focus on building great user experiences.&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 What's Inside?
&lt;/h3&gt;

&lt;p&gt;The toolkit consists of three core packages published on npm:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;@smart-tv/player&lt;/strong&gt; 🎬
&lt;/h4&gt;

&lt;p&gt;A production-ready video player built on Shaka Player with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Adaptive streaming (DASH, HLS)&lt;/li&gt;
&lt;li&gt;✅ DRM support (Widevine, PlayReady, FairPlay)&lt;/li&gt;
&lt;li&gt;✅ Subtitles and multi-audio tracks&lt;/li&gt;
&lt;li&gt;✅ Live and VOD content&lt;/li&gt;
&lt;li&gt;✅ Fully customizable UI&lt;/li&gt;
&lt;li&gt;✅ TypeScript support&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;@smart-tv/query&lt;/strong&gt; 🔄
&lt;/h4&gt;

&lt;p&gt;Smart data fetching and caching utilities designed for TV apps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Automatic caching and revalidation&lt;/li&gt;
&lt;li&gt;✅ Infinite scrolling support&lt;/li&gt;
&lt;li&gt;✅ Request deduplication&lt;/li&gt;
&lt;li&gt;✅ Optimistic updates&lt;/li&gt;
&lt;li&gt;✅ Memory-efficient for TV hardware&lt;/li&gt;
&lt;li&gt;✅ React hooks for easy integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. &lt;strong&gt;create-smart-tv-app&lt;/strong&gt; 🚀
&lt;/h4&gt;

&lt;p&gt;A CLI tool to scaffold complete Smart TV projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ One command setup&lt;/li&gt;
&lt;li&gt;✅ Pre-configured TypeScript, ESLint, Prettier&lt;/li&gt;
&lt;li&gt;✅ Tailwind CSS included&lt;/li&gt;
&lt;li&gt;✅ Development server ready&lt;/li&gt;
&lt;li&gt;✅ Production build optimized&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Getting Started in 30 Seconds
&lt;/h2&gt;

&lt;p&gt;Want to see how easy it is? Here's how you create a complete Smart TV app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a new app&lt;/span&gt;
npm create smart-tv-app my-streaming-app

&lt;span class="c"&gt;# Start development&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;my-streaming-app
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! You now have a fully configured Smart TV application with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript for type safety&lt;/li&gt;
&lt;li&gt;Tailwind CSS for styling&lt;/li&gt;
&lt;li&gt;Spatial navigation ready&lt;/li&gt;
&lt;li&gt;Hot module reload for fast development&lt;/li&gt;
&lt;li&gt;Production builds optimized for TV platforms&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Real-World Usage Examples
&lt;/h2&gt;

&lt;p&gt;Let's see the packages in action:&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 1: Adding a Video Player
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Player&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@smart-tv/player&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@smart-tv/player/styles.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;VideoPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Player&lt;/span&gt;
      &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/content/manifest.mpd"&lt;/span&gt;
      &lt;span class="na"&gt;poster&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/poster.jpg"&lt;/span&gt;
      &lt;span class="na"&gt;autoPlay&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;controls&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;onPlay&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Playing!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;onError&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The player handles all the complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adaptive bitrate streaming&lt;/li&gt;
&lt;li&gt;Buffer management&lt;/li&gt;
&lt;li&gt;Error recovery&lt;/li&gt;
&lt;li&gt;Accessibility features&lt;/li&gt;
&lt;li&gt;Cross-platform compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example 2: Fetching Data Efficiently
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useQuery&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@smart-tv/query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MovieList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;refetch&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movies&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;trending&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/movies/trending&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;staleTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 5 minutes&lt;/span&gt;
    &lt;span class="na"&gt;cacheTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 10 minutes&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;LoadingSkeleton&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ErrorMessage&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Grid&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;movie&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MovieCard&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;movie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;movie&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;movie&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Grid&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The query hook provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic caching&lt;/li&gt;
&lt;li&gt;Background refetching&lt;/li&gt;
&lt;li&gt;Loading and error states&lt;/li&gt;
&lt;li&gt;Request deduplication&lt;/li&gt;
&lt;li&gt;Memory efficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example 3: Infinite Scrolling
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useInfiniteQuery&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@smart-tv/query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;BrowseMovies&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;fetchNextPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;hasNextPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useInfiniteQuery&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;movies&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;pageParam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/api/movies?page=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;pageParam&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;getNextPageParam&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nextPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;InfiniteScroll&lt;/span&gt;
      &lt;span class="na"&gt;onEndReached&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;fetchNextPage&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;hasMore&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;hasNextPage&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flatMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
        &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;movie&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MovieCard&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;movie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;movie&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;movie&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;))&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;InfiniteScroll&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎨 Key Features That Make Development Easy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Type Safety First&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Everything is written in TypeScript. Get autocomplete, catch errors early, and ship with confidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Modern Developer Experience&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vite for blazing-fast development&lt;/li&gt;
&lt;li&gt;Hot module reload&lt;/li&gt;
&lt;li&gt;ESLint and Prettier pre-configured&lt;/li&gt;
&lt;li&gt;Clear error messages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Performance Optimized&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Minimal bundle sizes&lt;/li&gt;
&lt;li&gt;Tree-shakeable exports&lt;/li&gt;
&lt;li&gt;Lazy loading support&lt;/li&gt;
&lt;li&gt;Memory-efficient caching&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Platform Support&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Works across all major Smart TV platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Samsung Tizen (2019+)&lt;/li&gt;
&lt;li&gt;LG webOS (4.0+)&lt;/li&gt;
&lt;li&gt;Fire TV&lt;/li&gt;
&lt;li&gt;Modern web browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Customizable&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every component is customizable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Override default styles with Tailwind&lt;/li&gt;
&lt;li&gt;Use your own themes&lt;/li&gt;
&lt;li&gt;Extend functionality&lt;/li&gt;
&lt;li&gt;Bring your own components&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ The Tech Stack
&lt;/h2&gt;

&lt;p&gt;Built with modern, battle-tested technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt; — Latest React features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript 5&lt;/strong&gt; — Type safety and better DX&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; — Fast builds and HMR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turborepo&lt;/strong&gt; — Monorepo management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shaka Player&lt;/strong&gt; — Industry-standard video player&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; — Utility-first styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; — Fast, efficient package manager&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Resources for Developers
&lt;/h2&gt;

&lt;p&gt;The project includes comprehensive documentation:&lt;/p&gt;

&lt;h3&gt;
  
  
  For Users
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quick Start Guide&lt;/strong&gt; — Get running in minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Documentation&lt;/strong&gt; — Complete reference for all packages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt; — Real-world usage patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration Guides&lt;/strong&gt; — Upgrade smoothly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For Contributors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contributing Guide&lt;/strong&gt; — How to contribute&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code of Conduct&lt;/strong&gt; — Community standards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture Docs&lt;/strong&gt; — Understanding the codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Policy&lt;/strong&gt; — Responsible disclosure&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌟 Why This Matters
&lt;/h2&gt;

&lt;p&gt;Smart TV development doesn't have to be painful. With the right tools, you can:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Save Weeks of Development Time&lt;/strong&gt; — Stop reinventing the wheel&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Ship Faster&lt;/strong&gt; — Get to market quickly with production-ready components&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Focus on UX&lt;/strong&gt; — Spend time on features, not infrastructure&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Scale Confidently&lt;/strong&gt; — Battle-tested patterns and performance&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Join a Community&lt;/strong&gt; — Open source means continuous improvement&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Real-World Use Cases
&lt;/h2&gt;

&lt;p&gt;This toolkit is perfect for:&lt;/p&gt;

&lt;h3&gt;
  
  
  Streaming Platforms
&lt;/h3&gt;

&lt;p&gt;Build the next Netflix, Disney+, or HBO Max for Smart TVs&lt;/p&gt;

&lt;h3&gt;
  
  
  Live TV Apps
&lt;/h3&gt;

&lt;p&gt;Sports streaming, news channels, live events&lt;/p&gt;

&lt;h3&gt;
  
  
  Educational Content
&lt;/h3&gt;

&lt;p&gt;E-learning platforms, training videos, courses&lt;/p&gt;

&lt;h3&gt;
  
  
  IPTV Solutions
&lt;/h3&gt;

&lt;p&gt;Custom IPTV applications with VOD and live content&lt;/p&gt;

&lt;h3&gt;
  
  
  Corporate Training
&lt;/h3&gt;

&lt;p&gt;Internal training and communication platforms&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Project Status
&lt;/h2&gt;

&lt;p&gt;The Smart TV is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Open Source&lt;/strong&gt; — MIT License&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Actively Maintained&lt;/strong&gt; — Regular updates&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Production Ready&lt;/strong&gt; — Battle-tested components&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Well Documented&lt;/strong&gt; — Comprehensive guides&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Community Driven&lt;/strong&gt; — Open to contributions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 How You Can Help
&lt;/h2&gt;

&lt;p&gt;This is a community project, and there are many ways to contribute:&lt;/p&gt;

&lt;h3&gt;
  
  
  As a Developer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Star the repository on GitHub&lt;/li&gt;
&lt;li&gt;🐛 Report bugs and issues&lt;/li&gt;
&lt;li&gt;💡 Suggest new features&lt;/li&gt;
&lt;li&gt;🔧 Submit pull requests&lt;/li&gt;
&lt;li&gt;📝 Improve documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  As a User
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🚀 Build something cool and share it&lt;/li&gt;
&lt;li&gt;💬 Join discussions and help others&lt;/li&gt;
&lt;li&gt;📢 Spread the word&lt;/li&gt;
&lt;li&gt;✍️ Write tutorials and articles&lt;/li&gt;
&lt;li&gt;🎥 Create video content&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💭 The Philosophy
&lt;/h2&gt;

&lt;p&gt;Smart TV development should be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Simple&lt;/strong&gt; — Easy to start, easy to scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern&lt;/strong&gt; — Use the latest tools and patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performant&lt;/strong&gt; — Optimized for TV hardware&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible&lt;/strong&gt; — Adapt to your needs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community-Driven&lt;/strong&gt; — Better together&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🎯 What's Next?
&lt;/h2&gt;

&lt;p&gt;The roadmap includes exciting features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎮 Enhanced spatial navigation utilities&lt;/li&gt;
&lt;li&gt;📱 More platform integrations (tvOS, Roku)&lt;/li&gt;
&lt;li&gt;🔐 Advanced DRM and security features&lt;/li&gt;
&lt;li&gt;📊 Performance monitoring and analytics&lt;/li&gt;
&lt;li&gt;🧪 Testing utilities and helpers&lt;/li&gt;
&lt;li&gt;📖 More examples and starter templates&lt;/li&gt;
&lt;li&gt;🌍 Internationalization support&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔗 Get Started Today
&lt;/h2&gt;

&lt;p&gt;Ready to build your Smart TV app?&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;npm:&lt;/strong&gt; &lt;code&gt;npm create smart-tv-app my-app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🐙 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/smarttv-dev/smart-tv" rel="noopener noreferrer"&gt;github.com/smarttv-dev/smart-tv&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Documentation:&lt;/strong&gt; Check the README and guides&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Community:&lt;/strong&gt; Join GitHub Discussions&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Issues:&lt;/strong&gt; Report bugs and request features&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Install Individual Packages
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Video player&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @smart-tv/player

&lt;span class="c"&gt;# Data fetching&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @smart-tv/query

&lt;span class="c"&gt;# CLI tool&lt;/span&gt;
npm create smart-tv-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎬 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building for Smart TVs is challenging, but it doesn't have to be overwhelming. The Smart TV provides the foundation you need to create amazing streaming experiences without starting from scratch.&lt;/p&gt;

&lt;p&gt;Whether you're building a streaming platform, live TV app, or educational content portal, these tools will save you time and help you ship faster.&lt;/p&gt;

&lt;p&gt;The project is open source, actively maintained, and ready for production use. Give it a try, contribute improvements, and help make Smart TV development better for everyone!&lt;/p&gt;




&lt;h2&gt;
  
  
  👏 Acknowledgments
&lt;/h2&gt;

&lt;p&gt;This toolkit wouldn't be possible without amazing open-source projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React team for the incredible UI library&lt;/li&gt;
&lt;li&gt;Shaka Player for robust video playback&lt;/li&gt;
&lt;li&gt;Vite team for fast development experience&lt;/li&gt;
&lt;li&gt;Turborepo for monorepo management&lt;/li&gt;
&lt;li&gt;The entire open-source community&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📬 Let's Connect
&lt;/h2&gt;

&lt;p&gt;Have questions? Want to share what you're building?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💬 Start a discussion on GitHub&lt;/li&gt;
&lt;li&gt;🐛 Report issues and bugs&lt;/li&gt;
&lt;li&gt;⭐ Star the repository&lt;/li&gt;
&lt;li&gt;🔀 Fork and contribute&lt;/li&gt;
&lt;li&gt;📢 Share with other developers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Let's build the future of Smart TV apps together! 🚀📺&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is meant to help developers discover and use the Smart TV. The project is open source and welcomes contributions from the community.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Tags
&lt;/h3&gt;

&lt;h1&gt;
  
  
  SmartTV #React #TypeScript #OpenSource #WebDev #JavaScript #Streaming #VideoPlayer #Development #Frontend #TechTools #Programming #DevTools #NPM #Monorepo
&lt;/h1&gt;

</description>
      <category>smarttv</category>
      <category>tizen</category>
      <category>webos</category>
      <category>videoplayer</category>
    </item>
    <item>
      <title>How to play encrypted HLS &amp; DASH play in React with Shaka Player</title>
      <dc:creator>Faridul Islam</dc:creator>
      <pubDate>Thu, 05 Oct 2023 12:38:02 +0000</pubDate>
      <link>https://dev.to/foridpathan/how-to-play-encrypted-hls-dash-play-in-react-with-shaka-play-1cad</link>
      <guid>https://dev.to/foridpathan/how-to-play-encrypted-hls-dash-play-in-react-with-shaka-play-1cad</guid>
      <description>&lt;p&gt;**Shaka Player **is an open-source JavaScript library designed for adaptive media playback. Here are some key points about Shaka Player based on the information gathered from multiple sources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Media Formats&lt;/strong&gt;: Shaka Player supports adaptive media formats including Dynamic Adaptive Streaming over HTTP (DASH), Apple's HTTP Live Streaming (HLS), and Microsoft Smooth Streaming (MSS), allowing it to play various media formats in a browser without needing plugins or Flash​.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Standards&lt;/strong&gt;: It leverages open web standards such as MediaSource Extensions (MSE) and Encrypted Media Extensions (EME) to facilitate media playback and handling of adaptive bitrate streaming, which dynamically adjusts the quality of a video stream in real-time based on the network conditions​.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DRM Services&lt;/strong&gt;: Shaka Player is notable for its support of Digital Rights Management (DRM) services, which are crucial for content protection. It binds the Video Element and Widevine Content Decryption Module (CDM) by utilizing the EME API to handle adaptive bitrate streaming, ensuring that the quality of the media adapts to the user's bandwidth​.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Popularity&lt;/strong&gt;: It's recognized as the second-most-popular library for media playback, which highlights its reliability and widespread acceptance in the developer community​.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Shaka Player is designed to be compiled before being deployed, indicating a level of flexibility and control for developers who want to integrate it into their projects​.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintained by Google&lt;/strong&gt;: The player is maintained by Google, which suggests a level of credibility and support for the library.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How to use React or Next js
&lt;/h3&gt;

&lt;p&gt;There are lots more packages available on the NPM Packager manager but all of the packages are backdated and there are errors. Also, all packages did not support typescript. So in that case I created a typescript-supported Shaka player for React or Nextjs.&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/shaka-react-video-player"&gt;shaka-react-video-player&lt;/a&gt; This is best to use for React 16, 17, and 18 versions. &lt;/p&gt;

&lt;h3&gt;
  
  
  How to use &lt;strong&gt;shaka-react-video-player&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;npm install shaka-react-video-player --save&lt;/code&gt;&lt;br&gt;
&lt;code&gt;yarn add shaka-react-video-player&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Usage
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ShakaPlayer&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shaka-react-video-player&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shaka-react-video-player/dist/controls.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shaka-react-video-player/dist/themes.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ShakaPlayer&lt;/span&gt;
      &lt;span class="nx"&gt;autoPlay&lt;/span&gt;
      &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;youtube&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following &lt;code&gt;ShakaPlayer&lt;/code&gt; properties are supported by all of the video tags in HTML:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;src&lt;/td&gt;
&lt;td&gt;The MPEG-DASH, or HLS media asset. Is provided to &lt;code&gt;shaka.Player.load&lt;/code&gt; on mount or change.&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;autoPlay&lt;/td&gt;
&lt;td&gt;Whether the asset should autoplay or not, directly bound to the &lt;code&gt;HTMLVideoElement&lt;/code&gt; element.&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;width&lt;/td&gt;
&lt;td&gt;Width of the player.&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;height&lt;/td&gt;
&lt;td&gt;Height of the player.&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;playbackRate&lt;/td&gt;
&lt;td&gt;Sets the speed of the audio/video playback.&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;muted&lt;/td&gt;
&lt;td&gt;Sets whether the video is muted or not&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loop&lt;/td&gt;
&lt;td&gt;Sets whether the audio/video should start over again when finished&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;volume&lt;/td&gt;
&lt;td&gt;Sets the volume of the audio/video&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;className&lt;/td&gt;
&lt;td&gt;Adds a class to the root element, which is a div.&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;themes&lt;/td&gt;
&lt;td&gt;There have 'default, youtube'&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Follow the npm documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's needed for improvement?
&lt;/h3&gt;

&lt;p&gt;You guys need to support for this package improvement. Please feel free to contribute to this package. &lt;br&gt;
Here is GitHub: &lt;a href="https://github.com/foridpathan/react-shaka-player"&gt;shaka-react-video-player&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What issue did I find here?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. HLS not working without "mux.js"&lt;/strong&gt;&lt;br&gt;
 Dash is working fine but HSL not working without including mux.js.&lt;br&gt;
&lt;code&gt;&lt;br&gt;
import muxjs from 'mux.js';&lt;br&gt;
interface MyWindow extends Window {&lt;br&gt;
  muxjs: string;&lt;br&gt;
  player: any&lt;br&gt;
}&lt;br&gt;
(window as MyWindow &amp;amp; typeof globalThis).muxjs = muxjs;&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
I need to remove this link of code and want it to work perfectly. So please anyone help and contribute there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Typescript Support properly&lt;/strong&gt;&lt;br&gt;
This package not properly working typescript. Does anyone else work also there?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please contribute and improve this package for React Lover.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>react</category>
      <category>shakaplayer</category>
      <category>hls</category>
    </item>
  </channel>
</rss>
