<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LiveInstantly, LLC.</title><link>https://www.liveinstantly.com/resources/blog/</link><description>Recent content in Blog Archives on LiveInstantly</description><generator>Hugo Generator - gohugo.io</generator><language>en</language><copyright>Copyright &amp;copy; 2020-2022 LiveInstantly, LLC. All rights reserved.</copyright><atom:link href="https://www.liveinstantly.com/resources/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Resources: THEOplayer Player Demo Web App</title><link>https://www.liveinstantly.com/resources/blog/theo-player-demo-app/</link><pubDate>Thu, 10 Nov 2022 09:00:00 +0900</pubDate><guid>https://www.liveinstantly.com/resources/blog/theo-player-demo-app/</guid><description>&lt;img src="https://www.liveinstantly.com/resources/blog/theo-player-demo-app/featured-screenshot-theoplayer-demo-webapp_hu5ed571e1c25cc6c3b0592b8689a378b3_536779_640x0_resize_catmullrom_3.png" width="640" height="427"/>&lt;p>This blog article introduces our THEOplayer player demo web application as a practical application integrated with THEOplayer Web SDK for your video services.&lt;/p>
&lt;p>THEOplayer is the universal video player solution created by THEO Technologies. The THEOplayer offers player SDKs for multiple platforms (such as HTML5 (Web), Apple iOS, Apple tvOS, Google Android, Google Android TV, Samsumg Tizen, LG webOS, Amazon FireTV, ROKU) which support for HLS, MPEG-DASH, advertisements, DRM and much more.&lt;/p>
&lt;p>This demo web app is integrated with Nuxt 3, Vue 3, and Vuetify 3 frameworks to play multiple video stream examples with THEOplayer Web SDK. We publishes a Git repository for this player example at Github: &lt;a href="https://github.com/liveinstantly/theoplayer-web-nuxt3-demos" target="_blank">https://github.com/liveinstantly/theoplayer-web-nuxt3-demos&lt;/a>
. Please refer the details in the repository.&lt;/p>
&lt;p>&lt;img src="./featured-screenshot-theoplayer-demo-webapp.png" alt="Screenshot of THEOplayer Demo Web App">&lt;/p>
&lt;p>This demo web app is deployed onto Netlify. Please access the demo site: &lt;a href="https://theoplayer.demo.liveinstantly.cloud/" target="_blank">https://theoplayer.demo.liveinstantly.cloud/&lt;/a>
.&lt;/p>
&lt;p>As of now, we demonstrates THEOplayer Web SDK only with a couple of example video streams, but we will add more examples soon to demonstrate much more features and scenarios with THEOplayer Web SDK.&lt;/p></description></item><item><title>Resources: THEOplayer player app example with Nuxt v3</title><link>https://www.liveinstantly.com/resources/blog/theoplayer-web-nuxt3-example/</link><pubDate>Fri, 28 Oct 2022 09:00:00 +0900</pubDate><guid>https://www.liveinstantly.com/resources/blog/theoplayer-web-nuxt3-example/</guid><description>&lt;p>This blog article explains how to integrate THEOplayer Web SDK with Nuxt v3 JS framework (including Vue3 and Vite) for a simple player app example.&lt;/p>
&lt;p>THEOplayer is the universal video player solution created by THEO Technologies. The THEOplayer offers player SDKs for multiple platforms (such as HTML5 (Web), Apple iOS, Apple tvOS, Google Android, Google Android TV, Samsumg Tizen, LG webOS, Amazon FireTV, ROKU) which support for HLS, MPEG-DASH, advertisements, DRM and much more.&lt;/p>
&lt;p>Nuxt is an open-source framework under MIT license for building modern and performant web applications that can be deployed on any platform running JavaScript.&lt;/p>
&lt;p>Nuxt uses Vue.js as a view engine. All Vue 3 capabilities are available in Nuxt. For more details of Nuxt, please refer an &lt;a href="https://v3.nuxtjs.org/getting-started/introduction" target="_blank">introductory article about Nuxt 3&lt;/a>
.&lt;/p>
&lt;p>This player example is simply implemented with Nuxt3 and Composition API on a starter template which is provided by Nuxt3 CLI (nuxi) tools.&lt;/p>
&lt;p>We publishes a Git repository for this player example at Github: &lt;a href="https://github.com/liveinstantly/theoplayer-web-nuxt3-example" target="_blank">https://github.com/liveinstantly/theoplayer-web-nuxt3-example&lt;/a>
. Please refer the details in the repository.&lt;/p>
&lt;h2 id="step-by-step-to-integrate-theoplayer-web-sdk">Step-by-Step to integrate THEOplayer Web SDK&lt;/h2>
&lt;h3 id="prerequisites">Prerequisites&lt;/h3>
&lt;p>The following dev tools are used for this guide.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tools&lt;/th>
&lt;th style="text-align:right">Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>npm&lt;/td>
&lt;td style="text-align:right">8.19.2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>yarn&lt;/td>
&lt;td style="text-align:right">1.22.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>node&lt;/td>
&lt;td style="text-align:right">v16.18.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="1-create-a-nuxt3-app-template">1. Create a Nuxt3 app template&lt;/h3>
&lt;p>Run the following command to create a Vue3 application template:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">npx nuxi init theoplayer-web-nuxt3-example
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command output will be like as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">yarn install
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">yarn install v1.22.5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">info No lockfile found.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[1/4] Resolving packages...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[2/4] Fetching packages...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[4/4] Building fresh packages...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">success Saved lockfile.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">$ nuxt prepare
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Nuxi 3.0.0-rc.12
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">√ Types generated in src/.nuxt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Done in 5.76s.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-move-nuxt3-source-under-src-directory">2. Move Nuxt3 source under &lt;code>./src&lt;/code> directory&lt;/h3>
&lt;p>This is an optional step.&lt;/p>
&lt;p>Nuxt web application expects source files/directories will be flat under the root project directory, while Vue web application expects source files/directories inside &lt;code>./src&lt;/code> directory under the root project directory.&lt;/p>
&lt;p>If you want to move the source files/directories of your Nuxt3 web application, you can follow the steps below:&lt;/p>
&lt;h4 id="21-create-src-directory-and-move-appvue-to-src">2.1. Create &lt;code>src&lt;/code> directory and move &lt;code>app.vue&lt;/code> to &lt;code>./src&lt;/code>&lt;/h4>
&lt;p>Run the following command after createing a starter template of Nuxt3 app.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">mkdir src &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> mv app.vue ./src/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="22-change-tsconfigjson">2.2. Change &lt;code>tsconfig.json&lt;/code>&lt;/h4>
&lt;p>Modify &lt;code>./tsconfig.json&lt;/code> as below: change &lt;code>extend&lt;/code> property from &lt;code>./.nuxt/tsconfig.json&lt;/code> to &lt;code>./src/.nuxt/tsconfig.json&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// https://v3.nuxtjs.org/concepts/typescript
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="s2">&amp;#34;extends&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;./src/.nuxt/tsconfig.json&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-install-required-components">3. Install required components&lt;/h3>
&lt;p>Run the following command to install Vue framework package dependencies.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">yarn install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>You can ignore information messages about &lt;code>esbuild&lt;/code> module in yarn command output.&lt;/p>
&lt;/blockquote>
&lt;h3 id="4-add-theoplayer">4. Add THEOplayer&lt;/h3>
&lt;h4 id="41-add-module-declaration-theoplayerdts">4.1 Add module declaration (THEOplayer.d.ts)&lt;/h4>
&lt;p>Run the following command to install theoplayer NPM package, which includes type definition module for THEOplayer Web SDK.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">yarn add theoplayer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="42-add-playervue-for-theoplayer-web-sdk">4.2 Add &lt;code>Player.vue&lt;/code> for THEOplayer Web SDK&lt;/h4>
&lt;p>Add the following code to &lt;code>src/components&lt;/code> folder as &lt;code>Player.vue&lt;/code>.
This code is based on Vue3 Composition API and works with a given &lt;code>source&lt;/code> array variable from parent component.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">setup&lt;/span> &lt;span class="na">lang&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ts&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">ref&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">onMounted&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;vue&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">theoplayer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">ref&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">HTMLElement&lt;/span> &lt;span class="err">|&lt;/span> &lt;span class="na">null&lt;/span>&lt;span class="p">&amp;gt;(&lt;/span>&lt;span class="kc">null&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">props&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">defineProps&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="p">{&lt;/span> &lt;span class="nx">source&lt;/span>: &lt;span class="kt">Array&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">any&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="p">}&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span> &lt;span class="nx">playerInit() {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">value&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">player&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">THEOplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Player&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fluid&lt;/span>: &lt;span class="kt">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">libraryLocation&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;//cdn.theoplayer.com/dash/theoplayer/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">player&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">sources&lt;/span>: &lt;span class="kt">props.source&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">onMounted&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">playerInit&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;theoplayer-container video-js theoplayer-skin vjs-16-9 theoplayer&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">ref&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;theoplayer&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">style&lt;/span> &lt;span class="na">scoped&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">container&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">margin&lt;/span>: &lt;span class="kt">0&lt;/span> &lt;span class="nx">auto&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">padding&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">top&lt;/span>: &lt;span class="kt">28.13&lt;/span>&lt;span class="o">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">width&lt;/span>: &lt;span class="kt">50&lt;/span>&lt;span class="o">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">style&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="43-add-welcomevue-and-nuxtlogovue">4.3 Add &lt;code>Welcome.vue&lt;/code> and &lt;code>NuxtLogo.vue&lt;/code>&lt;/h4>
&lt;p>Add the following codes to &lt;code>src/components&lt;/code> folder as &lt;code>Welcome.vue&lt;/code> and &lt;code>NuxtLogo.vue&lt;/code>.&lt;/p>
&lt;p>&lt;code>Welcome.vue&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">setup&lt;/span> &lt;span class="na">lang&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ts&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">Player&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;./Player.vue&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">ref&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;vue&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">ref&lt;/span>&lt;span class="p">([&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;application/x-mpegurl&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">src&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;//cdn.theoplayer.com/video/elephants-dream/playlist.m3u8&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;container&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">NuxtLogo&lt;/span> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="nx">Welcome&lt;/span> &lt;span class="nx">to&lt;/span> &lt;span class="nx">Nuxt&lt;/span>&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">Player&lt;/span> &lt;span class="err">:&lt;/span>&lt;span class="na">source&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;source&amp;#34;&lt;/span> &lt;span class="na">v&lt;/span>&lt;span class="err">-&lt;/span>&lt;span class="na">if&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;source&amp;#34;&lt;/span> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">style&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">body&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">margin&lt;/span>: &lt;span class="kt">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">container&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">height&lt;/span>: &lt;span class="kt">100vh&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">width&lt;/span>: &lt;span class="kt">100vw&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">background&lt;/span>: &lt;span class="kt">rgb&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">42&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">display&lt;/span>: &lt;span class="kt">flex&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">flex&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">direction&lt;/span>: &lt;span class="kt">column&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">align&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">items&lt;/span>: &lt;span class="kt">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">justify&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">content&lt;/span>: &lt;span class="kt">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">h1&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">color&lt;/span>: &lt;span class="kt">white&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">text&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">align&lt;/span>: &lt;span class="kt">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">font&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">family&lt;/span>: &lt;span class="kt">helvetica&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">arial&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">sans&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">serif&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">font&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">weight&lt;/span>: &lt;span class="kt">400&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">style&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>NuxtLogo.vue&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">svg&lt;/span> &lt;span class="na">viewBox&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;0 0 221 65&amp;#34;&lt;/span> &lt;span class="na">fill&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;none&amp;#34;&lt;/span> &lt;span class="na">xmlns&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;http://www.w3.org/2000/svg&amp;#34;&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;h-8&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">g&lt;/span> &lt;span class="na">clip&lt;/span>&lt;span class="err">-&lt;/span>&lt;span class="na">path&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;url(#a)&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">path&lt;/span> &lt;span class="na">fill&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;currentColor&amp;#34;&lt;/span> &lt;span class="na">d&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;M82.5623 18.5705h7.3017l15.474 24.7415V18.5705h6.741v35.0576h-7.252L89.3025 28.938v24.6901h-6.7402V18.5705ZM142.207 53.628h-6.282v-3.916c-1.429 2.7559-4.339 4.3076-8.015 4.3076-5.822 0-9.603-4.1069-9.603-10.0175V28.3847h6.282v14.3251c0 3.4558 2.146 5.8592 5.362 5.8592 3.524 0 5.974-2.7044 5.974-6.4099V28.3847h6.282V53.628ZM164.064 53.2289l-6.026-8.4144-6.027 8.4144h-6.69l9.296-13.1723-8.58-12.0709h6.843l5.158 7.2641 5.106-7.2641h6.895l-8.632 12.0709 9.295 13.1723h-6.638ZM183.469 20.7726v7.6116h7.149v5.1593h-7.149v12.5311c0 .4208.17.8245.473 1.1223.303.2978.715.4654 1.144.4661h5.532v5.9547h-4.137c-5.617 0-9.293-3.2062-9.293-8.8109V33.5484h-5.056v-5.1642h3.172c1.479 0 2.34-.8639 2.34-2.2932v-5.3184h5.825Z&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">path&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">path&lt;/span> &lt;span class="na">fill&lt;/span>&lt;span class="err">-&lt;/span>&lt;span class="na">rule&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;evenodd&amp;#34;&lt;/span> &lt;span class="na">clip&lt;/span>&lt;span class="err">-&lt;/span>&lt;span class="na">rule&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;evenodd&amp;#34;&lt;/span> &lt;span class="na">d&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;M30.1185 11.5456c-1.8853-3.24168-6.5987-3.24169-8.484 0L1.08737 46.8747c-1.885324 3.2417.47133 7.2938 4.24199 7.2938H21.3695c-1.6112-1.4081-2.2079-3.8441-.9886-5.9341l15.5615-26.675-5.8239-10.0138Z&amp;#34;&lt;/span> &lt;span class="na">fill&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;#80EEC0&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">path&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">path&lt;/span> &lt;span class="na">d&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;M43.1374 19.2952c1.5603-2.6523 5.461-2.6523 7.0212 0l17.0045 28.9057c1.5603 2.6522-.39 5.9676-3.5106 5.9676h-34.009c-3.1206 0-5.0709-3.3154-3.5106-5.9676l17.0045-28.9057ZM209.174 53.8005H198.483c0-1.8514.067-3.4526 0-6.0213h10.641c1.868 0 3.353.1001 4.354-.934 1-1.0341 1.501-2.3351 1.501-3.9029 0-1.8347-.667-3.2191-2.002-4.1532-1.301-.9674-2.985-1.4511-5.054-1.4511h-2.601v-5.2539h2.652c1.701 0 3.119-.4003 4.253-1.2009 1.134-.8006 1.701-1.9849 1.701-3.5527 0-1.301-.434-2.3351-1.301-3.1023-.834-.8007-2.001-1.201-3.503-1.201-1.634 0-2.918.4837-3.853 1.4511-.9.9674-1.401 2.1517-1.501 3.5527h-6.254c.133-3.2358 1.251-5.7877 3.352-7.6558 2.135-1.868 4.887-2.8021 8.256-2.8021 2.402 0 4.42.4337 6.055 1.301 1.668.834 2.919 1.9515 3.753 3.3525.867 1.4011 1.301 2.9523 1.301 4.6536 0 1.9681-.551 3.636-1.651 5.0037-1.068 1.3344-2.402 2.235-4.004 2.7021 1.969.4003 3.57 1.3677 4.804 2.9022 1.234 1.5011 1.852 3.4025 1.852 5.7043 0 1.9347-.468 3.7028-1.402 5.304-.934 1.6012-2.301 2.8855-4.103 3.8529-1.768.9674-3.953 1.4511-6.555 1.4511Z&amp;#34;&lt;/span> &lt;span class="na">fill&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;#00DC82&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">path&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">g&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">defs&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">clipPath&lt;/span> &lt;span class="na">id&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;a&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">path&lt;/span> &lt;span class="na">fill&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;#fff&amp;#34;&lt;/span> &lt;span class="na">d&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;M0 0h221v65H0z&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">path&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">clipPath&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">defs&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">svg&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">style&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">svg&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">width&lt;/span>: &lt;span class="kt">50vw&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">style&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="44-add-theoplayer-type-declaration-in-globaldts">4.4 Add THEOplayer type declaration in &lt;code>global.d.ts&lt;/code>&lt;/h4>
&lt;p>Add the following script code as &lt;code>src/global.d.ts&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Import types for THEOplayer
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">import&lt;/span> &lt;span class="nx">theoplayer&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;theoplayer&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">declare&lt;/span> &lt;span class="kr">global&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">interface&lt;/span> &lt;span class="nx">Window&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">THEOplayer&lt;/span>: &lt;span class="kt">typeof&lt;/span> &lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="45-add-theoplayer-javascript-and-css-module-in-appvue">4.5 Add THEOplayer JavaScript, and CSS module in &lt;code>app.vue&lt;/code>&lt;/h4>
&lt;p>Add the following section to &lt;code>src/app.vue&lt;/code> to import THEOplayer CSS and JavaScript.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">setup&lt;/span> &lt;span class="na">lang&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ts&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">useHead&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">meta&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;viewport&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;width=device-width, initial-scale=1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">link&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">rel&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;stylesheet&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">href&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;https://cdn.theoplayer.com/dash/theoplayer/ui.css&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">script&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;text/javascript&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">src&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;https:/cdn.theoplayer.com/dash/theoplayer/THEOplayer.js&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">body&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="46-change-a-component-in-appvue">4.6 Change a component in &lt;code>app.vue&lt;/code>&lt;/h4>
&lt;p>Change &lt;code>NuxtWelcome&lt;/code> component to &lt;code>Welcome&lt;/code> component (which is created at section 4.3) in &lt;code>src/app.vue&lt;/code> in order to render THEOplayer in this example web app.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">Welcome&lt;/span> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="5-run-this-sample-application-code-and-open-with-your-browser">5. Run this sample application code and open with your browser&lt;/h3>
&lt;p>Run the following command to compile the codes and run a local server to host the sample application.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">yarn dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command output will be like as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Nuxi 3.0.0-rc.12
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Nuxt 3.0.0-rc.12 with Nitro 0.6.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;gt; Local: http://localhost:3000/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">i Vite client warmed up in 2321ms
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">√ Nitro built in 734 ms
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can browse the application with &lt;code>localhost&lt;/code> hostname and given port to see how it works.&lt;/p>
&lt;p>This application uses a public THEOplayer player code with builtin license, which allows you to enable playback functionality in THEOplayer without your explicit license, but it is allowed only in &lt;code>localhost&lt;/code> as its white-listed hostname. This means that you will see an error message (&amp;quot;&lt;em>The given license is invalid!&lt;/em>&amp;quot;) when you will run this application except on &lt;code>localhost&lt;/code>.&lt;/p>
&lt;p>The screenshot is as belows:&lt;/p>
&lt;p>&lt;img src="./screenshot-nuxt3-theoplayer-example.png" alt="Screenshot of THEOplayer Nuxt3 application example">&lt;/p>
&lt;h2 id="using-your-local-theoplayer-web-sdk">Using your local THEOplayer Web SDK&lt;/h2>
&lt;p>If you want to use your own THEOplayer Web SDK, you will need to put your (customized) Web SDK under &lt;code>src/public&lt;/code> folder of Nuxt3 source tree.&lt;/p>
&lt;p>Then, you will need to modify the following files to point the location of THEOplayer JS/CSS and library folder appropriately.&lt;/p>
&lt;ul>
&lt;li>&lt;code>src/app.vue&lt;/code>&lt;/li>
&lt;li>&lt;code>src/components/Player.vue&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>For example, if you will put the SDK files into &lt;code>src/public/js/theoplayer&lt;/code> folder, &lt;code>src/app.vue&lt;/code> and &lt;code>src/components/Player.vue&lt;/code> will be as below:&lt;/p>
&lt;p>&lt;code>src/app.vue&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">setup&lt;/span> &lt;span class="na">lang&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ts&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">useHead&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">meta&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;viewport&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;width=device-width, initial-scale=1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">link&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">rel&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;stylesheet&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">href&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;/js/theoplayer/ui.css&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">script&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;text/javascript&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">src&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;/js/theoplayer/THEOplayer.js&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">body&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>src/components/Player.vue&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">player&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">THEOplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Player&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fluid&lt;/span>: &lt;span class="kt">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">libraryLocation&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;/js/theoplayer/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">license&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;license string&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="closing">Closing&lt;/h2>
&lt;p>This article explained how to implement a simple player app example with THEOplayer and integrate THEOplayer Web SDK with Nuxt v3 JS framework.&lt;/p>
&lt;p>Please refer this example app&amp;rsquo;s Git repository at Github: &lt;a href="https://github.com/liveinstantly/theoplayer-web-nuxt3-example" target="_blank">https://github.com/liveinstantly/theoplayer-web-nuxt3-example&lt;/a>
and feel free to reach out ot us if you have any questions.&lt;/p></description></item><item><title>Resources: THEOplayer player app example with Vue.js 3</title><link>https://www.liveinstantly.com/resources/blog/theoplayer-vue3-example/</link><pubDate>Fri, 28 Oct 2022 09:00:00 +0900</pubDate><guid>https://www.liveinstantly.com/resources/blog/theoplayer-vue3-example/</guid><description>&lt;p>This blog article explains how to integrate THEOplayer Web SDK with Vue.js v3 JS framework for a simple player app example.&lt;/p>
&lt;p>THEOplayer is the universal video player solution created by THEO Technologies. The THEOplayer offers player SDKs for multiple platforms (such as HTML5 (Web), Apple iOS, Apple tvOS, Google Android, Google Android TV, Samsumg Tizen, LG webOS, Amazon FireTV, ROKU) which support for HLS, MPEG-DASH, advertisements, DRM and much more.&lt;/p>
&lt;p>Vue is a progressive JavaScript framework for building user interfaces. It builds on top of standard HTML, CSS and JavaScript, and provides a declarative and component-based programming model.&lt;/p>
&lt;p>Vue ecosystem covers most of the common features needed in frontend development. But the web is extremely diverse - the things we build on the web may vary drastically in form and scale. Vue is designed to be flexible and incrementally adoptable. Depending on your use case, Vue can be used in different ways:&lt;/p>
&lt;ul>
&lt;li>Enhancing static HTML without a build step&lt;/li>
&lt;li>Embedding as Web Components on any page&lt;/li>
&lt;li>Single-Page Application (SPA)&lt;/li>
&lt;li>Fullstack / Server-Side Rendering (SSR)&lt;/li>
&lt;li>Jamstack / Static Site Generation (SSG)&lt;/li>
&lt;li>Targeting desktop, mobile, WebGL, and even the terminal&lt;/li>
&lt;/ul>
&lt;p>This player example is simply implemented with Vue3/Vite and Composition API on a starter template which is provided by Vue CLI tools.&lt;/p>
&lt;p>We publishes a Git repository for this player example at Github: &lt;a href="https://github.com/liveinstantly/theoplayer-web-vue3-example" target="_blank">https://github.com/liveinstantly/theoplayer-web-vue3-example&lt;/a>
. Please refer the details in the repository.&lt;/p>
&lt;h2 id="step-by-step-to-integrate-theoplayer-web-sdk">Step-by-Step to integrate THEOplayer Web SDK&lt;/h2>
&lt;h3 id="prerequisites">Prerequisites&lt;/h3>
&lt;p>The following dev tools are used for this guide.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tools&lt;/th>
&lt;th style="text-align:right">Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>npm&lt;/td>
&lt;td style="text-align:right">8.19.2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>yarn&lt;/td>
&lt;td style="text-align:right">1.22.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>node&lt;/td>
&lt;td style="text-align:right">v16.18.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="1-create-a-vue3-app-template">1. Create a Vue3 app template&lt;/h3>
&lt;p>Run the following command to create a Vue3 application template:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">yarn create vite theoplayer-web-vue-example --template vue-ts
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command output will be like as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">yarn create v1.22.5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[1/4] Resolving packages...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[2/4] Fetching packages...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[3/4] Linking dependencies...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[4/4] Building fresh packages...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">success Installed &amp;#34;create-vite@3.1.0&amp;#34; with binaries:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - create-vite
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - cva
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Scaffolding project in C:\srcs\THEOplayer\theoplayer-web-vue-example...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Done. Now run:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> cd theoplayer-web-vue-example
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> yarn
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> yarn dev
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Done in 14.52s.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-install-required-components">2. Install required components&lt;/h3>
&lt;p>Run the following command to install Vue framework package dependencies.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">yarn install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>You can ignore information messages about &lt;code>esbuild&lt;/code> module in yarn command output.&lt;/p>
&lt;/blockquote>
&lt;h3 id="3-add-theoplayer">3. Add THEOplayer&lt;/h3>
&lt;h4 id="31-add-module-declaration-theoplayerdts">3.1 Add module declaration (THEOplayer.d.ts)&lt;/h4>
&lt;p>Run the following command to install theoplayer NPM package, which includes type definition module for THEOplayer Web SDK.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">yarn add theoplayer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="32-add-playervue-for-theoplayer-web-sdk">3.2 Add &lt;code>Player.vue&lt;/code> for THEOplayer Web SDK&lt;/h4>
&lt;p>Add the following code to &lt;code>src/components&lt;/code> folder as &lt;code>Player.vue&lt;/code>.
This code is based on Vue3 Composition API and works with a given &lt;code>source&lt;/code> array variable from parent component.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">setup&lt;/span> &lt;span class="na">lang&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ts&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">ref&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">onMounted&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;vue&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">theoplayer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">ref&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">HTMLElement&lt;/span> &lt;span class="err">|&lt;/span> &lt;span class="na">null&lt;/span>&lt;span class="p">&amp;gt;(&lt;/span>&lt;span class="kc">null&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">props&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">defineProps&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="p">{&lt;/span> &lt;span class="nx">source&lt;/span>: &lt;span class="kt">Array&lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">any&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="p">}&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span> &lt;span class="nx">playerInit() {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">value&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">player&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">THEOplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Player&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fluid&lt;/span>: &lt;span class="kt">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">libraryLocation&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;//cdn.theoplayer.com/dash/theoplayer/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">player&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">sources&lt;/span>: &lt;span class="kt">props.source&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">onMounted&lt;/span>&lt;span class="p">(()&lt;/span> &lt;span class="o">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">playerInit&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;theoplayer-container video-js theoplayer-skin vjs-16-9 theoplayer&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">ref&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;theoplayer&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">style&lt;/span> &lt;span class="na">scoped&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">container&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">margin&lt;/span>: &lt;span class="kt">0&lt;/span> &lt;span class="nx">auto&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">padding&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="nx">top&lt;/span>: &lt;span class="kt">56.24&lt;/span>&lt;span class="o">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">width&lt;/span>: &lt;span class="kt">100&lt;/span>&lt;span class="o">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">style&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="33-add-playervue-component-to-appvue">3.3 Add &lt;code>Player.vue&lt;/code> component to &lt;code>App.vue&lt;/code>&lt;/h4>
&lt;p>Add the following script code piece to &lt;code>&amp;lt;script setup&amp;gt;&lt;/code> section in &lt;code>src/App.vue&lt;/code> after a line for importing &lt;code>HelloWorld&lt;/code> component.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">Player&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;./components/Player.vue&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">ref&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;vue&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">ref&lt;/span>&lt;span class="p">([&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;application/x-mpegurl&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">src&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;//cdn.theoplayer.com/video/elephants-dream/playlist.m3u8&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Add the following line to &lt;code>&amp;lt;template&amp;gt;&lt;/code> section in &lt;code>src/App.vue&lt;/code> just after the first &lt;code>&amp;lt;div&amp;gt;&lt;/code> block.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">Player&lt;/span> &lt;span class="na">:source&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;source&amp;#34;&lt;/span> &lt;span class="na">v-if&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;source&amp;#34;&lt;/span> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="34-add-theoplayer-type-declaration-in-maints">3.4 Add THEOplayer type declaration in &lt;code>main.ts&lt;/code>&lt;/h4>
&lt;p>Add the following script code piece to &lt;code>src/main.ts&lt;/code> before a line of &lt;code>createApp&lt;/code> function call.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Import types for THEOplayer
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">import&lt;/span> &lt;span class="nx">theoplayer&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;theoplayer&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">declare&lt;/span> &lt;span class="kr">global&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">interface&lt;/span> &lt;span class="nx">Window&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">THEOplayer&lt;/span>: &lt;span class="kt">typeof&lt;/span> &lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="35-add-theoplayer-javascript-and-css-module-in-indexhtml">3.5 Add THEOplayer JavaScript and CSS module in &lt;code>index.html&lt;/code>&lt;/h4>
&lt;p>Add the following lines to &lt;code>&amp;lt;head&amp;gt;&lt;/code> section in &lt;code>index.html&lt;/code> (just before &lt;code>&amp;lt;/head&amp;gt;&lt;/code> line) to import THEOplayer CSS.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">link&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">rel&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;stylesheet&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text/css&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;//cdn.theoplayer.com/dash/theoplayer/ui.css&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Add the following lines to &lt;code>&amp;lt;body&amp;gt;&lt;/code> section in &lt;code>index.html&lt;/code> (just before &lt;code>&amp;lt;/body&amp;gt;&lt;/code> line) to load THEOplayer JavaScript codes.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text/javascript&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;//cdn.theoplayer.com/dash/theoplayer/THEOplayer.js&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-run-this-sample-application-code-and-open-with-your-browser">4. Run this sample application code and open with your browser&lt;/h3>
&lt;p>Run the following command to compile the codes and run a local server to host the sample application.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">yarn dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command output will be like as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">yarn run v1.22.5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">$ vite
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> VITE v3.2.0 ready in 750 ms
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ➜ Local: http://127.0.0.1:5174/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ➜ Network: use --host to expose
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can browse the application with &lt;code>localhost&lt;/code> hostname and given port to see how it works.&lt;/p>
&lt;p>This application uses a public THEOplayer player code with builtin license, which allows you to enable playback functionality in THEOplayer without your explicit license, but it is allowed only in &lt;code>localhost&lt;/code> as its white-listed hostname. This means that you will see an error message (&amp;quot;&lt;em>The given license is invalid!&lt;/em>&amp;quot;) when you will run this application except on &lt;code>localhost&lt;/code>.&lt;/p>
&lt;blockquote>
&lt;p>Please note that you cannot run the public THEOplayer player code even in &lt;code>127.0.0.1&lt;/code>, since it&amp;rsquo;s not match with &lt;code>localhost&lt;/code> as a string.&lt;/p>
&lt;/blockquote>
&lt;p>The screenshot is as belows:&lt;/p>
&lt;p>&lt;img src="./screenshot-vue3-theoplayer-example.png" alt="Screenshot of THEOplayer Vue3 application example">&lt;/p>
&lt;h2 id="using-your-local-theoplayer-web-sdk">Using your local THEOplayer Web SDK&lt;/h2>
&lt;p>If you want to use your own THEOplayer Web SDK, you will need to put your (customized) Web SDK under &lt;code>public&lt;/code> folder of Vue3 source tree.&lt;/p>
&lt;p>Then, you will need to modify the following files to point the location of THEOplayer JS/CSS and library folder appropriately.&lt;/p>
&lt;ul>
&lt;li>index.html&lt;/li>
&lt;li>src/components/Player.vue&lt;/li>
&lt;/ul>
&lt;p>For example, if you will put the SDK files into &lt;code>public/js/theoplayer&lt;/code> folder, index.html and &lt;code>src/components/Player.vue&lt;/code> will be as below. In addition, you need to set your own THEOplayer Web SDK license to the configurations for Player class, which can be obtained from THEOplayer&amp;rsquo;s portal.&lt;/p>
&lt;p>&lt;code>index.html&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">link&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">rel&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;stylesheet&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text/css&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;/js/theoplayer/ui.css&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>index.html&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text/javascript&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;/js/theoplayer/THEOplayer.js&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">body&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>src/components/Player.vue&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">player&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">THEOplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Player&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">theoplayer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">value&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fluid&lt;/span>: &lt;span class="kt">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">libraryLocation&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;/js/theoplayer/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">license&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;license string&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="closing">Closing&lt;/h2>
&lt;p>This article explained how to implement a simple player app example with THEOplayer and integrate THEOplayer Web SDK with Vue.js v3 JS framework.&lt;/p>
&lt;p>Please refer this example app&amp;rsquo;s Git repository at Github: &lt;a href="https://github.com/liveinstantly/theoplayer-web-vue3-example" target="_blank">https://github.com/liveinstantly/theoplayer-web-vue3-example&lt;/a>
and feel free to reach out ot us if you have any questions.&lt;/p></description></item><item><title>Resources: Introduction of Video Streaming Technologies</title><link>https://www.liveinstantly.com/resources/blog/video-streaming-introduction/</link><pubDate>Mon, 24 Oct 2022 09:00:00 +0900</pubDate><guid>https://www.liveinstantly.com/resources/blog/video-streaming-introduction/</guid><description>&lt;h2 id="history-of-video-streaming-technology">History of Video Streaming Technology&lt;/h2>
&lt;p>With the growth of the Internet, digital video technology has been used as a matter of course for various businesses in various scenarios, and it has created various histories.&lt;/p>
&lt;p>Since the 2000s, various video streaming technologies had been developed by various companies Those video streaming technologies were developed using its own protocol and its own server/client technologies, and it was sometimes difficult to apply to the businesses because it was necessary to be familiar with each of technologies. With these technologies, the quality of the playback video and audio could be controlled by both the client and the servers via their communication link, but some network environments such as over routers and network address translation (NAT) made the application with the technologies difficult.&lt;/p>
&lt;p>In the late 2000s, there were strategic activities to accelerate harmonization between HTTP technology and the video streaming, and various companies developed HTTP-based adaptive streaming video delivery technology. That HTTP-based adaptive streaming has deprecated the above existing video streaming technology and updated the video streaming world to HTTP.&lt;/p>
&lt;p>Normally, when playing a video file via simple HTTP download, both video downloading network bandwidth and video quality will be the critical factors to playback the video smoothly, even if the video can be played as it is being downloaded.&lt;/p>
&lt;blockquote>
&lt;p>In short, if the video quality (video data size per second) is larger than the downloading network bandwidth, the video playback cannot keep up and the video will stop in the middle.&lt;/p>
&lt;/blockquote>
&lt;p>A technology called adaptive streaming attempts to solve this problem.&lt;/p>
&lt;p>Adaptive streaming is based on splitting a video file into multiple segments and downloading and playing each of segmented video files. A single video segment is, for example, a 2 to 10 second length of video, and by preparing a sequence of these video segments for each of different qualities (bitrate) and resolutions, video player is able to choose appropriate quality and/or resolution of video segments to play and switch between qualities and/or resolutions adaptively, depending on the speed and state of the connection between the video web server and the video player.&lt;/p>
&lt;blockquote>
&lt;p>With this technology, the playback client can play back with switching the quality of the video during playback according to the bandwidth of network connection, and the video can be played without stopping and/or stalling.&lt;/p>
&lt;/blockquote>
&lt;figure class="">
&lt;img src="https://www.liveinstantly.com/resources/blog/video-streaming-introduction/video-tech-adaptive-streaming-ja_hu32021ac8a93725661b0b507469448210_596907_600x0_resize_q75_catmullrom.jpg" width="600" height="274" />
&lt;figcaption>
&lt;p>
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>In addition, since it is HTTP-based streaming, you can use CDNs (Content Delivery Networks) with HTTP caching to deliver video segment files to large audiences with massive scalability, while minimizing the load increases on your streaming servers.&lt;/p>
&lt;h2 id="adaptive-streaming">Adaptive Streaming&lt;/h2>
&lt;p>For adaptive streaming, three streaming technologies were developed at the time around 2009, each supporting both live and video-on-demand video delivery scenarios, each with its own dedicated client player.&lt;/p>
&lt;ul>
&lt;li>Adobe HTTP Dynamic Streaming (HDS)&lt;/li>
&lt;li>Apple HTTP Live Streaming (HLS)&lt;/li>
&lt;li>Microsoft Smooth Streaming&lt;/li>
&lt;/ul>
&lt;p>HTML did not define &amp;lt;video&amp;gt; or &amp;lt;audio&amp;gt; tag at the time. Media such as videos and audios, known as rich media, had to be played back in player implementations in browser plugins. For this reason, the service providers had to support all of these three streaming in order to deliver contents to large audiences as much as possible.&lt;/p>
&lt;p>With the spread of mobile devices and multi-devices, the standardization of video streaming technologies and client technologies have become an issue, and various companies have contributed to the development of common standard video streaming technology and client platform.&lt;/p>
&lt;p>In the standardization of video streaming technology, MPEG-DASH (Dynamic Adaptive Streaming over HTTP) was established as the first international standard in 2012 for the standardization of video streaming technology. Microsoft and Adobe contributed to the development of this MPEG-DASH technology based on their technology and experiences.&lt;/p>
&lt;p>In addition, in an organization called &lt;a href="https://dashif.org/" target="_blank">DASH Industry Forum&lt;/a>
established by Akamai, Ericsson, Microsoft, Netflix, Qualcomm, and Samsung as founding members, the organization is trying to popularize the standardized MPEG-DASH technology while solving actual compatibility problems and creating guidelines for recommendations in the market.&lt;/p>
&lt;p>Besides MPEG-DASH, Apple had submitted their HLS technology to the IETF (Internet Engineering Task Force) as an RFC draft in 2009 when it was first developed, and finally HLS was &lt;a href="https://mailarchive.ietf.org/arch/msg/ietf-announce/WYDfL1x3FOwz7T6YojPqSnluQWo/" target="_blank">announced as RFC8216 in 2017&lt;/a>
.&lt;/p>
&lt;p>For the client standardization, W3C introduced &amp;lt;video&amp;gt; / &amp;lt;audio&amp;gt; tag into HTML5, and a technology called Media Source Extension (MSE) was developed by Google/Microsoft/Netflix as a media extension for HTML5. As the results, MPEG-DASH format video playback can be achieved with a player implemented in JavaScript.&lt;/p>
&lt;h2 id="the-current-of-video-streaming">The current of Video Streaming&lt;/h2>
&lt;p>Currently, two technologies, MPEG-DASH and HLS, are used in many services and applications as the adaptive streaming technology.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.iso.org/standard/83314.html" target="_blank">ISO/IEC 23009-1&lt;/a>
- MEPG-DASH (Dynamic Adaptive Streaming over HTTP)&lt;/li>
&lt;li>&lt;a href="https://www.rfc-editor.org/rfc/rfc8216" target="_blank">IETF RFC 8216&lt;/a>
HTTP Live Streaming (HLS)&lt;/li>
&lt;/ul>
&lt;p>For playback of these streaming technologies, on PCs (Windows/macOS), JavaScript players using HTML5 Media Extensions APIs can be used on various browsers which support HTML5 Media Extensions, while on mobile devices, such as Android and iOS operating systems, a player developed with standard APIs or extended components on those operating systems and/or platforms, can be used for playback of adaptive streaming.&lt;/p>
&lt;p>For a JavaScript-based player in browser environments, the following open source players are widely used in the market.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/Dash-Industry-Forum/dash.js/" target="_blank">dash.js&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://github.com/videojs/" target="_blank">video.js&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://github.com/video-dev/hls.js/" target="_blank">hls.js&lt;/a>
&lt;/li>
&lt;/ul>
&lt;p>Players on Apple operating systems are often developed using a native platform called &lt;a href="https://developer.apple.com/documentation/avfoundation/avplayer" target="_blank">AVPlayer&lt;/a>
that supports HLS streaming.&lt;/p>
&lt;p>Players on Android operating systems often uses the &lt;a href="https://exoplayer.dev/" target="_blank">ExoPlayer&lt;/a>
open source player platform developed by Google, which supports both HLS and MPEG-DASH streaming.&lt;/p>
&lt;p>The THEOplayer commercial player SDKs that we handle are typically based on the a above basic functionalities and/or player functions in operating systems, and adds various additional advanced features to make your player easy for developing and valuable for more various scenario support.&lt;/p>
&lt;h2 id="video-streaming-platform">Video Streaming Platform&lt;/h2>
&lt;p>As mentioned above, there are still two formats of video streaming technology used in the market, and platforms that perform video streaming generally need to support both streaming formats. Therefore, some streaming platforms have the ability to dynamically generate and output two streaming formats in real time.&lt;/p>
&lt;p>This dynamic stream generation, commonly referred to as &amp;ldquo;just-in-time packaging&amp;rdquo;, is applicable to both live and on-demand streams, and as a result, you can build a streaming architecture with simpler workflow.&lt;/p>
&lt;figure class="">
&lt;img src="https://www.liveinstantly.com/resources/blog/video-streaming-introduction/video-tech-wowza-streaming_hufcc71dfbe047f1aca147821d67bd1a0e_44232_600x0_resize_q75_catmullrom.jpg" width="600" height="205" />
&lt;figcaption>
&lt;p>
&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>The product of Wowza Media Systems, which we handle, is one of the streaming platforms shown above. It supports various input formats, performs dynamic packaging of MPEG-DASH and HLS streams from the inputs for your video streaming over the Internet.&lt;/p>
&lt;h2 id="closing">Closing&lt;/h2>
&lt;p>In this article, we briefly introduced the history of streaming technology and the technologies around it.&lt;/p>
&lt;p>Digital video and audio, and streaming technologies are evolving year by year, and it is important to catch up with those latest technologies and products/solutions that support them, when building your streaming systems and services. We are working with global media companies to support our customer projects and services, while keeping up to date with those latest technologies.&lt;/p></description></item></channel><template>posts/list.rss.xml</template></rss>