<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>OvenMedia Labs Blog</title>
        <link>https://ovenmedialabs.com/blog</link>
        <description>Sub-second latency live streaming insights from OvenMedia Labs.</description>
        <lastBuildDate>Fri, 15 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Managing Hundreds of RTSP Cameras with a Single Server, Using On-Demand Live WebRTC]]></title>
            <link>https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc</link>
            <guid>https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A new architecture for CCTV monitoring powered by OvenMediaEngine — pull RTSP only when someone watches, scale horizontally without state.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/hero-0974ec0e506fb0b55214f729565383c5.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><div class="text_V24h"><span class="name_APya">Jeheon Han</span><div class="titleGroup_p6kk"><div class="title_idtL">CEO of OvenMedia Labs</div><div class="title_idtL">Lead developer of OvenMediaEngine</div></div><div class="email_T_lk">getroot@ovenmedialabs.com</div></div></div></aside><p>RTSP has been the de facto protocol for IP cameras for over two decades. Almost every CCTV, IP camera, and network video device on the market speaks RTSP natively. It works well on dedicated NVR appliances and desktop clients. But the moment you try to bring those streams into a modern web or mobile dashboard, the cracks start to show.</p>
<!-- -->
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-hidden-cost-of-always-on-streaming">The Hidden Cost of Always-On Streaming<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#the-hidden-cost-of-always-on-streaming" class="hash-link" aria-label="Direct link to The Hidden Cost of Always-On Streaming" title="Direct link to The Hidden Cost of Always-On Streaming" translate="no">​</a></h2>
<p>Browsers do not speak RTSP. Neither do mobile devices. To make an RTSP feed playable on a web page, you need to convert it. The most efficient way to do that, with sub-second latency and no plugins, is <strong>WebRTC</strong>.</p>
<p>So far, so straightforward. The real problem starts when you scale.</p>
<p>A typical surveillance deployment has hundreds, sometimes thousands of cameras. A traditional VMS or media gateway pulls every single RTSP stream the moment the server boots, decodes them, and keeps them flowing, whether anyone is watching or not. Multiply that by a few hundred cameras, and you are looking at racks of servers just to keep streams <em>available</em>, not even being viewed.</p>
<p>But here is the truth about surveillance: <strong>operators rarely watch every camera at once.</strong> They watch a wall of four, sixteen, maybe thirty-two tiles. The rest of the cameras are sitting idle, consuming CPU, RAM, and bandwidth for no one.</p>
<p>That waste is what On-Demand Live streaming eliminates.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-on-demand-live-works">How On-Demand Live Works<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#how-on-demand-live-works" class="hash-link" aria-label="Direct link to How On-Demand Live Works" title="Direct link to How On-Demand Live Works" translate="no">​</a></h2>
<p>OvenMediaEngine (OME) works differently. Instead of pulling every RTSP stream continuously, <strong>OME pulls a camera only when someone asks to watch it.</strong></p>
<ul>
<li class="">When a viewer requests a WebRTC stream for a specific camera, OME pulls the RTSP feed from that camera.</li>
<li class="">While viewers are connected, OME re-encodes and forwards the stream over WebRTC with sub-second latency.</li>
<li class="">When the last viewer disconnects, OME stops pulling. The RTSP connection is closed. The resources are released.</li>
<li class="">If a second viewer joins while the stream is already running, OME serves them from the existing stream. No duplicate pull, no extra CPU.</li>
</ul>
<p>The result: idle cameras cost nothing. You can register hundreds of cameras on a single OME Origin server, and the actual load on the server is determined by <strong>how many cameras are being watched right now</strong>, not how many exist in your catalog.</p>
<p>For a real surveillance workload, where operators watch a small subset at any given time, this changes the infrastructure economics entirely.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="three-ways-to-configure-on-demand-live-rtsp">Three Ways to Configure On-Demand Live RTSP<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#three-ways-to-configure-on-demand-live-rtsp" class="hash-link" aria-label="Direct link to Three Ways to Configure On-Demand Live RTSP" title="Direct link to Three Ways to Configure On-Demand Live RTSP" translate="no">​</a></h2>
<p>OME provides three ways to define the mapping between a WebRTC stream URL and the underlying RTSP camera. Pick the one that fits how your camera inventory is managed.</p>
<div class="wrapper_EQN9"><table><thead><tr><th>Method</th><th>When to use</th></tr></thead><tbody><tr><td><strong>OriginMap</strong> (Server.xml)</td><td>Small, static deployments where cameras rarely change</td></tr><tr><td><strong>OriginMapStore</strong> (Redis)</td><td>Dynamic deployments where cameras are added or modified frequently</td></tr><tr><td><strong>REST API</strong></td><td>Integration with an existing camera management system or VMS</td></tr></tbody></table></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-originmap-static-configuration-in-serverxml">1. OriginMap: static configuration in Server.xml<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#1-originmap-static-configuration-in-serverxml" class="hash-link" aria-label="Direct link to 1. OriginMap: static configuration in Server.xml" title="Direct link to 1. OriginMap: static configuration in Server.xml" translate="no">​</a></h3>
<p>The simplest option. Define each camera as an <code>&lt;Origin&gt;</code> entry inside your VirtualHost:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockTitle_OeMC">Server.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">VirtualHosts</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">VirtualHost</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Origins</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Properties</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">NoInputFailoverTimeout</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">3000</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">NoInputFailoverTimeout</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">UnusedStreamDeletionTimeout</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">60000</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">UnusedStreamDeletionTimeout</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Properties</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Origin</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Location</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">/app/rtsp_camera1</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Location</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Pass</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">          </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Scheme</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">rtsp</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Scheme</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">          </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Urls</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Url</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">cctv1.com:9000/camera</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Url</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Urls</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">          </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">ForwardQueryParams</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">true</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">ForwardQueryParams</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Pass</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Origin</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Origin</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Location</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">/app/rtsp_camera2</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Location</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Pass</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">          </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Scheme</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">rtsp</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Scheme</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">          </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Urls</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Url</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">cctv2.com:9000/camera</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Url</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Urls</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">          </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">ForwardQueryParams</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">true</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">ForwardQueryParams</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">        </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Pass</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Origin</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Origins</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">VirtualHost</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">VirtualHosts</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><br></div></code></pre></div></div>
<p>Two properties worth noting:</p>
<ul>
<li class=""><code>NoInputFailoverTimeout</code> — how long OME waits for input before declaring the source unavailable.</li>
<li class=""><code>UnusedStreamDeletionTimeout</code> — how long OME keeps an idle stream alive after the last viewer disconnects. <strong>This is what makes On-Demand Live work.</strong> Once the timeout passes with no viewers, the stream is torn down and resources are released.</li>
</ul>
<p>When a client connects to <code>wss://ome.server.com:3334/app/rtsp_camera1</code>, OME pulls from the configured RTSP URL on demand and streams it back over WebRTC.</p>
<p>Full configuration options are available in the <a class="" href="https://ovenmedialabs.com/docs/ome/origin-edge-clustering">Clustering documentation</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-originmapstore-dynamic-mapping-with-redis">2. OriginMapStore: dynamic mapping with Redis<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#2-originmapstore-dynamic-mapping-with-redis" class="hash-link" aria-label="Direct link to 2. OriginMapStore: dynamic mapping with Redis" title="Direct link to 2. OriginMapStore: dynamic mapping with Redis" translate="no">​</a></h3>
<p>If your camera list changes often, hardcoding URLs in Server.xml is not practical. OriginMapStore lets you keep the mappings in a Redis server, where OME looks them up at request time.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockTitle_OeMC">Server.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">VirtualHost</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">OriginMapStore</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">RedisServer</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Host</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain">192.168.0.160:6379</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Host</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">      </span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">Auth</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token tag punctuation" style="color:#6e7681">&lt;</span><span class="token tag" style="color:#7dd3fc">your-redis-password</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">Auth</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">RedisServer</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">OriginMapStore</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  ...</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token tag punctuation" style="color:#6e7681">&lt;/</span><span class="token tag" style="color:#7dd3fc">VirtualHost</span><span class="token tag punctuation" style="color:#6e7681">&gt;</span><br></div></code></pre></div></div>
<p>Register cameras as Redis keys, where the key is the stream path and the value is the RTSP URL:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token number" style="color:#c5a38e">127.0</span><span class="token plain">.0.1:637</span><span class="token operator file-descriptor important" style="color:#38bdf8">9</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> </span><span class="token builtin class-name" style="color:#7dd3fc">set</span><span class="token plain"> app/rtsp_camera1 rtsp://cctv1.com:9000/camera</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">OK</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token number" style="color:#c5a38e">127.0</span><span class="token plain">.0.1:637</span><span class="token operator file-descriptor important" style="color:#38bdf8">9</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> get app/rtsp_camera1</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token string" style="color:#9ba4b4">"rtsp://cctv1.com:9000/camera"</span><br></div></code></pre></div></div>
<p>Adding, updating, or removing a camera is now a one-line Redis operation. No OME restart required.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-rest-api-integration-with-external-systems">3. REST API: integration with external systems<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#3-rest-api-integration-with-external-systems" class="hash-link" aria-label="Direct link to 3. REST API: integration with external systems" title="Direct link to 3. REST API: integration with external systems" translate="no">​</a></h3>
<p>If you already have a camera management platform, VMS, or asset inventory, the REST API is the cleanest path. Create streams programmatically:</p>
<div class="language-http codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-http codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain">POST https://ome-server.com/v1/vhosts/default/apps/app/streams</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">{</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  "name": "rtsp_camera1",</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  "urls": ["rtsp://192.168.0.160:553/app/stream"],</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  "properties": {</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    "persistent": false,</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    "noInputFailoverTimeoutMs": 3000,</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    "unusedStreamDeletionTimeoutMs": 60000,</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    "ignoreRtcpSRTimestamp": false</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  }</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>The <code>"persistent": false</code> setting is the key. It tells OME to release resources when no one is watching, exactly the On-Demand Live behavior we want. Set it to <code>true</code> only if you genuinely need the stream to be always-on (for recording or relay purposes).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="beyond-a-single-server">Beyond a Single Server<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#beyond-a-single-server" class="hash-link" aria-label="Direct link to Beyond a Single Server" title="Direct link to Beyond a Single Server" translate="no">​</a></h2>
<p>A single OME Origin can handle a very large camera catalog, because idle cameras cost nothing. But <strong>concurrent viewers</strong> are a different story. WebRTC sessions are real connections with real CPU and bandwidth cost.</p>
<p>When the number of operators viewing streams grows beyond what one server can handle, OME scales horizontally without architectural change. Place multiple OME servers behind an L4 load balancer or DNS round-robin, and each incoming WebRTC request lands on one of them. Whichever server receives the request will pull the RTSP feed and serve the client. The same OriginMap, OriginMapStore, or REST API configuration works across all of them.</p>
<p>Servers are stateless, and cameras are pulled only when needed. No central state to coordinate, no message bus to operate.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-else-you-get-for-free">What Else You Get for Free<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#what-else-you-get-for-free" class="hash-link" aria-label="Direct link to What Else You Get for Free" title="Direct link to What Else You Get for Free" translate="no">​</a></h2>
<p>Because OME ingests RTSP through its full media pipeline, every other OME feature works on these streams out of the box:</p>
<ul>
<li class=""><strong>ABR (Adaptive Bitrate)</strong> — transcode each camera into multiple resolutions, so a tablet on cellular and a 4K control room display get the appropriate quality without changing the camera.</li>
<li class=""><strong>Codec conversion</strong> — cameras often output H.264 profiles or audio settings that are not WebRTC-friendly. OME normalizes them automatically.</li>
<li class=""><strong>Video-only or audio-only profiles</strong> — strip audio for bandwidth-sensitive deployments, or vice versa.</li>
<li class=""><strong>Access control &amp; authorization</strong> — <a class="" href="https://ovenmedialabs.com/docs/ome/access-control/signedpolicy">SignedPolicy</a> and <a class="" href="https://ovenmedialabs.com/docs/ome/access-control/admission-webhooks">AdmissionWebhooks</a> let you decide which operator can view which camera, on a per-request basis.</li>
</ul>
<p>None of this requires extra components. It is the same pipeline.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="closing-the-loop">Closing the Loop<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#closing-the-loop" class="hash-link" aria-label="Direct link to Closing the Loop" title="Direct link to Closing the Loop" translate="no">​</a></h2>
<p>Surveillance has always been about scale: more cameras, more sites, more operators. The traditional answer was to throw more servers at the problem. On-Demand Live streaming flips the equation. You stop paying for what you are not watching, and the size of your camera inventory stops driving the size of your infrastructure.</p>
<p>OvenMediaEngine makes this practical with a few lines of configuration and the same WebRTC pipeline that already serves sub-second latency to browsers and mobile devices worldwide.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-mission-critical-surveillance">For Mission-Critical Surveillance<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#for-mission-critical-surveillance" class="hash-link" aria-label="Direct link to For Mission-Critical Surveillance" title="Direct link to For Mission-Critical Surveillance" translate="no">​</a></h2>
<p>Surveillance is an environment where streams cannot drop. Running hundreds of cameras unattended requires GUI-based management, and anomalies must reach operators instantly. SI projects and solution deployments also need to clear the licensing question.</p>
<p><strong>OvenMediaEngine Enterprise</strong> is built for these operational requirements.</p>
<ul>
<li class=""><strong>Web Console</strong> — a GUI dashboard to monitor and manage hundreds of cameras and streams at a glance. Operators no longer need to edit configuration files or hit APIs for routine tasks.</li>
<li class=""><strong>Enhanced Alert</strong> — stream and system anomalies are detected with configurable rules and sent to external monitoring systems via HTTP callbacks in real time.</li>
<li class=""><strong>Commercial License</strong> — no AGPLv3 source disclosure obligation. Free to use in SI projects, solution deliverables, and proprietary services.</li>
<li class=""><strong>Pre-Built Package</strong> — verified LTS builds available as DEB, RPM, and Docker images for fast deployment. Suitable for air-gapped and on-premise environments.</li>
<li class=""><strong>Direct-to-Engineer Support</strong> — technical support directly from OvenMediaEngine's core engineers.</li>
</ul>
<p>If you are evaluating Enterprise for your deployment, reach out at <a href="mailto:contact@ovenmedialabs.com" target="_blank" rel="noopener noreferrer" class="">contact@ovenmedialabs.com</a> or learn more on the <a class="" href="https://ovenmedialabs.com/ome-enterprise">OvenMediaEngine Enterprise page</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="want-to-test-first">Want to test first?<a href="https://ovenmedialabs.com/blog/on-demand-rtsp-cameras-with-webrtc#want-to-test-first" class="hash-link" aria-label="Direct link to Want to test first?" title="Direct link to Want to test first?" translate="no">​</a></h3>
<p>You can launch OvenMediaEngine Enterprise from <a href="https://aws.amazon.com/marketplace/pp/prodview-okn5l63yxarwm" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a> starting at $0.19 per hour, suitable for validation before full deployment.</p>
<p>Detailed configuration and operations guides are available in the <a class="" href="https://ovenmedialabs.com/docs/ome-enterprise">OME Enterprise documentation</a> and the <a class="" href="https://ovenmedialabs.com/docs/ome">OME open-source documentation</a>.</p>]]></content:encoded>
            <author>getroot@ovenmedialabs.com (Jeheon Han)</author>
            <category>WebRTC</category>
            <category>Sub-Second Latency</category>
            <category>Case Study</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[Welcome to the OvenMedia Labs Blog]]></title>
            <link>https://ovenmedialabs.com/blog/welcome-to-our-new-blog</link>
            <guid>https://ovenmedialabs.com/blog/welcome-to-our-new-blog</guid>
            <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We're consolidating our content on ovenmedialabs.com. Here's what to expect.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/hero-607cc2f4474afb534da6a5d68c85c288.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>The OvenMedia Labs blog is now hosted directly on our own domain. Going forward,
deep dives into sub-second latency live streaming, OvenMediaEngine release notes,
and field-tested guidance will all land here first.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-changes">What changes<a href="https://ovenmedialabs.com/blog/welcome-to-our-new-blog#what-changes" class="hash-link" aria-label="Direct link to What changes" title="Direct link to What changes" translate="no">​</a></h2>
<ul>
<li class="">The blog moves from Medium to <code>ovenmedialabs.com/blog</code>.</li>
<li class="">Existing Medium posts will be migrated with their original publish dates preserved.</li>
<li class="">Old Medium URLs will redirect to their new home so links you've shared still work.</li>
<li class="">RSS feed updates to <code>ovenmedialabs.com/blog/rss.xml</code>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-stays-the-same">What stays the same<a href="https://ovenmedialabs.com/blog/welcome-to-our-new-blog#what-stays-the-same" class="hash-link" aria-label="Direct link to What stays the same" title="Direct link to What stays the same" translate="no">​</a></h2>
<ul>
<li class="">The same engineers writing about the same problems they're solving in production.</li>
<li class="">Open-source first.</li>
<li class="">No marketing-flavored fluff — practical insights about live streaming infrastructure.</li>
</ul>
<p>If you're building real-time media services, subscribe to the new feed and follow us
on <a href="https://github.com/OvenMediaLabs" target="_blank" rel="noopener noreferrer" class="">GitHub</a> for everything else.</p>]]></content:encoded>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[Low-Latency HLS: The Era of Flexible Low-Latency Streaming]]></title>
            <link>https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming</link>
            <guid>https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming</guid>
            <pubDate>Mon, 13 Jan 2025 12:40:19 GMT</pubDate>
            <description><![CDATA[Low-Latency HLS is an extension of the HLS protocol that enables low-latency video streaming while maintaining scalability and stability.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-o55HKF96EEBHGig1_ghgVQ-5ab7e0173319a2777b8b6364333a784e.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>Through this three-part series, we will explore ultra-low latency streaming with WebRTC in Part 1, various tests with HLS in Part 2, and finally, Low-Latency HLS in the last part.</p>
<!-- -->
<ul>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication">[Part1] WebRTC: A New Paradigm for Real-Time Web Communication</a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls">[Part2] HLS: IS it Possible to Achieve Low-Latency Streaming with HLS?</a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming"><strong>[Part3] Low-Latency HLS: The Era of Flexible Low-Latency Streaming</strong></a></li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-o55HKF96EEBHGig1_ghgVQ-5ab7e0173319a2777b8b6364333a784e.png" width="1489" height="1009" class="img_ev3q"></p>
<p>In a previous post, we explored various ways to achieve low-latency streaming in HTTP Live Streaming (HLS) while maintaining stability and quality, such as adjusting the Segment Duration, examining the impact of Keyframe Interval on quality, and more. While we were able to reach impressive low-latency levels numerically, we concluded that commercializing this approach presents significant challenges. Today, we will dive into Low-Latency HLS <em>(often abbreviated as LL-HLS, though we will refer to it as Low-Latency HLS)</em> and examine how it achieves low-latency streaming while maintaining stability and scalability.</p>
<p>Additionally, using OvenMediaEngine, we focused on the stability, balance, and latency of Low-Latency HLS, achieving a latency of approximately 1 to 4 seconds. In this post, we share the testing process and results.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-low-latency-hls">What is Low-Latency HLS?<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#what-is-low-latency-hls" class="hash-link" aria-label="Direct link to What is Low-Latency HLS?" title="Direct link to What is Low-Latency HLS?" translate="no">​</a></h2>
<p>Low-Latency HLS is an extension of the HLS protocol that enables low-latency video streaming while maintaining scalability and stability.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="backward-compatibility-ofhls">Backward Compatibility of&nbsp;HLS<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#backward-compatibility-ofhls" class="hash-link" aria-label="Direct link to Backward Compatibility of&nbsp;HLS" title="Direct link to Backward Compatibility of&nbsp;HLS" translate="no">​</a></h3>
<p>Since Low-Latency extensions are additions rather than replacements, servers should be prepared to support regular-latency playback of HLS to allow clients to fall back to standard playback if they determine that low-latency requirements are not met.</p>
<p>Therefore, it provides backward compatibility, and the usage notes of each version are as follows —</p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/about-the-ext-x-version-tag" target="_blank" rel="noopener noreferrer" class="">About the EXT-X-VERSION tag | Apple Developer Documentation</a></p>
<ul>
<li class="">You must use an #EXT-X-VERSION:3 or higher if you have floating point #EXTINF duration values.</li>
<li class="">You must use an #EXT-X-VERSION:6 or higher if you have #EXT-X-MAP in a Media Playlist that does not contain #EXT-X-I-FRAMES-ONLY.</li>
<li class="">You must use an #EXT-X-VERSION:9 or higher if you have #EXT-X-SKIP.</li>
<li class="">You must use an #EXT-X-VERSION:10 or higher if you have #EXT-X-SERVER-CONTROL, #EXT-X-PART-INF, #EXT-X-PRELOAD-HINT, #EXT-X-RENDITION-REPORT, and more for Low-Latency.</li>
</ul>
<p>Although it is officially stated that HLS supports low-latency streaming starting from version 10, Low-Latency HLS has been researched and extended over a long period, so there may be versions other than version 10 that support low-latency streaming depending on the method used.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-does-low-latency-hls-reducelatency">How Does Low-Latency HLS Reduce&nbsp;Latency?<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#how-does-low-latency-hls-reducelatency" class="hash-link" aria-label="Direct link to How Does Low-Latency HLS Reduce&nbsp;Latency?" title="Direct link to How Does Low-Latency HLS Reduce&nbsp;Latency?" translate="no">​</a></h2>
<p>To achieve low-latency stream playback, backend production tools and content delivery systems must adopt updated protocols and implement additional rules. This article explores the core concepts and mechanisms that enable Low-Latency HLS to achieve reduced latency:</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="partial-segments">Partial Segments<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#partial-segments" class="hash-link" aria-label="Direct link to Partial Segments" title="Direct link to Partial Segments" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-CxagLnOl2NBbrE6c94AJgA-c0a66a5289c9ccdf0d170f4b682511fa.png" width="1489" height="529" class="img_ev3q"></p>
<p>Low-Latency HLS provides a parallel channel for distributing media at the live edge of the Media Playlist, which divides the media into a larger number of smaller files, such as CMAF Chunks. These smaller files are called HLS Partial Segments. Because each Partial Segment has a short duration, it can be packaged, published, and added to the Media Playlist much earlier than its Parent Segment —</p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/enabling-low-latency-http-live-streaming-hls#Generate-Partial-Media-Segments" target="_blank" rel="noopener noreferrer" class="">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p>
<p><strong>How It Works</strong>:</p>
<ul>
<li class="">Partial Segments are created and sent to the Media Playlist shortly after being generated. This means they can reach the viewer much faster than waiting for a full segment to complete.</li>
<li class="">Moreover, they break away from the traditional rule that HLS segments must always start with a keyframe. If a Partial Segment is marked with the INDEPENDENT=YES tag, playback can begin from that point.</li>
<li class="">To reduce the bloat of the Playlist, the server removes Partial Segments from the Media Playlist once they’re greater (older) than three target durations from the live edge.</li>
</ul>
<p><strong>Container</strong>: The MPEG-4 Fragment is specified in the ISO Base Media File Format (ISOBMFF), and RFC8216bis provides a detailed definition of Fragmented MP4 (fMP4) as one of the Supported Media Segment Formats. The Common Media Application Format (CMAF) header meets all these requirements. Additionally, according to the RFC8216bis specification, not only CMAF but also MPEG-2 TS can be used for Partial Segments —</p>
<p><a href="https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-16#section-3.1" target="_blank" rel="noopener noreferrer" class="">HTTP Live Streaming 2nd Edition</a></p>
<p><strong>Tags and Attributes</strong>:</p>
<ul>
<li class=""><strong>#EXT-X-PART-INF</strong>: The EXT-X-PART-INF tag provides information about the Partial Segments in the Playlist.</li>
<li class=""><strong>PART-TARGET</strong>: PART-TARGET indicates the Part Target Duration.</li>
<li class=""><strong>#EXT-X-PART</strong>: The EXT-X-PART tag identifies a Partial Segment.</li>
<li class=""><strong>URI</strong>: The value is a quoted-string containing the URI for the Partial Segment.</li>
<li class=""><strong>DURATION</strong>: The value is the duration of the Partial Segment.</li>
<li class=""><strong>INDEPENDENT</strong>: The value is YES if the Partial Segment contains an independent frame.</li>
<li class=""><strong>#EXT-X-SERVER-CONTROL</strong>: The EXT-X-SERVER-CONTROL tag allows the Server to indicate support for Delivery Directives.</li>
<li class=""><strong>PART-HOLD-BACK</strong>: The value indicates the server-recommended minimum distance from the end of the Playlist at which clients should begin to play or to which they should seek when playing in Low-Latency Mode. Its value must be at least twice the Part Target Duration. Its value should be at least three times the Part Target Duration. If different Renditions have different Part Target Durations then PART-HOLD-BACK should be at least three times the maximum Part Target Duration.</li>
</ul>
<p><strong>For example:</strong></p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXTM3U</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">VERSION</span><span class="token operator" style="color:#6e7681">:</span><span class="token number" style="color:#c5a38e">10</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">TARGETDURATION</span><span class="token operator" style="color:#6e7681">:</span><span class="token number" style="color:#c5a38e">6</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">SERVER</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">CONTROL</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">CAN</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">BLOCK</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">RELOAD</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">HOLD</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">BACK</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">1.500000</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">INF</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">TARGET</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500000</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token spread operator" style="color:#6e7681">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_0_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">INDEPENDENT</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_1_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">INDEPENDENT</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_2_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_3_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">INDEPENDENT</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_4_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token spread operator" style="color:#6e7681">...</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="playlist-deltaupdates">Playlist Delta&nbsp;Updates<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#playlist-deltaupdates" class="hash-link" aria-label="Direct link to Playlist Delta&nbsp;Updates" title="Direct link to Playlist Delta&nbsp;Updates" translate="no">​</a></h2>
<p>Clients transfer playlists more frequently with Low-Latency HLS. They can request and servers can provide Playlist Delta Updates, which reduce this transfer cost. These updates replace a considerable portion of the Playlist that the client already has with the new #EXT-X-SKIP tag —</p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/enabling-low-latency-http-live-streaming-hls#Provide-Playlist-Delta-Updates" target="_blank" rel="noopener noreferrer" class="">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="blocking-playlistreloads">Blocking Playlist&nbsp;Reloads<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#blocking-playlistreloads" class="hash-link" aria-label="Direct link to Blocking Playlist&nbsp;Reloads" title="Direct link to Blocking Playlist&nbsp;Reloads" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-W8m3zTFcNcGvbdAXhS_qRg-91ba4cc0de773096636791e9f6990ce5.png" width="1489" height="1329" class="img_ev3q"></p>
<p>The Low-Latency HLS Player initially requests the latest Playlist from the Server and subsequently uses special query parameters called Delivery Directives to request specific Playlists containing future Segments. The server then holds onto the request (blocks) until a version of the Playlist containing that segment is available. Because the Server responds immediately after the Playlist is updated, the data is buffered more quickly on the Player side. This mechanism, known as Blocking Playlist Reloads, eliminates the need for Playlist polling and enables efficient client notification of new Media Segments and Partial Segments —</p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/enabling-low-latency-http-live-streaming-hls#Blocking-Playlist-reloads" target="_blank" rel="noopener noreferrer" class="">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p>
<p><strong>Tags and Attributes</strong>:</p>
<ul>
<li class=""><strong>#EXT-X-SERVER-CONTROL</strong>: The EXT-X-SERVER-CONTROL tag allows the Server to indicate support for Delivery Directives.</li>
<li class=""><strong>CAN-BLOCK-RELOAD</strong>: The value is YES if the server supports Blocking Playlist Reload.</li>
</ul>
<p><strong>For example</strong>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXTM3U</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">VERSION</span><span class="token operator" style="color:#6e7681">:</span><span class="token number" style="color:#c5a38e">10</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">TARGETDURATION</span><span class="token operator" style="color:#6e7681">:</span><span class="token number" style="color:#c5a38e">6</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">SERVER</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">CONTROL</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">CAN</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">BLOCK</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">RELOAD</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">HOLD</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">BACK</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">1.5</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">INF</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">TARGET</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500000</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">MEDIA</span><span class="token operator" style="color:#6e7681">-</span><span class="token maybe-class-name">SEQUENCEa</span><span class="token operator" style="color:#6e7681">:</span><span class="token number" style="color:#c5a38e">24</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">…</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="preload-hints-and-blocking-of-media-downloads">Preload Hints and Blocking of Media Downloads<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#preload-hints-and-blocking-of-media-downloads" class="hash-link" aria-label="Direct link to Preload Hints and Blocking of Media Downloads" title="Direct link to Preload Hints and Blocking of Media Downloads" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-2Va_MUTaRIegPRrcc-4LIA-006fc13d670487bb0ba8ec634e83f8c1.png" width="1489" height="1329" class="img_ev3q"></p>
<p>The Low-Latency HLS Player receives the next Playlist from the Server and uses the #EXT-X-PRELOAD-HINT tag to pre-request upcoming Partial Segments or Media Initialization Sections. A client can issue a GET request for a hinted resource in advance, and the Server holds the request, responding immediately when the media becomes available. This mechanism eliminates unnecessary round trips and supports the delivery of low-latency streams at a global scale, making it particularly effective when playlist download speeds are slow —</p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/enabling-low-latency-http-live-streaming-hls#Provide-Preload-Hints-and-Blocking-of-Media-Downloads" target="_blank" rel="noopener noreferrer" class="">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p>
<p><strong>Tags and Attributes</strong>:</p>
<ul>
<li class=""><strong>#EXT-X-PRELOAD-HINT</strong>: The EXT-X-PRELOAD-HINT tag allows a Client loading media from a live stream to reduce the time to obtain a resource from the Server by issuing its request before the resource is available to be delivered. The server will hold onto the request (“block”) until it can respond.</li>
<li class=""><strong>TYPE</strong>: The value is the type of the hinted resource. If the value is PART, the resource is a Partial Segment.</li>
<li class=""><strong>URI</strong>: The value is a quoted-string containing a URI identifying the hinted resource.</li>
</ul>
<p><strong>For example</strong>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain">…</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">INF</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">TARGET</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500000</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">…</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_7_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">INDEPENDENT</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_8_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">INDEPENDENT</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_9_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PRELOAD</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">HINT</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">TYPE</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_31_10_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">…</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="rendition-reports">Rendition Reports<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#rendition-reports" class="hash-link" aria-label="Direct link to Rendition Reports" title="Direct link to Rendition Reports" translate="no">​</a></h2>
<p>The Rendition Reports feature allows the Player to efficiently switch between renditions by providing direct information about the current playback position in other renditions. Normally, the Player would need to request the Multivariant Playlist (e.g., chunklist_0_video_llhls.m3u8), find the correct playback position, and determine the appropriate _HLS_msn and _HLS_part parameters to request the next Segment or Partial Segment. With Rendition Reports, the #EXT-X-RENDITION-REPORT tag provides the last Media Sequence Number (_HLS_msn) and Partial Segment Number (_HLS_part) for each rendition, allowing the Player to request the required Chunklist and media directly. This streamlines the switch renditions with a minimum number of round trips and minimizes latency during playback transitions —</p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/enabling-low-latency-http-live-streaming-hls#Provide-Rendition-Reports" target="_blank" rel="noopener noreferrer" class="">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p>
<p><strong>Tags and Attributes</strong>:</p>
<ul>
<li class=""><strong>#EXT-X-RENDITION-REPORT</strong>: The EXT-X-RENDITION-REPORT tag carries information about an associated Rendition that is as up-to-date as the Playlist that contains it.</li>
<li class=""><strong>URI</strong>: The value is a quoted-string containing the URI for the Media Playlist of the specified Rendition.</li>
<li class=""><strong>LAST-MSN</strong>: The value specifies the Media SequenceNumber of the last Media Segment currently in the specified Rendition.</li>
<li class=""><strong>LAST-PART</strong>: The value indicates the Part Index of the last Partial Segment currently in the specified Rendition whose Media Sequence Number is equal to the LAST-MSN attribute value.</li>
</ul>
<p><strong>For Example</strong>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain">…</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_33_6_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">DURATION</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">0.500</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_33_7_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">INDEPENDENT</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">YES</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PRELOAD</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">HINT</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">TYPE</span><span class="token operator" style="color:#6e7681">=</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"part_1_33_8_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">RENDITION</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">REPORT</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"chunklist_0_video_llhls.m3u8?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">LAST</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">MSN</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">33</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">LAST</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">8</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">RENDITION</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">REPORT</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"chunklist_2_video_llhls.m3u8?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">LAST</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">MSN</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">33</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">LAST</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">8</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">#</span><span class="token constant" style="color:#c5a38e">EXT</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">X</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">RENDITION</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">REPORT</span><span class="token operator" style="color:#6e7681">:</span><span class="token constant" style="color:#c5a38e">URI</span><span class="token operator" style="color:#6e7681">=</span><span class="token string" style="color:#9ba4b4">"chunklist_3_video_llhls.m3u8?session=23_0Ec5agfl"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">LAST</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">MSN</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">33</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token constant" style="color:#c5a38e">LAST</span><span class="token operator" style="color:#6e7681">-</span><span class="token constant" style="color:#c5a38e">PART</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">8</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="delivery-directives">Delivery Directives<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#delivery-directives" class="hash-link" aria-label="Direct link to Delivery Directives" title="Direct link to Delivery Directives" translate="no">​</a></h2>
<p>A server may provide a set of services to its clients by implementing support for Delivery Directives. These Delivery Directives include —</p>
<p><a href="https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-16#section-6.2.5" target="_blank" rel="noopener noreferrer" class="">HTTP Live Streaming 2nd Edition</a></p>
<p><strong>Tags and Attributes</strong>:</p>
<ul>
<li class=""><strong>_HLS_msn=&lt;M&gt;</strong>: Indicates that the server must hold the request until a Playlist contains a Media Segment with Media Sequence Number of M or later.</li>
<li class=""><strong>_HLS_part=&lt;N&gt;</strong>: Indicates, in combination with _HLS_msn, that the server must hold the request until a Playlist contains Partial Segment N of Media Sequence Number M or later.</li>
</ul>
<p><strong>For example</strong>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token punctuation" style="color:#6e7681">[</span><span class="token maybe-class-name">Latest</span><span class="token plain"> </span><span class="token maybe-class-name">Playlist</span><span class="token punctuation" style="color:#6e7681">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token literal-property property" style="color:#d4d4d4">https</span><span class="token operator" style="color:#6e7681">:</span><span class="token operator" style="color:#6e7681">/</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">domain</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">app</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">stream1</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">chunklist_1_video_llhls</span><span class="token punctuation" style="color:#6e7681">.</span><span class="token property-access">m3u8</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token punctuation" style="color:#6e7681">[</span><span class="token maybe-class-name">Future</span><span class="token plain"> </span><span class="token maybe-class-name">Playlist</span><span class="token punctuation" style="color:#6e7681">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token literal-property property" style="color:#d4d4d4">https</span><span class="token operator" style="color:#6e7681">:</span><span class="token operator" style="color:#6e7681">/</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">domain</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">app</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">stream1</span><span class="token operator" style="color:#6e7681">/</span><span class="token plain">chunklist_1_video_llhls</span><span class="token punctuation" style="color:#6e7681">.</span><span class="token property-access">m3u8</span><span class="token operator" style="color:#6e7681">?</span><span class="token plain">_HLS_msn</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">31</span><span class="token operator" style="color:#6e7681">&amp;</span><span class="token plain">_HLS_part</span><span class="token operator" style="color:#6e7681">=</span><span class="token number" style="color:#c5a38e">3</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="low-latency-hls-optimization-and-performance-analysis-in-ovenmediaengine">Low-Latency HLS Optimization and Performance Analysis in OvenMediaEngine<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#low-latency-hls-optimization-and-performance-analysis-in-ovenmediaengine" class="hash-link" aria-label="Direct link to Low-Latency HLS Optimization and Performance Analysis in OvenMediaEngine" title="Direct link to Low-Latency HLS Optimization and Performance Analysis in OvenMediaEngine" translate="no">​</a></h2>
<p>You can configure OvenMediaEngine for Low-Latency HLS to achieve stability, balance, or low latency according to your environment, situation, and objectives. The OvenMediaEngine team conducted various performance tests for Low-Latency HLS by adjusting key parameters —</p>
<p><a class="" href="https://ovenmedialabs.com/docs/ome/streaming/low-latency-hls#configuration">Low-Latency HLS | OvenMediaEngine</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ovenmediaengine-llhls-configuration">OvenMediaEngine LLHLS Configuration<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#ovenmediaengine-llhls-configuration" class="hash-link" aria-label="Direct link to OvenMediaEngine LLHLS Configuration" title="Direct link to OvenMediaEngine LLHLS Configuration" translate="no">​</a></h3>
<ul>
<li class=""><strong>Partial Segment Duration</strong>: This is represented as &lt;ChunkDuration&gt; in the OvenMediaEngine settings. In the tests below, it was set to 0.2–1 seconds.</li>
<li class=""><strong>Segment Duration</strong>: This refers to the length of a Segment and is represented as &lt;SegmentDuration&gt; in the OvenMediaEngine settings. While Apple recommends 6 seconds, the tests below used a value of 4 seconds.</li>
<li class=""><strong>Segment Count</strong>: This indicates the number of Segments listed in the Playlist and is represented as &lt;SegmentCount&gt; in the OvenMediaEngine settings. This value has little effect on Low-Latency HLS players, so the tests followed Apple’s recommendation of 10 segments. Do not set below 3. It can only be used for experimentation.</li>
<li class=""><strong>Part Hold Back</strong>: This is represented as &lt;PartHoldBack&gt; in the OvenMediaEngine settings and refers to the additional buffer time a Low-Latency HLS player must hold before playback to ensure streaming stability. The Part Hold Back value must be at least 2–3 times the Part Target Duration according to the rules. Based on this, the configuration below was set to 0.6–3 seconds, which is three times the already configured Partial Segment Duration of 0.2–1 seconds.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="01-configurationfocus-on-stability">#01. Configuration — Focus on Stability<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#01-configurationfocus-on-stability" class="hash-link" aria-label="Direct link to #01. Configuration — Focus on Stability" title="Direct link to #01. Configuration — Focus on Stability" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-DVXMXV_y3_7GjjrKSU4r3Q-a281be53b11138d479f5c4cb7240df44.png" width="1098" height="714" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Partial Segment Duration **(&lt;ChunkDuration&gt;): 1 second</li>
<li class="">**Segment Duration **(&lt;SegmentDuration&gt;): 4 seconds</li>
<li class=""><strong>Segment Count</strong> (&lt;SegmentCount&gt;): 10</li>
<li class="">**Part Hold Back **(&lt;PartHoldBack&gt;): 3 seconds</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-tP2cIzHYx9dKSXNWdgGw-g-c774b296feae3d49b24475ea586db7f1.png" width="1600" height="900" class="img_ev3q"></p>
<p>This configuration prioritizes stability in environments with high network instability. The longer Part Hold Back time reduces buffering risk but results in increased overall latency.</p>
<ul>
<li class=""><strong>Result</strong>: 112 frames (3.734 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 0.9 seconds</li>
<li class=""><strong>Part Hold Back</strong>: 3 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="02-configurationfocus-onbalance">#02. Configuration — Focus on&nbsp;Balance<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#02-configurationfocus-onbalance" class="hash-link" aria-label="Direct link to #02. Configuration — Focus on&nbsp;Balance" title="Direct link to #02. Configuration — Focus on&nbsp;Balance" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-wcamHUZ9uj5L9d0eqtLr2Q-ace8908563cada1606bc71b4f9fa5643.png" width="1098" height="714" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Partial Segment Duration **(&lt;ChunkDuration&gt;): 0.5 seconds</li>
<li class="">**Segment Duration **(&lt;SegmentDuration&gt;): 4 seconds</li>
<li class=""><strong>Segment Count</strong> (&lt;SegmentCount&gt;): 10</li>
<li class="">**Part Hold Back **(&lt;PartHoldBack&gt;): 1.5 second</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-YSF8jrg-80zd3YLs_xgo9A-0fc42d8c7fa161465872158a7dbe5a5a.png" width="1600" height="900" class="img_ev3q"></p>
<p>This balanced configuration aims to achieve moderate streaming stability and low latency, making it suitable for most low-latency streaming services.</p>
<ul>
<li class=""><strong>Result</strong>: 58 frames (1.934 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 0.5 seconds</li>
<li class=""><strong>Part Hold Back</strong>: 1.5 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="03-configurationfocus-on-low-latency">#03. Configuration — Focus on Low-Latency<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#03-configurationfocus-on-low-latency" class="hash-link" aria-label="Direct link to #03. Configuration — Focus on Low-Latency" title="Direct link to #03. Configuration — Focus on Low-Latency" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-gouHKrFX63t_QKhZIdSExA-7538ff706e35db34ed44b1fb1cb510bc.png" width="1098" height="714" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Partial Segment Duration **(&lt;ChunkDuration&gt;): 0.2 seconds</li>
<li class="">**Segment Duration **(&lt;SegmentDuration&gt;): 4 seconds</li>
<li class=""><strong>Segment Count</strong> (&lt;SegmentCount&gt;): 10</li>
<li class="">**Part Hold Back **(&lt;PartHoldBack&gt;): 0.6 seconds</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-yqM6jbyjotqITcMwLgLz_w-bb638e1a8d9d65544258acdbef3c0803.png" width="1600" height="900" class="img_ev3q"></p>
<p>This low-latency configuration achieves the lowest possible latency but increases the risk of buffering in unstable network conditions or under high server load. It may not be suitable for most streaming services where stability is crucial.</p>
<ul>
<li class=""><strong>Result</strong>: 31 frames (1.034 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 0.2 seconds</li>
<li class=""><strong>Part Hold Back</strong>: 0.6 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="analysis-andinsights">Analysis and&nbsp;Insights<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#analysis-andinsights" class="hash-link" aria-label="Direct link to Analysis and&nbsp;Insights" title="Direct link to Analysis and&nbsp;Insights" translate="no">​</a></h3>
<ul>
<li class="">Reducing the &lt;ChunkDuration&gt; from 1 second to 0.2 seconds significantly decreased total latency from 3.734 seconds to 1.034 seconds. This is a key benefit of Low-Latency HLS, as it allows the transmission of smaller units of segments.</li>
<li class="">Reducing the Part Hold Back value decreases latency, but values that are too small can increase the risk of buffering.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="optimal-configuration-selection">Optimal Configuration Selection<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#optimal-configuration-selection" class="hash-link" aria-label="Direct link to Optimal Configuration Selection" title="Direct link to Optimal Configuration Selection" translate="no">​</a></h2>
<p>Based on the test results, OvenMediaEngine recommends the following Low-Latency HLS settings.</p>
<ul>
<li class=""><strong>Partial Segment Duration</strong>: 0.5 seconds</li>
<li class=""><strong>Segment Duration</strong>: 4 to 6 seconds</li>
<li class=""><strong>Segment Count</strong>: 10</li>
<li class=""><strong>Part Hold Back</strong>: 1.5 seconds</li>
</ul>
<p>This configuration provides a low latency of 2 to 3 seconds while enabling stable low-latency streaming. From a user experience perspective, if a service can provide streaming in less than 3 seconds, it can be perceived as having sufficiently low latency and can enable interactivity in streaming.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Today, we conducted various tests using Low-Latency HLS with OvenMediaEngine, and as a result, we successfully achieved low latency easily, streaming stably at under 3 seconds (or approximately 3 seconds).</p>
<p>Low-Latency HLS is an extension of HLS designed to address inherent latency challenges while preserving its core strengths of scalability, universality, and compatibility by utilizing features such as Partial Segments, Blocking Playlist Reloads, Preload Hints, Rendition Reports, and more. Notably, Low-Latency HLS does not require replacing existing infrastructure or deploying entirely new servers, as it can utilize the existing infrastructure and CDNs already used with HLS, making it a practical and cost-effective protocol.</p>
<p>OvenMediaEngine leverages Low-Latency HLS to deliver large-scale, high-quality, low-latency streaming suitable for various use cases. As a streaming server, it provides an effective low-latency streaming solution tailored to the needs of modern streaming services. The OvenMediaEngine team is committed to advancing low-latency streaming technology and continually enhancing the streaming experience.</p>
<p>Thank you!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/ome.html" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine Website</a></li>
<li class=""><a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine GitHub</a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/docs/ome">OvenMediaEngine User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>Sub-Second Latency</category>
        </item>
        <item>
            <title><![CDATA[Rethinking HLS: Is it Possible to Achieve Low-Latency Streaming with HLS?]]></title>
            <link>https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls</link>
            <guid>https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls</guid>
            <pubDate>Mon, 13 Jan 2025 12:10:34 GMT</pubDate>
            <description><![CDATA[Can low latency be achieved using HLS?]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-QTfw5SNqrP1WBG6TEADoug-3c6c0b8cf170f58e59a6d38bd92e1f4e.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>While new technologies continue to emerge, HTTP Live Streaming (HLS) remains a stable, universal, and widely supported streaming protocol across the digital ecosystem because HLS was designed with a focus on stability to deliver media on a global scale. This required some level of buffering and latency to ensure a seamless viewing experience. However, with the increasing demand for two-way media services, the need for low-latency streaming has grown significantly.</p>
<!-- -->
<p>So then, can low latency be achieved using HLS? Through our tests, we discovered that the minimum achievable latency with HLS, while maintaining quality and stability, is approximately 6 seconds. In this post, media technology experts at OvenMediaEngine explain the experimental process that led us to this conclusion. In Part 3, we will describe how Low-Latnecy HLS reduces latency. Please check out the series below.</p>
<ul>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication">[Part1] WebRTC: A New Paradigm for Real-Time Web Communication</a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls"><strong>[Part2] HLS: IS it Possible to Achieve Low-Latency Streaming with HLS?</strong></a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming">[Part3] Low-Latency HLS: The Era of Flexible Low-Latency Streaming</a></li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-QTfw5SNqrP1WBG6TEADoug-3c6c0b8cf170f58e59a6d38bd92e1f4e.png" width="1489" height="1009" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-does-hls-remain-widely-used-in-modern-streaming">Why Does HLS Remain Widely Used in Modern Streaming?<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#why-does-hls-remain-widely-used-in-modern-streaming" class="hash-link" aria-label="Direct link to Why Does HLS Remain Widely Used in Modern Streaming?" title="Direct link to Why Does HLS Remain Widely Used in Modern Streaming?" translate="no">​</a></h2>
<p>HLS is one of the most widely used streaming protocols in the modern digital ecosystem. HLS delivers audio and video over HTTP, it enables playback on a wide range of devices and platforms. This universality supports stable playback across desktops, mobile devices, smart TVs, and even IoT devices. Also, HLS uses the same protocol that powers the web, allowing content to be distributed through web servers and Content Delivery Networks (CDN). These qualities make it a reliable and widely adopted choice for streaming providers worldwide.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reducing-latency-in-hls-understanding-and-adjusting-segmentduration">Reducing Latency in HLS: Understanding and Adjusting Segment&nbsp;Duration<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#reducing-latency-in-hls-understanding-and-adjusting-segmentduration" class="hash-link" aria-label="Direct link to Reducing Latency in HLS: Understanding and Adjusting Segment&nbsp;Duration" title="Direct link to Reducing Latency in HLS: Understanding and Adjusting Segment&nbsp;Duration" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1--p9P1KZyjL6Iv0LwNKZqlQ-768166495d9e0e71c81c26066d23bc38.png" width="904" height="448" class="img_ev3q"></p>
<p>Apple recommends a segment duration of 6 seconds for HLS streaming, as outlined in their documentation. This recommendation highlights HLS’s primary focus on stability streaming and playback —</p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices#Media-Segmentation" target="_blank" rel="noopener noreferrer" class="">HTTP Live Streaming (HLS) authoring specification for Apple devices | Apple Developer Documentation</a></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-pNzLkKQT3PFV8WVW1NHGgw-2a68eecf71a67b2eb6b9a05763d14d85.png" width="650" height="164" class="img_ev3q"></p>
<p>According to RFC8216bis-16 (HLS2) 4.4.3.8. EXT-X-SERVER-CONTROL, the HOLD-BACK value must be at least three times the Target Duration <em>(referred to as Segment Duration)</em>. As a result, with the Apple-recommended Target Duration of 6 seconds, the minimum delay inherently starts at 18 seconds —</p>
<p><a href="https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-4.4.3.8" target="_blank" rel="noopener noreferrer" class="">HTTP Live Streaming 2nd Edition</a></p>
<p>Before conducting our tests, we referred to these references to better understand the causes of HLS’s long latency and discovered that following the recommended guidelines results in a minimum delay of 18 seconds. With this understanding, we hypothesized that reducing the segment duration would naturally decrease latency. Based on this assumption, we decided to adjust the relevant parameters to test its impact on real-time streaming performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hls-tags-used-in-thistest">HLS Tags Used in This&nbsp;Test<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#hls-tags-used-in-thistest" class="hash-link" aria-label="Direct link to HLS Tags Used in This&nbsp;Test" title="Direct link to HLS Tags Used in This&nbsp;Test" translate="no">​</a></h3>
<ul>
<li class=""><strong>#EXT-X-TARGETDURATION</strong>: The EXT-X-TARGETDURATION tag specifies the maximum Media Segment duration. It applies to the entire Playlist file.</li>
<li class=""><strong>#EXT-X-SERVER-CONTROL</strong>: The EXT-X-SERVER-CONTROL tag allows the Server to indicate support for Delivery Directives. Delivery Directives are transmitted by the Client to the Server as Query Parameters in the Playlist request URIs.</li>
<li class=""><strong>HOLD-BACK</strong>: HOLD-BACK is an optional attribute of EXT-X-SERVER-CONTROL. This indicates the server-recommended minimum distance from the end of the Playlist at which clients should begin to play or to which they should seek, unless PART-HOLD-BACK applies. Its value must be at least three times the Target Duration. It may appear in any Media Playlist.</li>
<li class=""><strong>#EXT-X-START</strong>: The EXT-X-START tag indicates a preferred point at which to start playing a Playlist. By default, clients should start playback at this point when beginning a playback session.</li>
<li class=""><strong>TIME-OFFSET</strong>: TIME-OFFSET is a required attribute of EXT-X-START. In TIME-OFFSET, a positive number indicates a time offset from the beginning of the Playlist. A negative number indicates a negative time offset from the end of the last Media Segment in the Playlist. The absolute value of TIME-OFFSET should not be larger than the Playlist duration.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="explaining-the-test-options-live-encoder-and-streaming-serversettings">Explaining the Test Options: Live Encoder and Streaming Server&nbsp;Settings<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#explaining-the-test-options-live-encoder-and-streaming-serversettings" class="hash-link" aria-label="Direct link to Explaining the Test Options: Live Encoder and Streaming Server&nbsp;Settings" title="Direct link to Explaining the Test Options: Live Encoder and Streaming Server&nbsp;Settings" translate="no">​</a></h3>
<p>In this test, below is a breakdown of specific configurations for the live encoder (OBS) and streaming server (OvenMediaEngine) and their roles:</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-LHk3I2Y2IyIEW34zIBFKUQ-e17b1f0b13769faa11065912f1ec1361.png" width="983" height="762" class="img_ev3q"></p>
<p><strong>In Live Encoder (OBS) Settings,</strong></p>
<ul>
<li class="">**Rate Control <strong>(CBR)</strong>: **CBR can send a consistent bitrate throughout the stream, which is suitable for live streaming.</li>
<li class="">**Bitrate **(2500 Kbps): This specifies the data rate at which the video is streamed.</li>
<li class="">**FPS **(30): 30 frames per second provides smooth motion for most streaming while keeping processing and bandwidth requirements manageable.</li>
<li class="">**Keyframe Interval **(1 or 2): Keyframe intervals dictate how often a full video frame (I-frame) is encoded.</li>
<li class="">**CPU Usage Preset **(ultrafast): The ‘ultrafast’ preset minimizes CPU usage by prioritizing encoding speed over compression efficiency.</li>
<li class="">**Profile **(Main): The ‘Main’ profile balances compatibility and quality, making it suitable for most streaming.</li>
<li class="">**Tune **(zerolatency): This tuning option optimizes the encoder for low-latency streaming, reducing buffering and improving performance by prioritizing speed over compression.</li>
<li class="">**x264 Options **(scenecut=0, bframes=(0, 1, or 2)): Disables scene-cut detection (scenecut=0), enabling more predictable keyframe placement. And controls the number of B-frames (bframes=0, 1, or2) used in the compression for encoding.</li>
</ul>
<p><strong>In Streaming Server (OvenMediaEngine) Settings,</strong></p>
<ul>
<li class="">**Video **(Pass-through; H264): The server directly forwards the H264-encoded video stream from the encoder without transcoding.</li>
<li class="">**Audio **(Pass-through; AAC): Similar to video, the AAC-encoded audio is forwarded without transcoding.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="01-when-setting-the-segment-duration-to-1-second-to-reducelatency">#01. When Setting the Segment Duration to 1 Second to Reduce&nbsp;Latency<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#01-when-setting-the-segment-duration-to-1-second-to-reducelatency" class="hash-link" aria-label="Direct link to #01. When Setting the Segment Duration to 1 Second to Reduce&nbsp;Latency" title="Direct link to #01. When Setting the Segment Duration to 1 Second to Reduce&nbsp;Latency" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-pBfYr0JcokkQsxTfAZeMGg-5f2ad086224b8d53684713e97c3351a4.png" width="1409" height="1170" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Segment Duration **(#EXT-X-TARGETDURATION): 1 second</li>
<li class="">**Hold Back **(#EXT-X-SERVER-CONTROL<!-- -->:HOLD-BACK<!-- -->): 3 seconds</li>
<li class=""><strong>Keyframe Interval</strong>: 1 second</li>
<li class=""><strong>x264 Options</strong>: scenecut=0, bframes=0</li>
</ul>
<p>We conducted tests based on the hypothesis that a shorter Segment Duration would naturally reduce streaming latency. Applying the rule that the Hold Back must be at least three times the Segment Duration, we achieved a result of approximately 3.667 seconds. Since the latency of 3 to 5 seconds is commonly referred to as ‘low latency,’ we confirmed that numerical low latency is achievable by adjusting HLS tags.</p>
<ul>
<li class=""><strong>Result</strong>: 110 frames (3.667 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 0.9 seconds (time required to create a new segment)</li>
<li class=""><strong>Player Hold-Back</strong>: 3 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="02-when-setting-a-negative-time-offset-to-further-reducelatency">#02. When Setting a Negative Time Offset to Further Reduce&nbsp;Latency<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#02-when-setting-a-negative-time-offset-to-further-reducelatency" class="hash-link" aria-label="Direct link to #02. When Setting a Negative Time Offset to Further Reduce&nbsp;Latency" title="Direct link to #02. When Setting a Negative Time Offset to Further Reduce&nbsp;Latency" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-L7RlT3G54tZkPZ7ySrOfJQ-0e34c0627416ba7ee41bcd76bf76659f.png" width="1409" height="1170" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Segment Duration **(#EXT-X-TARGETDURATION): 1 seconds</li>
<li class="">**Hold Back **(#EXT-X-SERVER-CONTROL<!-- -->:HOLD-BACK<!-- -->): 3 seconds</li>
<li class="">**Time Offset **(#EXT-X-START<!-- -->:TIME-OFFSET<!-- -->): -1 seconds</li>
<li class=""><strong>Keyframe Interval</strong>: 1 seconds</li>
<li class=""><strong>x264 Options</strong>: scenecut=0, bframes=0</li>
</ul>
<p>We previously achieved an impressive result of 3.667 seconds in the test as #01, using HLS with TARGETDURATION:1. Building on that result, we adjusted the START<!-- -->:TIME-OFFSET<!-- --> to a negative value, equal to the Segment Duration, to further reduce latency. This adjustment created a negative offset from the end of the last Media Segment in the Playlist, allowing us to achieve an even more remarkable result of 1.7 seconds. However, this approach violates the HOLD-BACK rule, rendering it incompatible with iOS and Safari.</p>
<ul>
<li class=""><strong>Result</strong>: 51 frames (1.7 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 0.9 seconds (time required to create a new segment)</li>
<li class=""><strong>Player Hold-Back</strong>: 3 seconds</li>
<li class=""><strong>START<!-- -->:TIME-OFFSET</strong>: -1 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reducing-latency-in-hls-achieving-low-latency-in-hls-without-compromising-stability-andquality">Reducing Latency in HLS: Achieving Low Latency in HLS Without Compromising Stability and&nbsp;Quality<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#reducing-latency-in-hls-achieving-low-latency-in-hls-without-compromising-stability-andquality" class="hash-link" aria-label="Direct link to Reducing Latency in HLS: Achieving Low Latency in HLS Without Compromising Stability and&nbsp;Quality" title="Direct link to Reducing Latency in HLS: Achieving Low Latency in HLS Without Compromising Stability and&nbsp;Quality" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABdEAAAGFCAMAAAAl20rKAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAC0ZVhJZklJKgAIAAAABgASAQMAAQAAAAEAAAAaAQUAAQAAAFYAAAAbAQUAAQAAAF4AAAAoAQMAAQAAAAIAAAATAgMAAQAAAAEAAABphwQAAQAAAGYAAAAAAAAASAAAAAEAAABIAAAAAQAAAAYAAJAHAAQAAAAwMjEwAZEHAAQAAAABAgMAAKAHAAQAAAAwMTAwAaADAAEAAAD//wAAAqAEAAEAAAChBQAAA6AEAAEAAABVAQAAAAAAAOMlts8AAAEIUExURf///+7w/b3D+N7h/HuH8pyl9b3D+a2094yW9IOP86St9vf4/ufp/c7S+pSe9LW8+O/w/cbL+dba++3v/cHH+Y2X9Lm/+NPX+/b3/rC398rP+p6n9YSP85Wf9aev9tzf/OXn/Obo/ff3/svQ+sXK+dHW+pOd9IOO84mU84+a9LS7+M3S+v/24f/chv/uwt/3/3/g/7/v///lpP+6DQDB///LSYhjBwAAAEQyAxkbMEJIgQAnMwBniLuICjk/cWJswgBadwCazCktUQC07gB0mUpRkQAzRBASIACOu1JaoXN+4jE2YQCn3QgJEABNZgAaIlpjsSEkQQANEQBAVWt10v/78O/7///y0WXFyqwAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH6gUNCi4BMBZ5hQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wNS0xM1QwMjoyNDoxOCswMDowMCAXLHAAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDUtMTNUMDI6MjQ6MTgrMDA6MDBRSpTMAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTA1LTEzVDEwOjQ2OjAxKzAwOjAwTn6+HQAAABV0RVh0ZXhpZjpDb2xvclNwYWNlADY1NTM1M3sAbgAAACB0RVh0ZXhpZjpDb21wb25lbnRzQ29uZmlndXJhdGlvbgAuLi5q8qFkAAAAE3RFWHRleGlmOkV4aWZPZmZzZXQAMTAyc0IppwAAABV0RVh0ZXhpZjpFeGlmVmVyc2lvbgAwMjEwuHZWeAAAABl0RVh0ZXhpZjpGbGFzaFBpeFZlcnNpb24AMDEwMBLUKKwAAAAZdEVYdGV4aWY6UGl4ZWxYRGltZW5zaW9uADE0NDHT/K3KAAAAGHRFWHRleGlmOlBpeGVsWURpbWVuc2lvbgAzNDHL0oDnAAAAF3RFWHRleGlmOllDYkNyUG9zaXRpb25pbmcAMawPgGMAAAABb3JOVAHPoneaAAATZklEQVR42u3de0Mc13nA4bF3AWEkGYkFcREIOYqVOL7IrVsaJ20SN65ju2mTNm2//zcpe2N3Mcw5Z3Z2Lofn+ceyDO+yr9Y/RrOzS1EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQA+99z4AnZRc9MEQgE5SdIBcKDpALhQdIBeKDpALRQfIhaID5ELRAXKh6AC5UHSAXCg6QC4UHSAXig6QC0UHyIWiA+RC0QFyoegAuVB0gFwoOkAuFB0gF4oOkAtFB8iFogPkQtEBcqHoALlQdIBcKDpALhQdIBeKDpALRQfIhaID5ELRAXKh6AC5UHSAXCg6QC4UHSAXig6QC0UHyIWiA+Si9aJvbW0DPEQ7W4/yKfruB9uDveTbB8jI4yc7T/tf9EcfDtpeJEAn7D/5oM9F392Rc4CFvSe1HKkn3+76RX+07VwLwC2DGg7U02903ePzJ22vDaCT9tduevJNrll0x+cA9xmsee4l/QbXubWt/bb3BdBlz3b7UvTdZ23vCqDj9rf6UfSnj9veFED3bfeh6DvOoANEGFQ+85J+UxVvaLvtHQH0xOOqT5Am31LFortmESDWXsWkJ99QtaILOkC8iklPvp1KRRd0gBTVkp58M1WKLugAaSolPflWKhTdk6IAqfYqXPGSfCPpRf+g7b0A9NDjLhb9qevQASp40sGie6UoQCXJ78WYfAupRXcSHaCa5FPpybeQWPSnbW8EoLeed6zozrkAVJZ43iV5flrRd9peB0CP7Xep6LuucwFYQ9pb6yaPTyq6p0UB1pH25Gjy+JSiO0QHWE/SQXry9JSiO4sOsJ6kM+nJ01OKvt/2KgD6bqcjRd9qexEAvZdyGL3J4d5EF2Btj7pRdM+LAqztw04U3bvoAqwv4V11k2fHF91JF4AaxJ92SR4dX/T9trcAkIP4q12SR0cX/VHbSwDIQvxPvkgeHV10Ly8CqEP8i4ySR0cX/VnbSwDIQ/R7uyRPji76oO0dAORhq/2iuxodoBbRV6QnT44uetsrAMhE9PsvJk+OLbofMApQj+gfN5o8Obbo3qYLoB6bOzei6ADNUnSAXCg6QC4UHSAbig6QC0UHyIWiA+RC0QFyoegAuVB0gFwoOkAuFB0gF4oOkAtFB8iFogPkQtEBcqHoALlQdIBcKDpALhQdIBeKDpALRQfIhaID5ELRAXKh6AC5UHSAXCg6QC4UHSAXig6QC0UHyIWiA+RC0QFyoegAuVD0uhyMDsf35+jFJm/keLT6x3G4WOTJ6eSrmPz69CefOPm8s7Z3BGyWotfk6OYenR1s7EYOXt764zhcXuX5gaLDw6bo9bhYukuHx5u6laPbfxwrRR/fsKLDQ6botRit3KeTTd3M2Xj60dJvrBZ9OFJ0eNAUvQ6zsyEvioPzyS82dd5lEvBXt3/jsJh/Szm/9zMVHR4CRa/DaHaEXBSv5r86mWztxcvp8fJoclbmaBrjm+Po+cdONzy6/rZwfut51cvxbw7PR5N/WRyQH87/+03Ri+m3kpVj9Bcn8xs9WTqKP5l9ymj25zr5jNHxxXTM5TT9o5t7NvlrwclpAfSAotdhmtPL8S9fDg9Ho9NZRF9M63p50+KL8Sn2u4t+MU/ukpvz5i/HpU8s+tn8o48iin4+HXNzg4eTO3M5fyZ28qwr0HWKXoPjaXVXfm8SzvNJXRddnJ4Xubvoc69uzZh5UV700Wz6ouhni889Chb9fPp7yzd4uXRpzbDshA7QGYpeg8t5ZudFPFuK4+k0u2fFweEs4HcX/fx4OubiZuzprPCT9r4cH93ffR59YemZ0cknHR5Pb/Rg6Tz6nUWf/t7kBg8PpqeO5h9yOf7nxWi0sQt4gNooeg1elRb9dH7IezQr891FH83OnCwO9Q9ngT+e//dQ0ZevXpx/+zganxW/jCv6/HOmX8iL6YeejEZJywDao+g1uL/o4wPui/kCp2l/cU/R5+feby6UuVwN+XkRKvryK4wuZ7c1Fyr6y1fzG7xxtPSqqXNVhz5Q9BrMovjTok/Od5+tFv00VPR5sW8um1mcLS8r+sXKuwC8Gq5+aKjo409+sfonc7GSeFc+Qg8oeh2mzyBOzjSfLBd9ck5840U/XPqNqkW/LH5S9LPVF045SofuU/Q6XCyad7hc9JPFfyzmfaxw1mXyDeP+sy53FT31rMvByg0uxo1u/hbgIB26T9HrMD0iHkf5Yl6/RdE3/szoXUWffhcYTQ68zyOeGZ18G5l8zvhNBsb/7ezm28FoNP+OAnSbotfiYvVOrRR9XuaDeWSnhT5ZvNJ08s/D2dWLizeFmX8rmH8nSCr6ZPjhwfS7xOXSFZDTpzsPjg9/WvTpB13OLqB/dTAavZx8I5l85Rt7sxqgNopei+PzkqIvv8Jocpi88sG3X2F0uZi6/IKfSccTir58IyeL61hGt86WrxR9+VVJ42P1la/Ti0ah+xS9Hsc3R+knJ7eLvvwuAJN/n0X15fly0c9vAr+weBeAacZTin58tnKjizcZmN3Q/Anb5aIv/V1jfPLlYJH0l68KoPMUvS6vJvk9eTU+HL5V9PkbXo3mWXwxTuXRwcly0U9PD5dPXk/deuOslKIvv1PX5EuYv37oePyFnp8e3FX02Q2+HF3OvtDp95QLF7pALyh6ByxVGKA6Re8ARQdqoegdoOhALRS9AxQdqIWid4CiA7VQdIBcKDpALhQdIBeKDpCLHhX99QDu8tHsEfJR218IHfW6hYj87M2bNz9fPDgrG3/J72VZ9K3Yr5UHZpD4mOOh2WovIoPlzN6qbtS/jr/k9zMt+sdbcNvbpaK/bfuLoYM+Xi56YxH5xdu3b3+5tfV63aJ/cj3rV5kWfRD9sTwcW0tF96wMPzVYLnruEVF0ek7RKafoik5/KDrlFF3R6Q9Fp5yiKzr9oeiUU3RFpz8UnXKKruj0h6JTTtEVnf5QdMopuqLTH4pOOUXvfNE//aw2ny/fxHvv12bQxNwv3tXmy97u4e6if17fQ2T1cV3fXWhk7pf1PUR6u4d7il7fI+TvVu5Cffcg4aWiN/pZ9M//vjafVfmiI7zfxNwvv6rNu97u4e6if1bfQ2T1f9f67kIjc9/V9xDp7R7uKXp9j5B/qNTUsCp/5ay09RiK3sBcRS8UvXyuoit6eOsxFL2BuYpeKHr5XEVX9PDWYyh6A3MVvVD08rmKrujhrcdQ9AbmKnqh6OVzFV3Rw1uPoegNzFX0QtHL5yq6ooe3HkPRG5ir6IWil89VdEUPbz2GojcwV9ELRS+fq+iKHt56DEVvYK6iF4pePlfRFT289RiK3sBcRS8UvXyuoit6eOsxFL2BuYpeKHr5XEVX9PDWYyh6A3MVvVD08rmKrujhrcdQ9AbmKnqh6OVzFV3Rw1uPoegNzFX0QtHL5yq6ooe3HkPRG5ir6IWil89VdEUPbz2GojcwV9ELRS+fq+iKHt56DEVvYK6iF4pePlfRFT289RiK3sBcRS8UvXyuoit6eOsxFL2BuYpeKHr5XEVX9PDWYyh6A3MVvVD08rmKrujhrcdovej/eHX1T3UX/Wru11+H7ldSyarODRX9Zu5vfltr0Tu1h+pFv76hf6656F/f3IV/+V3oLjQyN1D0397M/f0f6ix6p/awRtHjHiKKXumL7lLRr66+CXxotZIlzo0u+nXT/3UTRe/CHjpa9KurUHIamRtd9KurP26k6B3Yg6KHth4j96JffVv+oVVLljQ3oehX/7aZore/h84W/bvAvW1kbkLRr/60maK3vgdFD209Rq5Fn/zz+++CB5GpJas0N6Lok/9L//Sb4P+v73q7h64VfXLC6IcfwweRjcwNF336rf734W/6vd2Dooe2HiProo8fWIEjhEolS50bW/Sv/v36V+Wn0t/1dg+dLPpw+OfgXzMamRtb9K/+43ob9Re9E3tQ9NDWY2Rf9E0cm6bOjS76V/+5saK3vofuFn0Dx6bJc6OL/sfNFb3tPSh6aOsxsi7699cPp7+Uf2i1sw2Jc9s+Ru/EHjpZ9B++ubr6a+DeNjI35Rj9v+oveif2oOihrcfItehz3wc+tOozgklzY4v+h/F59PKr0971dg9dK/rcX38I3IVG5sYWffwU6X/XWvTu7EHRQ1uPkXfRv9vQddiJc1OudQn87/qut3voaNF//EvoLjQyN+Val8AV6b3dg6KHth4j76JfN+dv5R9a9dg0aW4Hrkdvfw8dLfrNCd97NTK3A9ejt76HLhX9u8kTut9On/n/LvDsrqI3UPTJP3/366urX5d/aKXzx6lzW3zNaHf20LWifz3/RejMUSNz23vNaHf2oOihrcfIuujDv12Fnmmvdo1H4tz4a12C3vV2D90s+vDH4OU6jcyNfmY0rLd7UPTQ1mPkXfTgn0XFkiXObb3oXdhDR4v+bfCS+kbmtl70DuyhS0VPouiNFX18DLmJkiXObb3oXdhDR4v+44ZKlji39aJ3YA+KHtp6jKyLPj7Pu4mzDalz2y56J/bQzaKPz/Nu4mxD6ty2i96FPSh6aOsxci36jcDrGyq/Q1XK3BaL3p09dK3oC4Hr6xqZ217Ru7MHRQ9tPUbuRW//qr2iE0Vvfw+dLXrrV+2NdaDore9B0UNbj5F30f/8degFa9VKlji39aJ3YQ8dLfo3oVe9VixZ4tzWi96BPSh6aOsxWi96JD+VrkLRO7UHP5WubK6fSuen0oW3HkPRG5ir6IWil89VdEUPbz2GojcwV9ELRS+fq+iKHt56DEVvYK6iF4pePlfRFT289RiK3sBcRS8UvXyuoit6eOsxFL2BuYpeKHr5XEVX9PDWYyh6A3MVvVD08rmKrujhrcdQ9AbmKnqh6OVzFV3Rw1uPoegNzFX0QtHL5yq6ooe3HkPRG5ir6IWil89VdEUPbz2GojcwV9ELRS+fq+iKHt56DEVvYK6iF4pePlfRFT289RiK3sBcRS8UvXyuoit6eOsxFL2BuYpeKHr5XEVX9PDWYyh6A3MVvVD08rmKrujhrcdQ9AbmKnqh6OVzFV3Rw1uPoegNzFX0QtHL5yq6ooe3HkPRG5ir6IWil89VdEUPbz2GojcwV9ELRS+fq+iKHt56DEVvYK6iF4pePlfRFT289RiK3sBcRS8UvXyuoit6eOsxFL2BuYpeKHr5XEVX9PDWYyh6A3MVvVD08rmKrujhrcdQ9AbmKnqh6OVzFV3Rw1uPsdGi/8/ntfl0+SY+GtTmvSbm/u+Xtfmit3u4u+if1vcQWXkUvlffXWhk7hf1PUR6u4d7il7fI+T/VtNXm9fJ2e1r0eHG3UWHuXuKnidFp+cUnXKKruj0h6JTTtEVnf5QdMopuqLTH4pOOUVXdPpD0Smn6IpOfyg65RRd0ekPRaecone16G/qu3afbHy8VPSP2/5i6KA3y0VvLCI/e/Pmzc8Hg4/WTfTrwa3X6WVUdLjLIPExx0Oz1V5EBsuZvVXdqH8df8nvB+vYx6J/sgV3mb9Y+nXbXwgd9UkLEfnF27dvfzl7cK5T9PGX/Kssiw5AKUUHyIWiA+RC0QFyoegAuVB0gFwoOkAuFB0gF4oOkAtFB8iFogPkQtEBcqHoALlQdIBcKDpALhQdIBeKDpALRQfIhaID5ELRAXKh6AC5UHSAXCg6QC4UHSAXig6QiceKDpCJ2O4qOkDXKTpALtov+tO2VwCQieetFz19MgB32W6/6Htt7wAgDx+2X/RB2zsAyMNW+0V/1vYOAPKw237Rd9reAUAW9mOzu8Giu9gFoA7Rl7pssOieGgWoQ/QTo5ss+pO2twCQg0ddKLoT6QDriz+Nvsmi77a9BoAMPOtE0YfP294DQP897UbRP2h7DwC9F/3m6Bsu+nC/7U0A9N1OV4q+3fYmAHpuL/oFo5su+q5L0gHWEv2+ixsvuoN0gLUkHaJvuOgO0gHWkXSIvuGiO0gHWEPaIfqmi+5yF4DqUi50aaDofoA0QFWJwd140f3gC4CK9uLfo6uhou/ut70TgH6KfxvdporuJ18AVBL/ky6aK7p31QWo4HHadS4NFd2PvgBItpfwnotNFt3b6gKkqhD0Zoq++7jt1QD0S+KV6A0WXdIBklQKekNFH+4O2l4PQG/sVQt6U0X39ChArCpPijZb9OGHbe8IoBcep75UtIWiD7e8tS5A0JP069BbKPpw11WMAOX2Pqge2UaLPhzuOEwHKPG88hmX5os+3PUEKcB99tc5QG++6MPhI6deAO6yl/xei60XfTh86jgd4Lb9nerPiLZY9Ovj9O39tncH0CXP1zzf0mLRrz19tt/2AgG64XkNh+etFv3ao50n3u4FeNj2BttbtVW1zaJPPN3a3t4eADw0T7a3d7ZqOjbvStEBqIuiA+RC0QFyoegAuVB0gFwoOkAuFB0gF4oOkAtFB8iFogPkQtEBcqHoALlQdIBcKDpALhQdIBeKDpALRQfIhaID5ELRAXKh6AC5UHSAXCg6QC4UHSAXig6QC0UHyIWiA+RC0QFyoegAuVB0gFwoOkAuFB0gF4oOkAtFB8iFogPkQtEBcqHoALlQdIBcKDpALhQdIBfJRX+9BUAnJRcdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrg/wHrSUuKA9AU6QAAAABJRU5ErkJggg==" width="1489" height="389" class="img_ev3q"></p>
<p>In the previous test, we achieved numerically low-latency streaming using HLS but found significant room for improvement in terms of quality. For example, test #01, which used a 1-second Keyframe Interval, resulted in degraded video quality, making it unsuitable for real-world use. Similarly, test #02, where the Time Offset was set to the negative value of the Segment Duration, violated guidelines, rendering it incompatible with iOS and Safari. Even with latency under 2 seconds, a streaming service cannot compromise on critical aspects like video quality and playback stability.</p>
<p>This led us to focus on how the Keyframe Interval, given that HLS segments always start with a keyframe, impacts video quality. While longer Keyframe Intervals generally improve video quality, we could not set this value to something extreme like 10 seconds since our primary goal was to test latency reduction using HLS. To address this, we referred to Video Multimethod Assessment Fusion (VMAF), a video quality evaluation method used by Netflix. According to VMAF, a difference of about 3 or more points is considered a valid threshold for humans to distinguish streaming quality.</p>
<p><strong>References</strong>:</p>
<ul>
<li class="">THEO Blog Post — How to Optimize LL-HLS for Low Latency Streaming</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-4BJ3q-3kQ679m719F0WCSQ-61936911e80a19f38ccb9c688b943575.png" width="685" height="195" class="img_ev3q"></p>
<p><a href="https://www.theoplayer.com/blog/how-to-optimize-ll-hls-for-low-latency-streaming" target="_blank" rel="noopener noreferrer" class="">How to Optimize LL-HLS for Low Latency Streaming</a></p>
<ul>
<li class="">Apple Documentation — HTTP Live Streaming (HLS) Authoring Specification for Apple Devices (Section 1.13)</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-Z9jWeTacqJag64c2-IWq-A-38bdbb59399f645b05c7171a9aa92de9.png" width="931" height="356" class="img_ev3q"></p>
<p><a href="https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices" target="_blank" rel="noopener noreferrer" class="">HTTP Live Streaming (HLS) authoring specification for Apple devices | Apple Developer Documentation</a></p>
<p>After reviewing various research findings, we discovered that a Keyframe Interval of 2 seconds strikes the best balance between quality and stability. Below are the results of our tests using this configuration.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="03-when-setting-the-keyframe-interval-to-2-seconds-forquality">#03. When Setting the Keyframe Interval to 2 Seconds for&nbsp;Quality<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#03-when-setting-the-keyframe-interval-to-2-seconds-forquality" class="hash-link" aria-label="Direct link to #03. When Setting the Keyframe Interval to 2 Seconds for&nbsp;Quality" title="Direct link to #03. When Setting the Keyframe Interval to 2 Seconds for&nbsp;Quality" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-z9GpIkWJZuIlCybTSWbHsQ-1ec448459dc2f5fcb13822198bc54b8d.png" width="1409" height="1170" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Segment Duration **(#EXT-X-TARGETDURATION): 2 seconds</li>
<li class="">**Hold Back **(#EXT-X-SERVER-CONTROL<!-- -->:HOLD-BACK<!-- -->): 6 seconds</li>
<li class="">**Time Offset **(#EXT-X-START<!-- -->:TIME-OFFSET<!-- -->): -2 seconds</li>
<li class=""><strong>Keyframe Interval</strong>: 2 seconds</li>
<li class=""><strong>x264 Options</strong>: scenecut=0, bframes=0</li>
</ul>
<p>Informed by reference materials and recommendations, we learned that a keyframe interval of 2 seconds maintains a reasonable level of quality. The previous tests (#01 and #02), which focused solely on reducing streaming latency, resulted in degraded quality, making them unusable for real-world applications. To address this, we conducted a new test by setting the Keyframe Interval to 2 seconds, which naturally aligned the Segment Duration to 2 seconds. This is because the Segment Duration cannot be smaller than the Keyframe Interval since each segment requires at least one complete Keyframe. We also adjusted the Time Offset to -2 for consistent configuration. This setup achieved an excellent result of 3.067 seconds.</p>
<ul>
<li class=""><strong>Result</strong>: 92 frames (3.067 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 1.9 seconds (time required to create a new segment)</li>
<li class=""><strong>Player Hold-Back</strong>: 6 seconds</li>
<li class=""><strong>START<!-- -->:TIME-OFFSET</strong>: -2 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-much-do-b-frames-affect-streaming-quality">How much do B-Frames affect streaming quality?<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#how-much-do-b-frames-affect-streaming-quality" class="hash-link" aria-label="Direct link to How much do B-Frames affect streaming quality?" title="Direct link to How much do B-Frames affect streaming quality?" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-sZJ6czqabCTq0JHvlzjE7w-a408670d983762fd86a13f1edb7b2a42.png" width="1600" height="994" class="img_ev3q"></p>
<ul>
<li class=""><strong>On the left</strong>: $ ffmpeg-iinput.mp4-b<!-- -->:v2M-bf1-x264optskeyint<!-- -->=60<!-- -->:min-keyint<!-- -->=60<!-- -->:scenecut<!-- -->=-1-profile<!-- -->:vhigh-g60-r30output<!-- -->.mp4</li>
<li class=""><strong>On the right:</strong> $ ffmpeg-iinput.mp4-b:v2M-bf1-codech264_nvenc-profile<!-- -->:vhigh-g60-r30output<!-- -->.mp4</li>
</ul>
<p>Another factor often mentioned to affect quality is the B-Frame setting, so we conducted a test to verify this. We prepared the same video at bitrates of 2Mbps, 3Mbps, and 5Mbps and inserted B-Frames set to 0, 1, and 2 for each bitrate. The results showed that the highest VMAF score was achieved at 2Mbps with a B-Frame setting of 1, while at 5Mbps, the highest VMAF score was obtained with a B-Frame setting of 0. These results differ from the commonly accepted understanding, indicating that B-Frames do not necessarily guarantee a quality improvement.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="04-when-setting-the-b-frame-value-to-2-forquality">#04. When Setting the B-Frame Value to 2 for&nbsp;Quality<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#04-when-setting-the-b-frame-value-to-2-forquality" class="hash-link" aria-label="Direct link to #04. When Setting the B-Frame Value to 2 for&nbsp;Quality" title="Direct link to #04. When Setting the B-Frame Value to 2 for&nbsp;Quality" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-R--BwztoNhSaWvsSipD_Rw-488d32a016fca520ca5ee1f49760ebbb.png" width="1409" height="1170" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Segment Duration **(#EXT-X-TARGETDURATION): 2 seconds</li>
<li class="">**Hold Back **(#EXT-X-SERVER-CONTROL<!-- -->:HOLD-BACK<!-- -->): 6 seconds</li>
<li class="">**Time Offset **(#EXT-X-START<!-- -->:TIME-OFFSET<!-- -->): -2 seconds</li>
<li class=""><strong>Keyframe Interval</strong>: 2 seconds</li>
<li class=""><strong>x264 Options</strong>: scenecut=0, bframes=2</li>
</ul>
<p>However, we didn’t stop testing and wanted to gather more conclusive data by comparing it with test #03 (which achieved a latency of 3.067 seconds). Using the same configuration as test #03, we only added the B-Frame setting to 2. As a result, the encoding and decoding of B-Frames introduced additional latency, resulting in a measured latency of 3.534 seconds, checking that B-Frames do impact latency.</p>
<p>From this, we confirmed again that B-Frames do not guarantee quality improvement. Moreover, since B-Frames increased latency, we concluded that there is no reason to use the B-Frame option when the goal is to minimize latency while maintaining a reasonable level of quality. Of course, if the quality had been noticeably better despite the slight increase in latency, we might have considered using the B-Frame option in real-world scenarios. However, that was not the case in our tests.</p>
<ul>
<li class=""><strong>Result</strong>: 106 frames (3.534 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 1.9 seconds (time required to create a new segment)</li>
<li class=""><strong>Player Hold-Back</strong>: 6 seconds</li>
<li class=""><strong>START<!-- -->:TIME-OFFSET</strong>: -2 seconds</li>
<li class=""><strong>B-frame Encoding/Decoding:</strong> 0.2 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="stability-issues-discovered-with-negative-timeoffset">Stability Issues Discovered with Negative Time&nbsp;Offset<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#stability-issues-discovered-with-negative-timeoffset" class="hash-link" aria-label="Direct link to Stability Issues Discovered with Negative Time&nbsp;Offset" title="Direct link to Stability Issues Discovered with Negative Time&nbsp;Offset" translate="no">​</a></h2>
<p>Additionally, in all tests except for test #01, we aimed to reduce latency as much as possible by setting the negative absolute value of the Segment Duration as the Time Offset. However, this approach revealed the following stability issues during testing.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="player-instability">Player Instability<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#player-instability" class="hash-link" aria-label="Direct link to Player Instability" title="Direct link to Player Instability" translate="no">​</a></h3>
<p>The player reloads the Playlist immediately after the playback of the last Segment ends, downloads the new Segment, and then plays the next Segment. During this process, if the timing of the Playlist Reload and Segment Download is not synchronized, a Jitter may occur.</p>
<ul>
<li class=""><strong>Playlist Reload?</strong> Playlist Reload is the process in HLS (HTTP Live Streaming) where the player periodically re-requests the Playlist file to fetch new segments for playback. The player can fetch the most recent segments in a live stream to keep playback continuous. Without reloading the Playlist, the player would not be aware of new segments, causing playback to stall or freeze during live streaming — <a href="https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.4" target="_blank" rel="noopener noreferrer" class="">https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.4</a>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="server-instability">Server Instability<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#server-instability" class="hash-link" aria-label="Direct link to Server Instability" title="Direct link to Server Instability" translate="no">​</a></h3>
<p>The server’s allowable Jitter range varies depending on the player’s connection timing. For players that request the server 1 second after a new Segment is created, up to 1 second of Jitter is allowed. However, for players that request immediately after the new Segment is created, no Jitter is allowed, and the Playlist must be updated within 2 seconds. If this synchronization process is not properly managed, the streaming experience may degrade.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="factors-that-can-causejitter">Factors That Can Cause&nbsp;Jitter<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#factors-that-can-causejitter" class="hash-link" aria-label="Direct link to Factors That Can Cause&nbsp;Jitter" title="Direct link to Factors That Can Cause&nbsp;Jitter" translate="no">​</a></h3>
<p>There are many factors that can cause jitter, as shown below:</p>
<ul>
<li class=""><strong>Variations in Keyframe Interval</strong>: Changes in Keyframe Interval due to factors such as Scenecut options or encoder performance.</li>
<li class=""><strong>Frame Drops Issues:</strong> Jitter may occur in any situation where frames are dropped.</li>
<li class="">**Issues with Video Sources **(Encoder): Problems with video sources, such as encoder performance or configuration issues, can lead to jitter.</li>
<li class=""><strong>Server Transcoding Performance Issues</strong>: Insufficient server performance for processing video data may cause jitter.</li>
<li class=""><strong>Network Jitter Between Video Sources and Servers</strong>: Instability in the network connection between video sources and servers can significantly contribute to jitter.</li>
<li class=""><strong>Server Performance While Handling Multiple Player Requests</strong>: All players must complete Playlist Reload and Segment Download within the Jitter Buffer time, as players receiving data at the end are more likely to experience buffering, which significantly impacts the number of concurrent players the server can handle efficiently.</li>
</ul>
<p>Of course, setting the Time Offset to a negative value violates the guidelines for iOS and Safari, meaning it would not function properly. Moreover, it poses a broader threat to the stability of HLS in global-scale streaming, making it unsuitable for real-world applications.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reducing-latency-in-hls-finding-optimal-configuration">Reducing Latency in HLS: Finding Optimal Configuration<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#reducing-latency-in-hls-finding-optimal-configuration" class="hash-link" aria-label="Direct link to Reducing Latency in HLS: Finding Optimal Configuration" title="Direct link to Reducing Latency in HLS: Finding Optimal Configuration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="05-when-configured-for-quality-and-stability">#05. When Configured for Quality and Stability<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#05-when-configured-for-quality-and-stability" class="hash-link" aria-label="Direct link to #05. When Configured for Quality and Stability" title="Direct link to #05. When Configured for Quality and Stability" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-wTvKnCw2vZuT9X5sMgr1bQ-63f1b6df404e9f6e457cbc315ae6f902.png" width="1256" height="1170" class="img_ev3q"></p>
<p><strong>Configuration</strong>:</p>
<ul>
<li class="">**Segment Duration **(#EXT-X-TARGETDURATION): 2 seconds</li>
<li class="">**Hold Back **(#EXT-X-SERVER-CONTROL<!-- -->:HOLD-BACK<!-- -->): 6 seconds</li>
<li class=""><strong>Keyframe Interval</strong>: 2 seconds</li>
<li class=""><strong>x264 Options</strong>: scenecut=0, bframes=0</li>
</ul>
<p>Through various tests, we gained an understanding that the rules defined in HLS, such as the Hold Back being three times the Segment Duration, the absolute value of the Time Offset not exceeding the Playlist Duration, and more, are grounded in ensuring quality and stability. Additionally, we aimed to test based on these rules to achieve optimal results. As a result, we achieved a latency of approximately 6.834 seconds, striking a balance that delivers both quality and stability for a reliable streaming experience.</p>
<ul>
<li class=""><strong>Result</strong>: 205 frames (6.834 seconds) latency</li>
<li class=""><strong>Server Buffer</strong>: 0.1 to 1.9 seconds (time required to create a new segment)</li>
<li class=""><strong>Player Hold-Back</strong>: 6 seconds</li>
<li class="">**Other factors **(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Through this test, we explored various factors to achieve low-latency streaming using HLS. While we observed measurable successes, we found that significantly reducing latency while maintaining HLS’s core strengths of stability, universality, and scalability was not achievable.</p>
<p>To address these limitations, HLS has extended into Low-Latency HLS. Low-Latency HLS offers a new possibility by fulfilling the demands for low-latency streaming while preserving the strengths of HLS. In the upcoming article, we will dive deeper into Low-Latency HLS and explore its key innovations, such as Partial Segments, Blocking Playlist Reloads, Preload Hints, Blocking of Media Downloads, and Rendition Reports. These mechanisms not only achieve low latency but also enhance the overall streaming experience. Through this, we will gain a deeper understanding of how Low-Latency HLS overcomes the limitations of HLS while preserving its strengths.</p>
<p>Thank you!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/ome.html" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine Website</a></li>
<li class=""><a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine GitHub</a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/docs/ome">OvenMediaEngine User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>Sub-Second Latency</category>
        </item>
        <item>
            <title><![CDATA[WebRTC: A New Paradigm for Real-Time Web Communication]]></title>
            <link>https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication</link>
            <guid>https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication</guid>
            <pubDate>Fri, 15 Nov 2024 08:41:00 GMT</pubDate>
            <description><![CDATA[OvenMediaEngine takes WebRTC’s limitations in stride to overcome them and deliver stable sub-second latency streaming for large audiences.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-Tz1I0NhSCeKPb_TKABWOqQ@2x-34c56e504fb859c41f5fb5481669cb50.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>In this blog series, we’ll explore how <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class=""><strong>OvenMediaEngine</strong></a> enables faster, more stable streaming experiences. Many of you have asked about the core egress protocols that make this possible, so we’ll be diving into WebRTC, Low Latency HLS (LL-HLS), and Legacy HLS. Whether you’re curious about sub-second latency or optimizing streaming for large audiences, this series will provide the insights you’re looking for.</p>
<!-- -->
<ul>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication"><strong>[Part1] WebRTC: A New Paradigm for Real-Time Web Communication</strong></a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls">[Part2] HLS: IS it Possible to Achieve Low-Latency Streaming with HLS?</a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/blog/low-latency-hls-the-era-of-flexible-low-latency-streaming">[Part3] Low-Latency HLS: The Era of Flexible Low-Latency Streaming</a></li>
</ul>
<p>Join us as we break down the essentials of modern streaming technology!</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-Tz1I0NhSCeKPb_TKABWOqQ@2x-34c56e504fb859c41f5fb5481669cb50.png" width="1489" height="1009" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-iswebrtc">What is&nbsp;WebRTC?<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#what-iswebrtc" class="hash-link" aria-label="Direct link to What is&nbsp;WebRTC?" title="Direct link to What is&nbsp;WebRTC?" translate="no">​</a></h2>
<p>As web technologies continue to evolve, our online experiences are constantly being redefined. One such groundbreaking technology is <strong>WebRTC</strong> (Web Real-Time Communication), which allows web browsers to communicate directly in real-time, without needing plugins.</p>
<p>Launched as an open-source project by Google in 2011, this technology enables direct <strong>Peer-to-Peer</strong> (P2P) communication for video, audio, and data transfer, reshaping online experiences by supporting video conferencing, live chatting, and remote collaboration with ease. With its seamless real-time transmission capabilities, WebRTC has redefined real-time web communication, making immediate and immersive interactions more accessible.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="components-ofwebrtc">Components of&nbsp;WebRTC<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#components-ofwebrtc" class="hash-link" aria-label="Direct link to Components of&nbsp;WebRTC" title="Direct link to Components of&nbsp;WebRTC" translate="no">​</a></h2>
<p>While WebRTC is a powerful and versatile technology, its complexity is carefully structured into key components. Understanding these will allow you to grasp the true capabilities of WebRTC.</p>
<ul>
<li class=""><strong>WebRTC API</strong>: The primary tool for developers, featuring APIs like <code>getUserMedia</code>, <code>RTCPeerConnection</code>, and <code>RTCDataChannel</code>, which facilitate camera and microphone access, establish connections and enable data transfer.</li>
<li class=""><strong>SDP (Session Description Protocol)</strong>: The ‘Blueprint’ for WebRTC connections, SDP negotiates and decides on formats, codecs, and encryption methods for communication, ensuring compatibility across different systems.</li>
<li class=""><strong>Audio Engine</strong>: Centered on the <strong>Opus codec</strong>, WebRTC’s audio engine delivers high-quality sound with low latency, efficiently adapting to various bitrates.</li>
<li class=""><strong>Video Engine</strong>: Supporting diverse codecs such as <strong>H.264, VP8, VP9</strong>, and <strong>AV1</strong>, the video engine reduces CPU usage and conserves battery by using hardware acceleration for video processing.</li>
<li class=""><strong>Transport Layer</strong>: Combining SRTP, DTLS, ICE, STUN, TURN, and FEC protocols, this layer ensures secure and fast data transmission even in challenging network conditions.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pros-and-cons-ofwebrtc">Pros and Cons of&nbsp;WebRTC<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#pros-and-cons-ofwebrtc" class="hash-link" aria-label="Direct link to Pros and Cons of&nbsp;WebRTC" title="Direct link to Pros and Cons of&nbsp;WebRTC" translate="no">​</a></h2>
<p>WebRTC is a revolutionary web communication technology that aims to deliver data for sub-second latency. Here’s a closer look at WebRTC’s strengths and limitations:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pros"><strong>Pros:</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#pros" class="hash-link" aria-label="Direct link to pros" title="Direct link to pros" translate="no">​</a></h3>
<ul>
<li class=""><strong>Real-Time Communication</strong>: WebRTC inherently supports bidirectional communication, making it a significant advantage for real-time interaction applications.</li>
<li class=""><strong>Broad Browser Support</strong>: Most major browsers, including Chrome and Firefox, support WebRTC natively, eliminating the need for plugins.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cons"><strong>Cons:</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#cons" class="hash-link" aria-label="Direct link to cons" title="Direct link to cons" translate="no">​</a></h3>
<ul>
<li class=""><strong>Scalability</strong>: Since WebRTC is P2P-based, additional architecture design may be required for sending a large stream to a large audience, such as in live streaming.</li>
<li class=""><strong>Firewall/NAT Issues</strong>: Establishing connections in some network environments can be challenging due to the need for complex mechanisms like ICE, STUN, and TURN.</li>
</ul>
<p>While WebRTC’s strengths make it excellent for <strong>small-scale real-time communication</strong>, its limitations are apparent when applied to large-scale streaming scenarios.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="webrtc-implementation-in-ovenmediaengine">WebRTC Implementation in OvenMediaEngine<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#webrtc-implementation-in-ovenmediaengine" class="hash-link" aria-label="Direct link to WebRTC Implementation in OvenMediaEngine" title="Direct link to WebRTC Implementation in OvenMediaEngine" translate="no">​</a></h2>
<p><a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> takes WebRTC’s limitations in stride, applying a range of technical innovations to overcome them and deliver stable, sub-second latency streaming for large audiences. <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> effectively preserves WebRTC’s real-time capabilities while enabling it to scale.</p>
<p>And, to achieve scalable WebRTC-based streaming, <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> offers a suite of sophisticated features designed to support stability, scalability, and seamless user experience in large-scale environments.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-vMCvNSNz-CGrUps07BRLeQ@2x-0c8a38388ec345bb6c4291adea08ef2a.png" width="1489" height="695" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sub-second-latency-streaming"><strong>Sub-Second Latency Streaming</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#sub-second-latency-streaming" class="hash-link" aria-label="Direct link to sub-second-latency-streaming" title="Direct link to sub-second-latency-streaming" translate="no">​</a></h3>
<ul>
<li class="">By leveraging WebRTC’s real-time capabilities, <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> enables sub-second latency streaming suitable for live commerce, sports broadcasts, gambling, and other applications where immediate interaction is essential.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="various-protocol-inputsupport"><strong>Various Protocol Input&nbsp;Support</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#various-protocol-inputsupport" class="hash-link" aria-label="Direct link to various-protocol-inputsupport" title="Direct link to various-protocol-inputsupport" translate="no">​</a></h3>
<ul>
<li class="">In addition to WebRTC, <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> supports input protocols such as <strong>WebRTC</strong>, <strong>WebRTC/TCP</strong>, <strong>WHIP</strong>, <strong>SRT</strong>, <strong>RTMP</strong>, <strong>MPEG-2 TS</strong>, and <strong>RTSP-Push</strong>. This makes it simple to integrate with existing streaming infrastructures, allowing different content sources to be repackaged into WebRTC and streamed in real-time to large audiences.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="embedded-live-transcoder"><strong>Embedded Live Transcoder</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#embedded-live-transcoder" class="hash-link" aria-label="Direct link to embedded-live-transcoder" title="Direct link to embedded-live-transcoder" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> seamlessly ingests various input protocols and converts them to WebRTC, enabling sub-second latency streaming with ease. While WebRTC does not support AAC codec, OvenMediaEngine’s live transcoder automatically encodes audio to Opus for full WebRTC compatibility.</li>
<li class="">Simulcast is a technology where the source (e.g., video encoder, device) sends multiple streams of different quality to the server. The server then chooses and forwards a stream to viewers based on their network conditions. While this approach can reduce server resource usage, it heavily relies on the source device’s resources and bandwidth, making it unsuitable or unstable in some cases. To address this, OvenMediaEngine’s live transcoder generates multiple quality streams directly on the server. This allows viewers to receive optimized streams based on their network conditions, even if the source device or encoder sends only a single video stream. This results in a more efficient and stable server-side ABR experience.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="adaptive-bitrate-streaming-abr"><strong>Adaptive Bitrate Streaming (ABR)</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#adaptive-bitrate-streaming-abr" class="hash-link" aria-label="Direct link to adaptive-bitrate-streaming-abr" title="Direct link to adaptive-bitrate-streaming-abr" translate="no">​</a></h3>
<ul>
<li class="">ABR dynamically adjusts stream quality according to network conditions, enabling smooth streaming across a wide range of devices and networks. This is especially beneficial for mobile viewers or those with unstable internet connections.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tcp-and-udp-transmission"><strong>TCP and UDP Transmission</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#tcp-and-udp-transmission" class="hash-link" aria-label="Direct link to tcp-and-udp-transmission" title="Direct link to tcp-and-udp-transmission" translate="no">​</a></h3>
<ul>
<li class="">While WebRTC typically uses UDP for low latency, <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> also supports TCP transport for scenarios where UDP is restricted, maintaining stable connectivity in challenging network environments.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="scalability"><strong>Scalability</strong><a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#scalability" class="hash-link" aria-label="Direct link to scalability" title="Direct link to scalability" translate="no">​</a></h3>
<ul>
<li class="">For large-scale viewership, <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> distributes traffic across multiple servers using load balancing, reducing individual server load and enhancing stability. This allows <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> to scale horizontally, serving high viewer numbers without compromising on quality or latency.</li>
</ul>
<p><a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> brings out the best in WebRTC by addressing its core limitations and transforming it into a powerful tool for large-scale, high-definition, and sub-second latency streaming. <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> has turned WebRTC from a peer-to-peer technology into a scalable streaming solution capable of serving massive audiences with real-time precision.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="optimized-webrtc-testing-on-ovenmediaengine">Optimized WebRTC Testing on OvenMediaEngine<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#optimized-webrtc-testing-on-ovenmediaengine" class="hash-link" aria-label="Direct link to Optimized WebRTC Testing on OvenMediaEngine" title="Direct link to Optimized WebRTC Testing on OvenMediaEngine" translate="no">​</a></h2>
<p>We conducted tests in two scenarios to evaluate the WebRTC performance of <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a>. The test results clearly demonstrate the real-world performance and efficiency of <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a>.</p>
<p>For the test, we used OBS Studio (Open Broadcaster Software), the most widely used open-source live encoder. In both the RTMP and WHIP transmitting scenarios, we applied the same Output Streaming Settings across each setup.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-5uLTnGl1YGG49NW44vQ_Sg-29f2d35a57a6b28cb55132fb8caa6da6.png" width="983" height="762" class="img_ev3q"></p>
<ul>
<li class=""><strong>Audio Encoder</strong>: FFmpeg AAC</li>
<li class=""><strong>Video Encoder</strong>: x264</li>
<li class=""><strong>Rate Control</strong>: CBR</li>
<li class=""><strong>Bitrate</strong>: 2500 Kbps</li>
<li class=""><strong>FPS</strong>: 30</li>
<li class=""><strong>Keyframe Interval</strong>: 2s</li>
<li class=""><strong>CPU Usage Preset</strong>: ultrafast</li>
<li class=""><strong>Profile</strong>: Baseline</li>
<li class=""><strong>Tune</strong>: zerolatency</li>
<li class=""><strong>x264 Options</strong>: scenecut=0, bframes=0</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="01-rtmp-to-webrtc-using-obs-and-ovenmediaengine">#01. RTMP to WebRTC using OBS and OvenMediaEngine<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#01-rtmp-to-webrtc-using-obs-and-ovenmediaengine" class="hash-link" aria-label="Direct link to #01. RTMP to WebRTC using OBS and OvenMediaEngine" title="Direct link to #01. RTMP to WebRTC using OBS and OvenMediaEngine" translate="no">​</a></h3>
<p>The first test scenario involved streaming RTMP input to WebRTC output.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-ZX0OkRY8WyiVqZ-Dm-DChw-aaf1836b749004781a454bb62808da85.png" width="983" height="762" class="img_ev3q"></p>
<ul>
<li class="">**RTMP Ingress URL: **<code>rtmp://&amp;lt;OvenMediaEngine IP&gt;[:RTMP Listen Port]/&amp;lt;App Name&gt;/&amp;lt;Stream Name&gt;</code></li>
<li class="">**Configure OvenMediaEngine: **Encode media sources ingested into OvenMediaEngine to <strong>Opus</strong> via the embedded live transcoder.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-bfyICyKPFqMv3WiQcMndtQ-f5ff17c388621c5dbe473407695002d7.png" width="1600" height="934" class="img_ev3q"></p>
<ul>
<li class=""><strong>Result</strong>: 7 frames (0.234 seconds) latency</li>
</ul>
<p>The notable result of this test is the very low latency of <strong>0.234 seconds</strong>, equivalent to 7 frames of 30fps video. This is highly suitable for real-time communication. Achieving sub-second latency with RTMP input demonstrates OvenMediaEngine’s efficient transcoding and WebRTC implementation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="02-whip-to-webrtc-using-obs-and-ovenmediaengine">#02. WHIP to WebRTC using OBS and OvenMediaEngine<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#02-whip-to-webrtc-using-obs-and-ovenmediaengine" class="hash-link" aria-label="Direct link to #02. WHIP to WebRTC using OBS and OvenMediaEngine" title="Direct link to #02. WHIP to WebRTC using OBS and OvenMediaEngine" translate="no">​</a></h3>
<p>The second test involved streaming WHIP (WebRTC-HTTP Ingestion Protocol) input to a WebRTC output. To transmit media sources via WHIP in OBS, you need to change the ‘<strong>Service</strong>’ option in Stream Settings to WHIP.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-evXRrkS4T6VMbpN_bwGLIg-5437ac4fbbf67dffbbebf720c2378b8f.png" width="983" height="762" class="img_ev3q"></p>
<ul>
<li class="">**WHIP Ingress URL: **<code>http[s://&amp;lt;OvenMediaEngine IP&gt;[:WebRTC Listen Port]/&amp;lt;App Name&gt;/&amp;lt;Stream Name&gt;?direction=whip</code></li>
<li class="">**Configure OvenMediaEngine: **When you select WHIP in OBS, the media source is sent to Opus, so there is no need to set it up separately in OvenMediaEngine.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-HSPW5m-DW7MwPJSntOxhng-64421d96be0aae2df58c4c5880b2333f.png" width="1600" height="934" class="img_ev3q"></p>
<ul>
<li class=""><strong>Result</strong>: 5 frames (0.167 seconds) latency</li>
</ul>
<p>This test showed even more impressive results, with a latency of 0.167 seconds, which is lower than the first test. At 5 frames of 30fps video, it is close to real-time latency. Using WHIP allows WebRTC to be used right at the input stage, reducing overall latency.</p>
<p>These tests demonstrate OvenMediaEngine’s ability to deliver sub-second latency streaming, regardless of the input protocol.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>WebRTC delivers outstanding sub-second latency, making it one of the best protocols for real-time streaming. However, when it comes to large-scale and high-definition streaming, WebRTC’s peer-to-peer nature presents inherent scalability challenges that make it difficult to support a vast audience. This is where <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> truly excels, offering a scalable solution that provides stable, sub-second latency even in large-scale and high-definition streaming environments.</p>
<p>However, WebRTC doesn’t integrate seamlessly with existing infrastructure, particularly Content Delivery Networks (CDNs), which are often optimized for HTTP-based protocols like HLS (HTTP Live Streaming). For this reason, most CDNs have not yet adopted WebRTC as part of their streaming infrastructure, as it lacks compatibility with current caching and distribution strategies. Consequently, alternative approaches, like Low Latency HLS (LL-HLS), are often recommended for scalable, low-latency streaming.</p>
<p>To understand LL-HLS, we’ll first need to look at how HLS works and the reasons it has become the standard for content distribution. In our next article, we’ll explore the structure and benefits of traditional HLS and reveal how much delay — *typically around 10 to 15 seconds *— can be reduced through optimization to support low-latency needs.</p>
<p>Stay tuned for a closer look at HLS, LL-HLS, and the steps to optimize for a latency-optimized streaming experience!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/webrtc-a-new-paradigm-for-real-time-web-communication#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/ome.html" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine Website</a></li>
<li class=""><a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine GitHub</a></li>
<li class=""><a class="" href="https://ovenmedialabs.com/docs/ome">OvenMediaEngine User Guide</a></li>
</ul>]]></content:encoded>
            <category>WebRTC</category>
        </item>
        <item>
            <title><![CDATA[OvenMediaEngine — Getting Started with OME Docker Launcher]]></title>
            <link>https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher</link>
            <guid>https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher</guid>
            <pubDate>Mon, 27 May 2024 07:02:20 GMT</pubDate>
            <description><![CDATA[To make this process even smoother, you can minimize the hassle by using our OME Docker Launcher!]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-z1ez34kIPE7FcUQaoddeWg-bd21e97d3f0d8ae295bbf8b523fa7df6.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>OvenMediaEngine is an open-source and sub-second latency streaming server capable of handling large-scale and high-definition streams. It can be installed and used in various environments, such as servers, CDNs, and Clouds. Today, we will show you how to easily use OvenMediaEngine by installing Docker on an AWS EC2 instance.</p>
<!-- -->
<p>To make this process even smoother, you can minimize the hassle by using our OME Docker Launcher.</p>
<p>The OME Docker Launcher is a tool that simplifies the process of deploying and managing the OvenMediaEngine application using Docker containers. This tool is designed for developers and system administrators who want to quickly deploy and test the OME application in a Docker environment.</p>
<p>Let’s start the OvenMediaEngine quick start guide now!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/MkfVfI--OT4" title="YouTube video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>
<p>Below are the commands and examples used in the video guide.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="aws-ec2-instancesetup">AWS EC2 Instance&nbsp;Setup<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#aws-ec2-instancesetup" class="hash-link" aria-label="Direct link to AWS EC2 Instance&nbsp;Setup" title="Direct link to AWS EC2 Instance&nbsp;Setup" translate="no">​</a></h2>
<p>For quick guidance, we opened all TCP ports 0–65535 when creating the EC2 Instance, but the default ports used by OvenMediaEngine are as follows. For more information, please refer to <a class="" href="https://ovenmedialabs.com/docs/ome/getting-started#ports-used-by-default"><strong>Ports used by default</strong></a> in the Getting Started sub-item of the OvenMediaEngine User Guide.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ports-used-bydefault">Ports used by&nbsp;default<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#ports-used-bydefault" class="hash-link" aria-label="Direct link to Ports used by&nbsp;default" title="Direct link to Ports used by&nbsp;default" translate="no">​</a></h3>
<ul>
<li class="">API (Manager) is configured to use 8081 (Port)</li>
<li class="">API (Manager) is configured to use 8082 (TLSPort)</li>
<li class="">RTMP Provider is configured to use 1935 (Port)</li>
<li class="">SRT Provider is configured to use 9999 (Port)</li>
<li class="">WebRTC Provider is configured to use 3333 (Port)</li>
<li class="">WebRTC Provider is configured to use 3334 (TLSPort)</li>
<li class="">WebRTC Provider is configured to use 10000–10004/UDP (IceCandidate)</li>
<li class="">WebRTC Provider is configured to use 3478 (TcpRelay)</li>
<li class="">OVT Publisher is configured to use 9000 (Port)</li>
<li class="">LLHLS Publisher is configured to use 3333 (Port)</li>
<li class="">LLHLS Publisher is configured to use 3334 (TLSPort)</li>
<li class="">WebRTC Publisher is configured to use 3333 (Port)</li>
<li class="">WebRTC Publisher is configured to use 3334 (TLSPort)</li>
<li class="">WebRTC Publisher is configured to use 10000–10004/UDP (IceCandidate)</li>
<li class="">WebRTC Publisher is configured to use 3478 (TcpRelay)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installing-docker-inec2">Installing Docker in&nbsp;EC2<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#installing-docker-inec2" class="hash-link" aria-label="Direct link to Installing Docker in&nbsp;EC2" title="Direct link to Installing Docker in&nbsp;EC2" translate="no">​</a></h2>
<p>The commands used to install Docker on an EC2 instance in the video guide are as follows:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Install Dqocker</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token variable" style="color:#d4d4d4">$sudo</span><span class="token plain"> yum </span><span class="token function" style="color:#7dd3fc">install</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">docker</span><span class="token plain"> </span><span class="token parameter variable" style="color:#d4d4d4">-y</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Run Docker</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">service</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">docker</span><span class="token plain"> start</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installing-ovenmediaengine-on-docker-inec2">Installing OvenMediaEngine on Docker in&nbsp;EC2<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#installing-ovenmediaengine-on-docker-inec2" class="hash-link" aria-label="Direct link to Installing OvenMediaEngine on Docker in&nbsp;EC2" title="Direct link to Installing OvenMediaEngine on Docker in&nbsp;EC2" translate="no">​</a></h2>
<p>For detailed steps, refer to the <a class="" href="https://ovenmedialabs.com/docs/ome/getting-started/getting-started-with-ome-docker-launcher"><strong>Getting Started with OME Docker Launcher</strong></a> guide, accessible under the Getting Started menu in the OME User Guide.</p>
<p>The commands used to install and run OvenMediaEngine in the video guide are as follows:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Run OME Docker Launcher</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:#d4d4d4">-OL</span><span class="token plain"> </span><span class="token string" style="color:#9ba4b4">'https://raw.githubusercontent.com/AirenSoft/OvenMediaEngine/master/misc/ome_docker_launcher.sh'</span><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">chmod</span><span class="token plain"> +x ome_docker_launcher.sh</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Show OME Docker Launcher help message</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> ./ome_docker_launcher.sh </span><span class="token parameter variable" style="color:#d4d4d4">-h</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Download the latest Docker image and setup</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> ./ome_docker_launcher.sh setup</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Start a docker container</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#d4d4d4">OME_HOST_IP</span><span class="token operator" style="color:#6e7681">=</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Instance_IP</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> ./ome_docker_launcher.sh start</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="broadcasting-with-obs-to-ovenmediaengine">Broadcasting with OBS to OvenMediaEngine<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#broadcasting-with-obs-to-ovenmediaengine" class="hash-link" aria-label="Direct link to Broadcasting with OBS to OvenMediaEngine" title="Direct link to Broadcasting with OBS to OvenMediaEngine" translate="no">​</a></h2>
<p>If you would like to know how to set up and use protocols that OvenMediaEngine can ingest, please refer to the <a class="" href="https://ovenmedialabs.com/docs/ome/live-source"><strong>Live Source</strong></a> subsection in the OvenMediaEngine User Guide.</p>
<p>The RTMP URL pattern used in this video guide is as follows:</p>
<ul>
<li class=""><strong>rtmp://&lt;Instance_IP&gt;:1935/app/&lt;Stream_Name&gt;</strong></li>
</ul>
<p>And to transmit the media source, I used X264 as an encoder and made detailed settings as follows:</p>
<ul>
<li class="">Bitrate: <strong>2500kbps</strong></li>
<li class="">Keyframe Interval: <strong>1s</strong></li>
<li class="">CPU Usage Preset: <strong>ultrafast</strong></li>
<li class="">Profile: <strong>main</strong></li>
<li class="">Tune: <strong>zerolatency</strong></li>
<li class="">x264 Options: <strong>bframes=0 threads=8</strong></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="streaming-playback">Streaming Playback<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#streaming-playback" class="hash-link" aria-label="Direct link to Streaming Playback" title="Direct link to Streaming Playback" translate="no">​</a></h2>
<p>When streaming through OvenMediaEngine, you may or may not have a certificate. Please refer to the information below. For more information, refer to the <a class="" href="https://ovenmedialabs.com/docs/ome/streaming"><strong>Streaming</strong></a> section in the OvenMediaEngine User Guide.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="without-tls">Without TLS<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#without-tls" class="hash-link" aria-label="Direct link to Without TLS" title="Direct link to Without TLS" translate="no">​</a></h3>
<ul>
<li class="">OvenPlayer Demo: <a href="http://demo.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class=""><strong>http://demo.ovenplayer.com</strong></a></li>
<li class="">WebRTC: <strong>ws://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;</strong></li>
<li class="">LLHLS: <strong>http://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;/llhls.m3u8</strong></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="with-tls">With TLS<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#with-tls" class="hash-link" aria-label="Direct link to With TLS" title="Direct link to With TLS" translate="no">​</a></h3>
<ul>
<li class="">OvenPlayer Demo: <a href="https://demo.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class=""><strong>https://demo.ovenplayer.com</strong></a></li>
<li class="">WebRTC: <strong>wss://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;</strong></li>
<li class="">LLHLS: <strong>https://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;/llhls.m3u8</strong></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-ovenmediaengine-options">Configuring OvenMediaEngine Options<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#configuring-ovenmediaengine-options" class="hash-link" aria-label="Direct link to Configuring OvenMediaEngine Options" title="Direct link to Configuring OvenMediaEngine Options" translate="no">​</a></h2>
<p>OvenMediaEngine operates according to Server.xml. Therefore, you need to know how to modify Server.xml to use the various functions provided by OvenMediaEngine. For guides for each function, please refer to the <a class="" href="https://ovenmedialabs.com/docs/ome"><strong>OvenMediaEngine User Guide</strong></a>.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Go to the folder where Server.xml is located</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token variable" style="color:#d4d4d4">$cd</span><span class="token plain"> /usr/share/ovenmediaengine/conf/</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Edit Server.xml</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">vi</span><span class="token plain"> Server.xml</span><br></div></code></pre></div></div>
<p>Also, if you modify Server.xml, you always need to turn OvenMediEngine on and off to apply it.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Stop OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> ./ome_docker_launcher.sh stop</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Start OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#d4d4d4">OME_HOST_IP</span><span class="token operator" style="color:#6e7681">=</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Instance_IP</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> ./ome_docker_launcher.sh start</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tls-encryption-certification">TLS Encryption (Certification)<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#tls-encryption-certification" class="hash-link" aria-label="Direct link to TLS Encryption (Certification)" title="Direct link to TLS Encryption (Certification)" translate="no">​</a></h2>
<p>To apply TLS to your OvenMediaEngine you have a domain. If you get a domain, you can easily use a certificate at no cost using Let’s Encrypt. For more information, see <a class="" href="https://ovenmedialabs.com/docs/ome/configuration/tls-encryption"><strong>TLS Encryption</strong></a>, a subtopic of Configuration in the OvenMediaEngine User Guide.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Install Certbot</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> yum </span><span class="token parameter variable" style="color:#d4d4d4">-y</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">install</span><span class="token plain"> certbot</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Certificate issuance</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> certbot certonly </span><span class="token parameter variable" style="color:#d4d4d4">--standalone</span><span class="token plain"> </span><span class="token parameter variable" style="color:#d4d4d4">-d</span><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Domain</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> </span><span class="token parameter variable" style="color:#d4d4d4">-m</span><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Email</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> --agree-tos  </span><span class="token parameter variable" style="color:#d4d4d4">-n</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Check whether the certificate was issued correctly</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#d4d4d4">-al</span><span class="token plain"> /etc/letsencrypt/live/</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Domain</span><span class="token operator" style="color:#6e7681">&gt;</span><br></div></code></pre></div></div>
<p>If your TLS certificate was issued properly, you will need to copy the certificate into the OvenMediaEngine directory to match the &lt;TLS&gt; entry within Server.xml.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">TLS</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">CertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">./cert.crt</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/CertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">KeyPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">./cert.key</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/KeyPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">ChainCertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">./cert.ca-bundle</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/ChainCertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/TLS</span><span class="token operator" style="color:#6e7681">&gt;</span><br></div></code></pre></div></div>
<p>Here’s how to copy these:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Copy and rename cert.pem to cert.crt </span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">cp</span><span class="token plain"> /etc/letsencrypt/live/</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Domain</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">/cert.pem /usr/share/ovenmediaengine/conf/cert.crt</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Copy and rename privkey.pem to cert.key</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">cp</span><span class="token plain"> /etc/letsencrypt/live/</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Domain</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">/privkey.pem /usr/share/ovenmediaengine/conf/cert.key</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Copy and rename fullchain.pem to cert.ca-bundle</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">cp</span><span class="token plain"> /etc/letsencrypt/live/</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Domain</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">/fullchain.pem /usr/share/ovenmediaengine/conf/cert.ca-bundle</span><br></div></code></pre></div></div>
<p>Next, check whether the certificate has been properly copied to the OvenMediaEngine directory. If confirmed, restart OvenMediaEngine to apply it.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Check the certificate has been copied properly</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token function" style="color:#7dd3fc">ls</span><span class="token plain"> </span><span class="token parameter variable" style="color:#d4d4d4">-al</span><span class="token plain"> /usr/share/ovenmediaengine/conf</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Stop OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> ./ome_docker_launcher.sh stop</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Start OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#d4d4d4">OME_HOST_IP</span><span class="token operator" style="color:#6e7681">=</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Instance_IP</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> ./ome_docker_launcher.sh start</span><br></div></code></pre></div></div>
<p>To verify that your certificate is working properly, stream using TLS.</p>
<ul>
<li class="">OvenPlayer Demo: <a href="https://demo.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class=""><strong>https://demo.ovenplayer.com</strong></a></li>
<li class="">WebRTC: <strong>wss://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;</strong></li>
<li class="">LLHLS: <strong>https://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;/llhls.m3u8</strong></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adaptive-bitrate-streaming-abr">Adaptive Bitrate Streaming (ABR)<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#adaptive-bitrate-streaming-abr" class="hash-link" aria-label="Direct link to Adaptive Bitrate Streaming (ABR)" title="Direct link to Adaptive Bitrate Streaming (ABR)" translate="no">​</a></h2>
<p>The example used in the video guide is below: Please refer to <a class="" href="https://ovenmedialabs.com/docs/ome/transcoding/abr#adaptive-bitrate-streaming-abr"><strong>Adaptive Bitrate Streaming (ABR)</strong></a> in the OvenMediaEngine User Guide for detailed information on the function.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">OutputProfile</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_stream</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">OutputStreamName</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token variable" style="color:#d4d4d4">${OriginStreamName}</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/OutputStreamName</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token operator" style="color:#6e7681">!</span><span class="token plain">--LLHLS URL </span><span class="token builtin class-name" style="color:#7dd3fc">:</span><span class="token plain"> https://domain/app/stream/abr.m3u8 --</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Playlist</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">For ABR</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">FileName</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">abr</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/FileName</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Options</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token operator" style="color:#6e7681">!</span><span class="token plain">-- Optinal --</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token operator" style="color:#6e7681">!</span><span class="token plain">-- </span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   Automatically switch rendition </span><span class="token keyword" style="color:#38bdf8">in</span><span class="token plain"> WebRTC ABR </span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token punctuation" style="color:#6e7681">[</span><span class="token plain">Default</span><span class="token punctuation" style="color:#6e7681">]</span><span class="token plain"> </span><span class="token builtin class-name" style="color:#7dd3fc">:</span><span class="token plain"> </span><span class="token boolean" style="color:#c5a38e">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   --</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">WebRtcAutoAbr</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">true</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/WebRtcAutoAbr</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Options</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">Bypass</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_video</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">FHD</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_192</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">HD</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_72</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">SD</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_48</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">FHD_Opus</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_192</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">opus_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">HD_Opus</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_72</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">opus_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">SD_Opus</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_48</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">opus_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Playlist</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token operator" style="color:#6e7681">!</span><span class="token plain">--LLHLS URL </span><span class="token builtin class-name" style="color:#7dd3fc">:</span><span class="token plain"> https://domain/app/stream/llhls.m3u8 --</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Playlist</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">Change Default</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">FileName</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">llhls</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/FileName</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">HD</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_72</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Rendition</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Playlist</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Encodes</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Bypass</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">true</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Bypass</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">bypass_video</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Bypass</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">true</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Bypass</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">opus_audio</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">opus</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">12800</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Samplerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">4800</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Samplerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Channel</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token operator file-descriptor important" style="color:#38bdf8">2</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Channel</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Audio</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_192</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">h26</span><span class="token operator file-descriptor important" style="color:#38bdf8">4</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">102400</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Framerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">3</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Framerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Width</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">192</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Width</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Height</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">108</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Height</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Preset</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">faster</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Preset</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_72</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">h26</span><span class="token operator file-descriptor important" style="color:#38bdf8">4</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">72400</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Framerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">3</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Framerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Width</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">128</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Width</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Height</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">72</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Height</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Preset</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">faster</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Preset</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">video_48</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">h26</span><span class="token operator file-descriptor important" style="color:#38bdf8">4</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Codec</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">22400</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Bitrate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Framerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">3</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Framerate</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Width</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">72</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Width</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Height</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token number" style="color:#c5a38e">48</span><span class="token operator file-descriptor important" style="color:#38bdf8">0</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Height</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Preset</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">faster</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Preset</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Video</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Encodes</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/OutputProfile</span><span class="token operator" style="color:#6e7681">&gt;</span><br></div></code></pre></div></div>
<p>Now that Server.xml has been modified you must restart OvenMediaEngine.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Stop OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> ./ome_docker_launcher.sh stop</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Start OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#d4d4d4">OME_HOST_IP</span><span class="token operator" style="color:#6e7681">=</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Instance_IP</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> ./ome_docker_launcher.sh start</span><br></div></code></pre></div></div>
<p>Create a streaming URL pattern as shown below according to the title specified in &lt;FileName&gt; in &lt;OutputProfile&gt; and then proceed with the ABR test.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="without-tls-1">Without TLS<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#without-tls-1" class="hash-link" aria-label="Direct link to Without TLS" title="Direct link to Without TLS" translate="no">​</a></h3>
<ul>
<li class="">OvenPlayer Demo: <a href="http://demo.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class=""><strong>http://demo.ovenplayer.com</strong></a></li>
<li class="">WebRTC: <strong>ws://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;/&lt;FileName&gt;</strong></li>
<li class="">LLHLS: <strong>http://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;/&lt;FileName&gt;.m3u8</strong></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="with-tls-1">With TLS<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#with-tls-1" class="hash-link" aria-label="Direct link to With TLS" title="Direct link to With TLS" translate="no">​</a></h3>
<ul>
<li class="">OvenPlayer Demo: <a href="https://demo.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class=""><strong>https://demo.ovenplayer.com</strong></a></li>
<li class="">WebRTC: <strong>wss://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;/&lt;FileName&gt;</strong></li>
<li class="">LLHLS: <strong>https://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;/&lt;FileName&gt;.m3u8</strong></li>
</ul>
<p>If the stream plays successfully, hover your mouse over OvenPlayer and click the gear icon at the bottom left of the displayed controller to see if the list you specified in &lt;Rendition&gt; is displayed.</p>
<p>When writing &lt;OutputProfile&gt; to use ABR, an important point to keep in mind is that if the protocol and codec do not match as listed below, it may not be played due to browser policy:</p>
<ul>
<li class="">WebRTC: <strong>VP8, H.264, Opus</strong></li>
<li class="">LLHLS: <strong>H.264, AAC</strong></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="rest-api">REST API<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#rest-api" class="hash-link" aria-label="Direct link to REST API" title="Direct link to REST API" translate="no">​</a></h2>
<p>Please refer to <a class="" href="https://ovenmedialabs.com/docs/ome/rest-api"><strong>REST API</strong></a> in the OvenMediaEngine User Guide. This guide explains Server.xml items in detail and includes examples.</p>
<p>In this video guide, we uncommented &lt;Bind&gt; in Server.xml and added 8082/TLS.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Bind</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Managers</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">API</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Port</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token variable" style="color:#d4d4d4">${env</span><span class="token variable operator" style="color:#6e7681">:</span><span class="token variable" style="color:#d4d4d4">OME_APIT_PORT</span><span class="token variable operator" style="color:#6e7681">:</span><span class="token variable" style="color:#d4d4d4">8081}</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Port</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">TLSPort</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token variable" style="color:#d4d4d4">${env</span><span class="token variable operator" style="color:#6e7681">:</span><span class="token variable" style="color:#d4d4d4">OME_APIT_PORT</span><span class="token variable operator" style="color:#6e7681">:</span><span class="token variable" style="color:#d4d4d4">8082}</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/TLSPort</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">WorkerCount</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token operator file-descriptor important" style="color:#38bdf8">1</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/WorkerCount</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/API</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Managers</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token punctuation" style="color:#6e7681">..</span><span class="token plain">.</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Bind</span><span class="token operator" style="color:#6e7681">&gt;</span><br></div></code></pre></div></div>
<p>And according to the OvenMediaEngine User Guide, I inserted the &lt;Manager&gt; example under &lt;Bind&gt;. Afterward, I matched the file name in &lt;TLS&gt;, entered the ID and password to be used in &lt;AccessToken&gt;, and modified &lt;CrossDomains&gt; to allow all. If you want to use &lt;AccessToken&gt;, you have to follow the format ID<!-- -->:Password<!-- -->.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Managers</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Host</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Names</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">*</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Name</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Names</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">TLS</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">CertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">./cert.crt</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/CertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">KeyPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">./cert.key</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/KeyPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">ChainCertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">./cert.ca-bundle</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/ChainCertPath</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/TLS</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Host</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">API</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">AccessToken</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">ID:Password</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/AccessToken</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">CrossDomains</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">    </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Url</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain">*</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Url</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">   </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/CrossDomains</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/API</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">/Managers</span><span class="token operator" style="color:#6e7681">&gt;</span><br></div></code></pre></div></div>
<p>When you are finished editing Server.xml, restart OvenMediaEngine again so that OvenMediaEngine can read the modified Server.xml.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token comment" style="color:#6e7681;font-style:italic"># Stop OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> ./ome_docker_launcher.sh stop</span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token comment" style="color:#6e7681;font-style:italic"># Start OvenMediaEngine</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">$ </span><span class="token function" style="color:#7dd3fc">sudo</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#d4d4d4">OME_HOST_IP</span><span class="token operator" style="color:#6e7681">=</span><span class="token operator" style="color:#6e7681">&lt;</span><span class="token plain">Instance_IP</span><span class="token operator" style="color:#6e7681">&gt;</span><span class="token plain"> ./ome_docker_launcher.sh start</span><br></div></code></pre></div></div>
<p>Restart OvenMediaEngine, and in the displayed dashboard, check that the API-related ports are recognized properly.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token plain">API </span><span class="token punctuation" style="color:#6e7681">(</span><span class="token plain">Manager</span><span class="token punctuation" style="color:#6e7681">)</span><span class="token plain"> is configured to use </span><span class="token number" style="color:#c5a38e">8081</span><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">(</span><span class="token plain">Port</span><span class="token punctuation" style="color:#6e7681">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">API </span><span class="token punctuation" style="color:#6e7681">(</span><span class="token plain">Manager</span><span class="token punctuation" style="color:#6e7681">)</span><span class="token plain"> is configured to use </span><span class="token number" style="color:#c5a38e">8082</span><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">(</span><span class="token plain">TLSPort</span><span class="token punctuation" style="color:#6e7681">)</span><br></div></code></pre></div></div>
<p>Then, let’s call the API according to the API request pattern.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="without-tls-2">Without TLS<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#without-tls-2" class="hash-link" aria-label="Direct link to Without TLS" title="Direct link to Without TLS" translate="no">​</a></h3>
<ul>
<li class=""><strong>http://&lt;Instance_IP&gt;:8081/v1/&lt;Resource&gt;</strong></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="with-tls-2">With TLS<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#with-tls-2" class="hash-link" aria-label="Direct link to With TLS" title="Direct link to With TLS" translate="no">​</a></h3>
<ul>
<li class=""><strong>https://&lt;Domain&gt;:8082/v1/&lt;Resource&gt;</strong></li>
</ul>
<p>Please refer to the <a class="" href="https://ovenmedialabs.com/docs/ome/rest-api/v1"><strong>REST API (v1)</strong></a> section in the OvenMediaEngine User Guide. It is written in detail about API resources, action names, reactions, etc.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/ovenmediaengine-getting-started-with-ome-docker-launcher#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>With just a few commands, you can build your own fully-featured sub-second latency streaming server. Experience low latency streaming right now. While OvenMediaEngine has an array of features that we couldn’t cover entirely in this video guide, we hope our guide has been helpful to you.</p>
<p>Thank you for watching and reading.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-z1ez34kIPE7FcUQaoddeWg-bd21e97d3f0d8ae295bbf8b523fa7df6.png" width="1449" height="1169" class="img_ev3q"></p>]]></content:encoded>
            <category>OvenMediaEngine</category>
            <category>Tutorial</category>
        </item>
        <item>
            <title><![CDATA[How to transmit Low-Latency Streaming to broader viewers and share securely?]]></title>
            <link>https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely</link>
            <guid>https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely</guid>
            <pubDate>Wed, 03 Jan 2024 10:05:16 GMT</pubDate>
            <description><![CDATA[Do you want to provide low-latency streaming to a large audience or share it exclusively with authorized viewers?]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-JdJom5ts2XHECXlRNYUsew@2x-c069d49cf35a728895e6cf719b6c46fe.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><strong>Do you want to provide stable and low-latency streaming to hundreds of thousands of viewers?</strong> Or perhaps, <strong>do you wish to share your low-latency stream only with authorized viewers?</strong></p>
<!-- -->
<p>These concerns can be addressed by seamlessly integrating <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> with **AWS CloudFront <strong>(CDN)</strong> **and <strong>Signed URL</strong>. While traditionally, connecting a streaming server with a CDN requires complexity and specialized knowledge, using <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> automates the entire process.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-JdJom5ts2XHECXlRNYUsew@2x-c069d49cf35a728895e6cf719b6c46fe.png" width="1600" height="1600" class="img_ev3q"></p>
<p>In this blog post, we provide step-by-step instructions on how to effortlessly set up integration with AWS CloudFront in just a few clicks. We also guide you on utilizing features such as the Signed URL, allowing you to share or restrict access as needed. Explore how <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> simplifies the integration with AWS CloudFront, making it a breeze.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-aws-cloudfront">What is AWS CloudFront?<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#what-is-aws-cloudfront" class="hash-link" aria-label="Direct link to What is AWS CloudFront?" title="Direct link to What is AWS CloudFront?" translate="no">​</a></h2>
<p>AWS CloudFront, part of Amazon Web Services (AWS), serves as a Content Delivery Network (CDN) designed to deliver web content rapidly and reliably worldwide. OvenStudio LLHLS currently leverages AWS services (with future support for platforms like Azure), providing an option for expanding your streaming service or distributing traffic efficiently through CDN.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-cdn-content-delivery-network"><em>What is CDN (Content Delivery Network)?</em><a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#what-is-cdn-content-delivery-network" class="hash-link" aria-label="Direct link to what-is-cdn-content-delivery-network" title="Direct link to what-is-cdn-content-delivery-network" translate="no">​</a></h3>
<p>A Content Delivery Network (CDN) is a system that efficiently transmits content globally by utilizing servers distributed across different geographical locations. The purpose is to provide users with fast and reliable service by dispersing and distributing web content, be it static (scripts, images) or dynamic (streaming videos, audio).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="advantages-ofcdn">Advantages of&nbsp;CDN:<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#advantages-ofcdn" class="hash-link" aria-label="Direct link to Advantages of&nbsp;CDN:" title="Direct link to Advantages of&nbsp;CDN:" translate="no">​</a></h3>
<ul>
<li class=""><strong>Swift Transmission</strong>: Caching content at edge locations facilitates rapid content delivery.</li>
<li class=""><strong>Scalability</strong>: Easily scales servers to accommodate increased traffic, suitable for large-scale streaming services.</li>
<li class=""><strong>Security</strong>: Supports encryption via SSL/TLS, ensuring secure data transmission.</li>
<li class=""><strong>Cost-Efficiency</strong>: Efficiently utilizes bandwidth and resources, resulting in cost savings.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-cdn-in-streaming-servers">Why CDN in Streaming Servers?<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#why-cdn-in-streaming-servers" class="hash-link" aria-label="Direct link to Why CDN in Streaming Servers?" title="Direct link to Why CDN in Streaming Servers?" translate="no">​</a></h3>
<p>CDNs play a crucial role in delivering a consistent, high-quality streaming experience globally. Leveraging CDN services, especially for dynamic content like streaming, ensures users receive a seamless experience regardless of their location. Additionally, content providers can easily respond to increasing traffic through CDN expansion, enabling stable service provision.</p>
<p>In our upcoming blog post, we provide a step-by-step guide on effortlessly integrating <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> with AWS CloudFront. Whether you’re looking to enhance your streaming delivery or explore advanced features, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> makes the process user-friendly, saving you time and effort. Stay tuned for our comprehensive guide, and feel free to reach out with any further inquiries.</p>
<p><em>※ Note: This guide will be updated to accommodate integration with other CDNs besides AWS CloudFront in the future.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-a-signedurl">What is a Signed&nbsp;URL?<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#what-is-a-signedurl" class="hash-link" aria-label="Direct link to What is a Signed&nbsp;URL?" title="Direct link to What is a Signed&nbsp;URL?" translate="no">​</a></h2>
<p>A Signed URL in <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> encrypts the URL used for media transmission between the streaming server and the viewer during streaming. This URL is valid for a specific period, and only authenticated users with the appropriate permissions can access the streaming via this URL.</p>
<p>OvenStudio LLHLS administrators can share encrypted URLs valid for a specified time, preventing unauthorized access to the streaming media source and safeguarding against leaks.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="additionally-using-the-signed-url-in-ovenstudio-llhls">Additionally, Using the Signed URL in OvenStudio LLHLS:<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#additionally-using-the-signed-url-in-ovenstudio-llhls" class="hash-link" aria-label="Direct link to Additionally, Using the Signed URL in OvenStudio LLHLS:" title="Direct link to Additionally, Using the Signed URL in OvenStudio LLHLS:" translate="no">​</a></h3>
<p>Even with expert knowledge, integrating CDN services into a streaming service and managing the associated procedures can be cumbersome and complex. OvenStudio LLHLS simplifies these intricate processes with just a few clicks. You can seamlessly integrate AWS CloudFront (CDN) with OvenStudio LLHLS and leverage its features. Of course, if you wish to integrate other CDNs besides AWS CloudFront, OvenStudio LLHLS makes that possible too. Details will be provided in a future guide update.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-utilize-the-signed-urlfeature">How to Utilize the Signed URL&nbsp;Feature?<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#how-to-utilize-the-signed-urlfeature" class="hash-link" aria-label="Direct link to How to Utilize the Signed URL&nbsp;Feature?" title="Direct link to How to Utilize the Signed URL&nbsp;Feature?" translate="no">​</a></h3>
<ul>
<li class=""><strong>Closed Live Streaming Service</strong>: With the Signed URL, content providers can grant access to video streams exclusively to subscribers, allowing the implementation of a subscription model.</li>
<li class=""><strong>Copyright Protection</strong>: Signed URL prevents unauthorized copying and distribution of content, providing a safeguard for copyright protection.</li>
<li class="">Activities such as Online courses, Live forums, Webinars, Sports broadcasts, Online auctions, Internal previews, and more can benefit from these functionalities.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="setting-up-signed-url-in-ovenstudio-llhls">Setting Up Signed URL in OvenStudio LLHLS:<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#setting-up-signed-url-in-ovenstudio-llhls" class="hash-link" aria-label="Direct link to Setting Up Signed URL in OvenStudio LLHLS:" title="Direct link to Setting Up Signed URL in OvenStudio LLHLS:" translate="no">​</a></h2>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> makes it incredibly simple to configure and use the Signed URL feature with AWS CloudFront. Follow these steps:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="connect-with-aws-cloudfront-signedurl"><strong>Connect with AWS CloudFront (Signed&nbsp;URL):</strong><a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#connect-with-aws-cloudfront-signedurl" class="hash-link" aria-label="Direct link to connect-with-aws-cloudfront-signedurl" title="Direct link to connect-with-aws-cloudfront-signedurl" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-8YFP_7DJNIpkqDP73VqnaA-136a087e88717c8fbcf73630fa5f388e.png" width="1600" height="900" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-rXuGNXgYRzEO2CzCSJOqMA-7a5f7171720a9e6ded1359c05172da92.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">Click the <strong>[Settings]</strong> icon in the top right corner of OvenStudio LLHLS and select <strong>[AWS CloudFront]</strong> from the left menu to navigate to the AWS Credentials setup page.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-6UeogbyPTNKUSRQTMitaeA-1a58eb10e57f5b46ea2593d5b2d4bde8.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">Enter the issued Access Key ID and Secret Access Key into <strong>[AWS Credentials]</strong> and click <strong>[Save Credentials]</strong> to apply. Learn how to obtain Access Key ID and Secret Access Key — <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey" target="_blank" rel="noopener noreferrer" class=""><em>AWS Identity and Access Management User Guide</em></a>.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-6G49PPSwwiCKbf-8p_RPLQ-1e9c54cec2f69c30907b67cf689c708a.png" width="1600" height="900" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-ZA1UKsYHkAhzrTNpbB44Mw-053467f757c5654e4d4c58177763342b.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">In the <strong>[Distribution Information]</strong> section on the same page, click the <strong>[Refresh]</strong> icon to verify and load your AWS CloudFront information. To apply this to the OvenStudio LLHLS system, click <strong>[Enable Distribution]</strong>. Upon successful connection, the status item will change to ‘Enabled’.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-m6CpPSO26rzpAtIdJBNHKg-2302130cd67683560814ee279ca41a23.png" width="1600" height="900" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-wKPOodG2oFXjXB_jErDXeg-1ed83bd142448bff26c625b48055a35a.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">Finally, on the same page, activate the <strong>[Signed URL]</strong> toggle to transition streaming URLs deployed through OvenStudio LLHLS to Secure URLs.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="renewing-signed-url-in-case-ofleakage">Renewing Signed URL in Case of&nbsp;Leakage<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#renewing-signed-url-in-case-ofleakage" class="hash-link" aria-label="Direct link to Renewing Signed URL in Case of&nbsp;Leakage" title="Direct link to Renewing Signed URL in Case of&nbsp;Leakage" translate="no">​</a></h2>
<p>Signed URLs are valid for a specific period (e.g., 1 hour). Once this period expires, the URL becomes invalid. However, if a URL is leaked while still valid, follow these steps to renew it:</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-GiP7SfFs5AjpeYUaSBKyVQ-3c0dca134a4e6505f78670d429f71f5d.png" width="1600" height="900" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1--PLHQ_iMy67CeFgNsr9vnw-6a410796b22e56ff78247fd58e63d763.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">On the main page of OvenStudio LLHLS, click on the streaming box to enter the streaming details view. Then, click on the <strong>[URLs]</strong> tab.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-rrvp4237OGO0PPf1nuBLkA-24bfe86a1194f8f11e87604c581b85f3.png" width="1600" height="900" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="When comparing the URL before and after refreshing, you can observe a change in the Auth syntax of the Signed Edge&nbsp;URL." src="https://ovenmedialabs.com/assets/images/1-2M0rmKTz2C0I8FKrd1PFHg-fc142f488be6c6296ff5dbc35e037981.png" width="1046" height="558" class="img_ev3q"></p>
<p><em>When comparing the URL before and after refreshing, you can observe a change in the Auth syntax of the Signed Edge&nbsp;URL.</em></p>
<ul>
<li class=""><strong>[Refresh]</strong> your browser to update the Signed Edge URL.</li>
</ul>
<p><em>※ Note: The default expiration time of the Signed URL may be subject to change based on user needs and behavior in the future.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-the-signed-url-viaapi">Using the Signed URL via&nbsp;API<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#using-the-signed-url-viaapi" class="hash-link" aria-label="Direct link to Using the Signed URL via&nbsp;API" title="Direct link to Using the Signed URL via&nbsp;API" translate="no">​</a></h2>
<p>You can utilize an API to apply detailed options for individual streaming units with the Signed URL —For more information, please refer to the <a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/rest-api/access-token" target="_blank" rel="noopener noreferrer" class=""><strong>Access Token</strong></a> in the OvenStudio LLHLS’s User Guide.&nbsp;:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="issuing-accesstokens"><strong>Issuing Access&nbsp;Tokens:</strong><a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#issuing-accesstokens" class="hash-link" aria-label="Direct link to issuing-accesstokens" title="Direct link to issuing-accesstokens" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-8YFP_7DJNIpkqDP73VqnaA-136a087e88717c8fbcf73630fa5f388e.png" width="1600" height="900" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-Dc2ryhK_f_dc4ffc0Wew9Q-82ff1d1e4c2e9468c9fdaae04899169b.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">First, access OvenStudio LLHLS, enter the** [Settings]** screen, and select <strong>[REST API]</strong> from the left menu.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-O19MqnZHBAQjPp510hFCwQ-15726b7b2910e48e7daa529193d58d6f.png" width="1600" height="900" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-03hN5LRmoPSH7OTbXN6aKQ-ac3c66890d7e0d8c70b2dafb4e1e8964.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">Under** [REST API]**, in the **[Tokens] **section, click <strong>[Generate new token]</strong> to acquire an access token.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="parameter-descriptions"><strong>Parameter Descriptions:</strong><a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#parameter-descriptions" class="hash-link" aria-label="Direct link to parameter-descriptions" title="Direct link to parameter-descriptions" translate="no">​</a></h3>
<p>The Signed URL API is straightforwardly configured — In the OvenStudio LLHLS’s User Guide, detailed content is covered in the section labeled <a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/v1/signed-url#body-parameters" target="_blank" rel="noopener noreferrer" class=""><strong>Body Parameters</strong> of Signed URL</a>.”</p>
<ul>
<li class=""><strong>“stream_name”</strong> requires the name of the streaming box for which the Signed URL is generated.</li>
<li class=""><strong>“date_less_than”</strong> ensures the URL is valid until a specified date and time, and this parameter is mandatory.</li>
<li class=""><strong>“date_grater_than”</strong> makes the URL valid from a specified date and time.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="examples"><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/v1/signed-url#examples" target="_blank" rel="noopener noreferrer" class="">Examples</a>:<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#examples" class="hash-link" aria-label="Direct link to examples" title="Direct link to examples" translate="no">​</a></h3>
<ul>
<li class="">To create a Signed URL for the streaming named OvenStudio, valid until January 1, 2024, 00:00:00 (UTC).</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token punctuation" style="color:#6e7681">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token property" style="color:#d4d4d4">"stream"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token property" style="color:#d4d4d4">"stream_name"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token string" style="color:#9ba4b4">"OvenStudio"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">}</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token property" style="color:#d4d4d4">"policy"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token property" style="color:#d4d4d4">"date_less_than"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token string" style="color:#9ba4b4">"2024-01-01T00:00:00Z"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token punctuation" style="color:#6e7681">}</span><br></div></code></pre></div></div>
<ul>
<li class="">To create a Signed URL for the streaming named OvenStudio_Xmas, valid from December 24, 2023, 00:00:00 to December 26, 2023, 00:00:00 (UTC).</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d4d4d4;--prism-background-color:#0d1117"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#d4d4d4;background-color:#0d1117"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d4d4d4"><span class="token punctuation" style="color:#6e7681">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token property" style="color:#d4d4d4">"stream"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token property" style="color:#d4d4d4">"stream_name"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token string" style="color:#9ba4b4">"OvenStudio_Xmas"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">}</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token property" style="color:#d4d4d4">"policy"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token property" style="color:#d4d4d4">"date_less_than"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token string" style="color:#9ba4b4">"2023-12-26T00:00:00Z"</span><span class="token punctuation" style="color:#6e7681">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain">  </span><span class="token property" style="color:#d4d4d4">"date_greater_than"</span><span class="token operator" style="color:#6e7681">:</span><span class="token plain"> </span><span class="token string" style="color:#9ba4b4">"2023-12-24T00:00:00Z"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"> </span><span class="token punctuation" style="color:#6e7681">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d4d4d4"><span class="token plain"></span><span class="token punctuation" style="color:#6e7681">}</span><br></div></code></pre></div></div>
<p>“date_greater_than” is a directive that defines the URL’s validity starting from the specified time. When used as in the example, the URL can be accessed from December 24, 2023, 00:00:00 UTC onwards.</p>
<p>You can find comprehensive details in the OvenStudio LLHLS’s User Guide under the <a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/v1/signed-url" target="_blank" rel="noopener noreferrer" class=""><strong>Signed URL</strong></a> section.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> minimizes cumbersome processes to alleviate your concerns. If you need to distribute your streaming to a wider audience, simply integrate with AWS CloudFront with just a few clicks — <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> makes it possible.</p>
<p>Moreover, if you wish to share your streaming with specific individuals only, activate the toggle button to enable the Signed URL. It provides security and flexibility for streaming service providers, enhancing service efficiency by protecting content and allowing access only to valid users.</p>
<p>Always, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> offers the easiest and most effective options to support seamless, secure, and low-latency streaming in your service — Elevate your service with the easiest and most effective options, enabling larger audiences to enjoy a seamless, secure, and low-latency streaming experience. Join us in the future of low-latency streaming with <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>Sub-Second Latency</category>
        </item>
        <item>
            <title><![CDATA[How to use ABR Streaming in OvenStudio LLHLS?]]></title>
            <link>https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls</link>
            <guid>https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls</guid>
            <pubDate>Thu, 07 Dec 2023 11:10:29 GMT</pubDate>
            <description><![CDATA[OvenStudio LLHLS delivers ABR efficiently, providing streaming with a latency of less than 3 seconds while supporting all these benefits.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-reoaVyM-7dkuMomcDmmi0w@2x-f8cac4f762fa1ae55a0704f1660ea29a.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>Live streaming has grown rapidly to the point where it has become a part of many people’s daily lives. This growth is further accelerated due to the increasing demand for online media consumption by users.</p>
<!-- -->
<p>Consequently, streaming service providers are striving to understand the diverse viewing environments of viewers worldwide in order to provide the best viewing experience while efficiently utilizing bandwidth to reduce server load through technological solutions.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-reoaVyM-7dkuMomcDmmi0w@2x-f8cac4f762fa1ae55a0704f1660ea29a.png" width="1648" height="1655" class="img_ev3q"></p>
<p><strong>ABR (<em>Adaptive Bitrate</em>)</strong> **Streaming **is one of the responses to these challenges, dynamically adjusting bitrate, resolution, and framerate considering network conditions and user device performance. This allows viewers to experience uninterrupted streaming in any environment while streaming service providers efficiently use bandwidth to cut costs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="advantages-ofabr">Advantages of&nbsp;ABR<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#advantages-ofabr" class="hash-link" aria-label="Direct link to Advantages of&nbsp;ABR" title="Direct link to Advantages of&nbsp;ABR" translate="no">​</a></h2>
<ul>
<li class=""><strong>Improved User Experience</strong>: ABR provides stable streaming tailored to network changes and viewer device performance, offering users a high-quality experience.</li>
<li class=""><strong>Traffic Efficiency</strong>: ABR efficiently utilizes bandwidth, optimizing network traffic.</li>
<li class=""><strong>Reaching a Larger Audience</strong>: ABR enables streaming in diverse environments, allowing streamed content to reach a broader audience.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-can-abr-beapplied">Where Can ABR Be&nbsp;Applied?<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#where-can-abr-beapplied" class="hash-link" aria-label="Direct link to Where Can ABR Be&nbsp;Applied?" title="Direct link to Where Can ABR Be&nbsp;Applied?" translate="no">​</a></h2>
<p>ABR becomes highly valuable when one or more streamers need to stream to an unspecified large audience within a single session. This is because the streaming environments of numerous viewers can vary significantly. Conditions and variables such as location, weather, network, devices, and browsers are more diverse than you might think.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-does-ovenstudio-llhls-provideabr">How Does OvenStudio LLHLS Provide&nbsp;ABR?<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#how-does-ovenstudio-llhls-provideabr" class="hash-link" aria-label="Direct link to How Does OvenStudio LLHLS Provide&nbsp;ABR?" title="Direct link to How Does OvenStudio LLHLS Provide&nbsp;ABR?" translate="no">​</a></h2>
<ul>
<li class=""><strong>Embedded Live Transcoder</strong>: <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> has embedded a live transcoder that allows encoding of the same media source into various bitrates, resolutions, and frame rates.</li>
<li class=""><strong>ABR Profiles</strong>: <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> users can choose from multiple encoding presets to enable ABR. These profiles offer presets ranging from low bitrates and resolutions to high bandwidth options, based on collecting various user data. You can easily adjust the viewer experience by selecting the desired presets with just a few clicks.</li>
<li class=""><strong>Dynamic Streaming</strong>: <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> real-time transforms the media source based on the configured profiles, sending the required LLHLS segments for streaming. If you use OvenPlayer, it continuously monitors viewer network conditions and device performance, requesting the appropriate profile from OvenStudio LLHLS.</li>
<li class=""><strong>Automatic Profile Switching</strong>: When changes are detected in network speed and stability, <a href="https://github.com/AirenSoft/OvenPlayer" target="_blank" rel="noopener noreferrer" class="">OvenPlayer</a> automatically switches profiles to ensure uninterrupted streaming. Of course, viewers can also select resolutions directly in <a href="https://github.com/AirenSoft/OvenPlayer" target="_blank" rel="noopener noreferrer" class="">OvenPlayer</a>.</li>
</ul>
<p>In summary, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> provides ABR functionality, dynamically adjusting bitrate and resolution based on network conditions and device performance to offer uninterrupted high-quality streaming. We recommend using <a href="https://github.com/AirenSoft/OvenPlayer" target="_blank" rel="noopener noreferrer" class="">OvenPlayer</a>, optimized for <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>, to provide a smoother streaming experience.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cant-use-abr-with-low-latency-streaming">Can’t use ABR with Low-Latency Streaming?<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#cant-use-abr-with-low-latency-streaming" class="hash-link" aria-label="Direct link to Can’t use ABR with Low-Latency Streaming?" title="Direct link to Can’t use ABR with Low-Latency Streaming?" translate="no">​</a></h2>
<p><strong>Not at all</strong>.</p>
<p>Some users have had concerns that using ABR to deliver multiple profiles could make streaming heavier and prevent low-latency streaming. While this might be the case for some lower-quality streaming servers, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> smoothly delivers ABR with a latency of less than 3 seconds. <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>’ ABR feature encodes media sources into multiple bitrates and resolutions, dynamically providing the appropriate profile based on viewer network conditions and device performance. This enhances streaming stability and quality, especially in slow or unstable network environments.</p>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>’ low-latency streaming minimizes the typical 6–10 seconds of delay found in most live streaming to <strong>less than 3 seconds</strong>. This allows viewers to enjoy high-quality media streaming while experiencing low-latency live streaming.</p>
<p>In other words, ABR optimizes quality by adjusting resolution, bitrate, frame rate, etc., based on network conditions, while low-latency streaming provides an interactive streaming experience. Therefore, using both technologies together allows you to deliver flexible media quickly. Let’s configure ABR in <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> now!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-abr-in-ovenstudio-llhls">Configuring ABR in OvenStudio LLHLS<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#configuring-abr-in-ovenstudio-llhls" class="hash-link" aria-label="Direct link to Configuring ABR in OvenStudio LLHLS" title="Direct link to Configuring ABR in OvenStudio LLHLS" translate="no">​</a></h2>
<p>To provide ABR functionality, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> has the embedded live transcoder, using video codecs such as VP8, H.264, Pass-through, and audio codecs like Opus, AAC, and Pass-through. Higher-spec instances may be required when using ABR. Here are the steps to configure ABR in OvenStudio LLHLS:</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-GLhb149KHL1JeYX6N2huIw-3cc2b7bf761640e985a13165dd397c75.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">After logging in to OvenStudio LLHLS, click the <strong>[Settings]</strong> icon in the top right corner of the dashboard to go to the OvenStudio LLHLS settings page.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-4ZO8R5kB6cUordWQVIEs3g-037338e10a6ebc3edb3c370e3cffe3a3.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">From there, select the **[ABR] **tab in the left menu to access the ABR settings page.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-E5iqWZXrDDWEinxbnT1VhQ-d2756c87ae1b547cddcf199d3a1939f7.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">On the ABR settings page, choose the encoding presets you want to use from the** [Profiles]** section. You need to select at least two profiles to enable ABR functionality.</li>
<li class="">After selecting all the profiles you want to use, please press the** [Apply]** button to save the settings. Please note that the OvenMediaEngine (streaming engine) being used in OvenStudio LLHLS will restart, so don’t be alarmed if the streaming is momentarily interrupted.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-abr-in-ovenstudio-llhls">Using ABR in OvenStudio LLHLS<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#using-abr-in-ovenstudio-llhls" class="hash-link" aria-label="Direct link to Using ABR in OvenStudio LLHLS" title="Direct link to Using ABR in OvenStudio LLHLS" translate="no">​</a></h2>
<ul>
<li class="">After configuring ABR, use OvenLiveKit, OBS, or other tools to send your media source to OvenStudio LLHLS for streaming. If you’re not sure how to stream, you can refer to this <a class="" href="https://ovenmedialabs.com/blog/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio">**previous post (**<em>Low-Latency Streaming to OvenStudio LLHLS using OBS Studio</em>)</a> for guidance.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-etHP02f0VmsjowH5_jkzlA-386fbcd2275fe8099955215f15ecc96d.png" width="1600" height="900" class="img_ev3q"></p>
<ul>
<li class="">If the streaming appears correctly in OvenStudio LLHLS, hover your mouse over the OvenPlayer provided on the detailed view page. Click on the** [Settings] **icon on the right side of the controller bar that appears.</li>
<li class="">Afterward, try clicking on each profile to check if it plays smoothly. You can also use external players like <a href="https://demo.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class=""><strong>OvenPlayer Demo</strong></a>. Give it a try now!</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Don’t worry about concerns that delivering multiple profiles will prevent low-latency streaming. <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> delivers ABR efficiently, providing streaming with a latency of less than 3 seconds while supporting all these benefits. <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> is the perfect tool for this. If you have any further questions or need additional information, please feel free to ask about <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/how-to-use-abr-streaming-in-ovenstudio-llhls#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[Why OvenStudio LLHLS issues Free TLS and Domain?]]></title>
            <link>https://ovenmedialabs.com/blog/why-ovenstudio-llhls-issues-free-tls-and-domain</link>
            <guid>https://ovenmedialabs.com/blog/why-ovenstudio-llhls-issues-free-tls-and-domain</guid>
            <pubDate>Fri, 01 Dec 2023 07:55:01 GMT</pubDate>
            <description><![CDATA[Therefore, it has to use TLS when implementing WebRTC on your browser.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-27pSa0XBV-kpmjHjqEc9OA@2x-f7fb0da7216274f7640fcacae844a41f.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>Live streaming is rapidly becoming a key component of modern communication and entertainment. However, setting up and operating a streaming server can come with numerous challenges, including security, authentication, and complex configurations.</p>
<!-- -->
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-27pSa0XBV-kpmjHjqEc9OA@2x-f7fb0da7216274f7640fcacae844a41f.png" width="1648" height="1648" class="img_ev3q"></p>
<p>Now, with <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>, you can address these issues effectively. <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> automatically provides users with a free TLS <em>(Transport Layer Security)</em> certificate and domain upon their initial connection, simplifying streaming security settings. This policy represents a significant upgrade in terms of security and accessibility, and while there are multiple reasons for issuing TLS, today we’ll explain it in connection with WebRTC Ingress.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-is-tls-needed-for-webrtcingress">Why is TLS Needed for WebRTC&nbsp;Ingress?<a href="https://ovenmedialabs.com/blog/why-ovenstudio-llhls-issues-free-tls-and-domain#why-is-tls-needed-for-webrtcingress" class="hash-link" aria-label="Direct link to Why is TLS Needed for WebRTC&nbsp;Ingress?" title="Direct link to Why is TLS Needed for WebRTC&nbsp;Ingress?" translate="no">​</a></h2>
<p>WebRTC *(Web Real-Time Communication) *is a protocol that supports real-time audio, video, and data communication over the web. It is used for implementing applications like voice calls, video chats, video conferencing, and file sharing without the need for plugins in web browsers. Real-time communication via web browsers is a matter of security concern, and the reasons for using TLS in WebRTC are as follows:</p>
<ul>
<li class=""><strong>Enhanced Security</strong>: TLS strengthens communication security. WebRTC supports peer-to-peer (P2P) communication between devices, potentially transmitting sensitive information without one’s knowledge. TLS encrypts data, preventing third parties from intercepting or eavesdropping on the communication.</li>
<li class=""><strong>Authentication and Trust</strong>: TLS provides mutual authentication between the server and the client, enabling web applications to verify that they are communicating with the actual server. This helps prevent man-in-the-middle attacks (MitM).</li>
<li class=""><strong>Data Integrity</strong>: TLS ensures data integrity by preventing data from being tampered with during transmission, preserving the accuracy of the data.</li>
<li class=""><strong>Browser Security Policy Compliance</strong>: Most web browsers require web applications using WebRTC to use TLS, and non-compliance may lead to restrictions or blocking of the web application.</li>
<li class=""><strong>Regulatory Compliance</strong>: Web applications handling sensitive personal information, such as medical records or financial data, must adhere to security regulations and compliance requirements. Using TLS helps meet these regulatory requirements.</li>
</ul>
<p>In summary, using TLS in WebRTC enhances communication security, protects privacy, maintains data integrity, and ensures compliance with browser policies and regulations. Therefore, it has to use TLS when implementing WebRTC.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-fXKe24onk8H2zzwdnl4aeA-13cf2f3ff0a79d66b11c512c09dd9948.png" width="1600" height="803" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-JK4wYOnk6AeihrOnNJyr0Q-66f7f62a72d70856ba4df89b0877ca6f.png" width="1600" height="803" class="img_ev3q"></p>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> minimizes the complexity of settings, providing an authentication certificate and domain issuance upon the initial connection, enabling anyone to easily set up and deliver low-latency streaming.</p>
<p>For installation and usage instructions, please refer to the <a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/ovenstudio-llhls/getting-started" target="_blank" rel="noopener noreferrer" class=""><strong>Quick Start Guide for OvenStudio LLHLS</strong></a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-automatic-tls-and-domain-setup-on-initial-connection-in-ovenstudio-llhls">Why Automatic TLS and Domain Setup on Initial Connection in OvenStudio LLHLS?<a href="https://ovenmedialabs.com/blog/why-ovenstudio-llhls-issues-free-tls-and-domain#why-automatic-tls-and-domain-setup-on-initial-connection-in-ovenstudio-llhls" class="hash-link" aria-label="Direct link to Why Automatic TLS and Domain Setup on Initial Connection in OvenStudio LLHLS?" title="Direct link to Why Automatic TLS and Domain Setup on Initial Connection in OvenStudio LLHLS?" translate="no">​</a></h2>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> is a streaming server that allows streaming with less than 3 seconds of latency. When users transmit media sources through <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>, they may be using WebRTC <em>(if you’re curious about how to Ingress media sources with WebRTC in OvenStudio LLHLS, please refer to our <em><a class="" href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit"><em><strong>previous post</strong></em></a></em>)</em>. Therefore, on the initial connection, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> automatically issues TLS certificates and sets up a domain to enhance security, ensure compliance with regulations, and simplify the process by replacing complex IP addresses with user-friendly domains.</p>
<p>To further enhance usability in the future, we plan to add a custom domain feature that allows users to configure certificates and domains directly. This feature not only serves as a branding element but also streamlines usability since <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> utilizes the server’s domain for Streaming URLs and Stream Keys. When this feature is released, we anticipate it will make the setup more concise and user-friendly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-advantages-of-ovenstudio-llhlss-tls-and-automatic-domain-issuancepolicy">The Advantages of OvenStudio LLHLS’s TLS and Automatic Domain Issuance&nbsp;Policy<a href="https://ovenmedialabs.com/blog/why-ovenstudio-llhls-issues-free-tls-and-domain#the-advantages-of-ovenstudio-llhlss-tls-and-automatic-domain-issuancepolicy" class="hash-link" aria-label="Direct link to The Advantages of OvenStudio LLHLS’s TLS and Automatic Domain Issuance&nbsp;Policy" title="Direct link to The Advantages of OvenStudio LLHLS’s TLS and Automatic Domain Issuance&nbsp;Policy" translate="no">​</a></h2>
<ul>
<li class=""><strong>Simplified Security Configuration</strong>: OvenStudio LLHLS streamlines the setup of TLS, providing an automated process for the issuance of free TLS certificates and domains. There’s no need to worry about complex TLS settings.</li>
<li class=""><strong>Increased Reliability</strong>: By employing TLS, OvenStudio LLHLS ensures the secure transmission of streaming, contributing to a higher level of overall service reliability.</li>
<li class=""><strong>Regulatory Compliance</strong>: The TLS and automatic domain issuance policy helps OvenStudio LLHLS adhere to regulatory standards for Browsers, offering a straightforward approach to compliance.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/why-ovenstudio-llhls-issues-free-tls-and-domain#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Automatically setting up free TLS certificates and domains using <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> is a crucial step in providing users with enhanced security and increasing the reliability of the streaming server. Through these policies, viewers can enjoy safe and stable streaming, and service providers can meet compliance and security requirements. Elevate your streaming security and deliver a better service to your users with OvenStudio LLHLS. Also, stay tuned for the upcoming custom domain feature in future updates.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/why-ovenstudio-llhls-issues-free-tls-and-domain#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[WebRTC to LLHLS Streaming with OvenStudio LLHLS using OvenLiveKit]]></title>
            <link>https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit</link>
            <guid>https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit</guid>
            <pubDate>Tue, 19 Sep 2023 10:11:28 GMT</pubDate>
            <description><![CDATA[OvenLiveKit leverages the browser’s WebRTC API, simplifying the process of sending WebRTC streams directly to OvenStudio LLHLS.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-9RVJldGxW7li8I7o3LGPqw@2x-8164572a7cc904084842077774a1e0f9.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-9RVJldGxW7li8I7o3LGPqw@2x-8164572a7cc904084842077774a1e0f9.png" width="1648" height="1648" class="img_ev3q"></p>
<p>If you want to use streaming with a latency of less than 3 seconds but don’t have separate software or hardware to transmit your media source to <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>, don’t worry. It comes with <a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit</a>, which allows you to transmit streams through WebRTC directly from a web browser, without the need for additional software or plugins.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-benefits-using-ovenlivekit">Key Benefits Using OvenLiveKit<a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#key-benefits-using-ovenlivekit" class="hash-link" aria-label="Direct link to Key Benefits Using OvenLiveKit" title="Direct link to Key Benefits Using OvenLiveKit" translate="no">​</a></h3>
<ol>
<li class=""><strong>Ease of Use and Accessibility:</strong> There’s no need to install additional software or plugins. Just open your web browser, capture your webcam/microphone or your current screen, and start your live streaming.</li>
<li class=""><strong>Cross-Browser Compatibility:</strong> WebRTC is supported by most major web browsers, making it easy to stream live across various platforms.</li>
</ol>
<p>In summary, with <a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit</a>, you can broadcast your screen directly from your browser without the hassle of installing extra software or configuring intricate settings. Here’s a basic guide on how to use <a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit</a> within <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ovenlivekit">OvenLiveKit?<a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#ovenlivekit" class="hash-link" aria-label="Direct link to OvenLiveKit?" title="Direct link to OvenLiveKit?" translate="no">​</a></h2>
<p><a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit (for Web)</a> is an Open-Source and JavaScript-based Live Streaming Encoder that supports WebRTC optimized for <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a>, an Open-Source Sub-Second Latency Streaming Server. However, as you may be aware, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> is developed with it, which means that <a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit</a> will seamlessly work in <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-diEsNBh9y3ChUwQN2QnkAA-70a61aadc28ed37916a6b7ffbb9e9bee.png" width="1600" height="800" class="img_ev3q"></p>
<p>This kit leverages the browser’s WebRTC API, simplifying the process of sending WebRTC streams directly to <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>. If you’re interested in learning more, check out the links below.</p>
<ul>
<li class=""><a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit GitHub</a></li>
<li class=""><a href="https://space.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class="">OvenSpace Demo</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-ovenlivekit-in-your-webbrowser">Using OvenLiveKit in Your Web&nbsp;Browser<a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#using-ovenlivekit-in-your-webbrowser" class="hash-link" aria-label="Direct link to Using OvenLiveKit in Your Web&nbsp;Browser" title="Direct link to Using OvenLiveKit in Your Web&nbsp;Browser" translate="no">​</a></h2>
<p><a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit</a> is provided along with <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>. Follow these steps to start WebRTC streaming with it. This guide used the Chrome browser.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-JbwzFvTOAkPdakoxVbdSnQ-e2e1cf088aa7c2d2ead741b1430d9069.png" width="1600" height="800" class="img_ev3q"></p>
<p>1.** Create a Streaming Box:** Access OvenStudio LLHLS via your web browser and create a streaming box. After that, go to the detailed view page.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-tdbRaFxSrQEP1WYPNW1Vqw-1d40cb1aebee5e52761697da73e751c8.png" width="1600" height="800" class="img_ev3q"></p>
<ol start="2">
<li class=""><strong>Start Streaming:</strong> Under the player section, you’ll find the <strong>[Start Streaming]</strong> button. Click it to send your media source to OvenStudio LLHLS. There are two options:</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="webcammic"><strong>WebCam/Mic</strong><a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#webcammic" class="hash-link" aria-label="Direct link to webcammic" title="Direct link to webcammic" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-eJyYWvSENKgGPujYnicrfw-cf1360cfaf4770fa725f4d024a9d69d7.png" width="1600" height="400" class="img_ev3q"></p>
<p>i) Click on the <strong>[Start Streaming]</strong> button located at the bottom of OvenPlayer and select <strong>[WebCam/Mic]</strong> from the menu that appears.</p>
<p>ii) In the subsequent WebCam/Mic settings screen, choose your video and audio capture devices. Ensure that your video and audio are displaying correctly. Then, click the <strong>[Start Streaming]</strong> button to send your media source to OvenStudio LLHLS.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-8TjoGaIoFsDy9yZMcw9g8Q-f101b1a053bcd08327ce4d03a488f61f.png" width="1088" height="612" class="img_ev3q"></p>
<p>iii) If you encounter issues capturing your screen in the WebCam/Mic settings screen, please check your browser’s permissions.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-T0xmfad7bfcBLtdEKngETA-db01ece4b72e696173981e561628baa0.png" width="1600" height="800" class="img_ev3q"></p>
<p>iv) In the bottom right, compare the latency between the capturing OvenLiveKit and OvenPlayer on the left. It’s really that simple.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="screen-sharing"><strong>Screen Sharing</strong><a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#screen-sharing" class="hash-link" aria-label="Direct link to screen-sharing" title="Direct link to screen-sharing" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-XLY77yePwQzNigeNH2MriQ-d54bbb60c38af56e5992d796113f4222.png" width="1600" height="400" class="img_ev3q"></p>
<p>i) The process for Screen Sharing is just as straightforward as WebCam/MIC. Once you are in the detailed view, click the <strong>[Start Streaming]</strong> button located at the bottom of OvenPlayer and select <strong>[Screen Sharing]</strong> from the menu that appears.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-4wFRSvFZSLylaDswuq2KkQ-ee23511b319ddcb28cb916a121aadba3.png" width="1600" height="400" class="img_ev3q"></p>
<p>ii) In the subsequent Screen Sharing settings, choose the screen you wish to broadcast by selecting either <strong>[Select from opened browser tabs — <em>Chrome Tab</em>]</strong>, <strong>[Select from running programs — <em>Window</em>]</strong>, or <strong>[Select entire screen capture — <em>Entire Screen</em>]</strong>. Of course, the displayed tab name may vary depending on the browser. Then, click the <strong>[Start Streaming]</strong> button to send your media source to OvenStudio LLHLS.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-4-SYIYdf4iG8QkUXFSm69A-359f6d6e5ad322ed339af9f351df7b4a.png" width="1600" height="800" class="img_ev3q"></p>
<p>iii) Compare the latency between the capturing OvenLiveKit at the bottom right, the selected tab for capture, and OvenPlayer on the left. This option is great for presentations, screen sharing, or demos.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="going-live-with-sub-3-second-latency">Going Live with Sub-3-Second Latency<a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#going-live-with-sub-3-second-latency" class="hash-link" aria-label="Direct link to Going Live with Sub-3-Second Latency" title="Direct link to Going Live with Sub-3-Second Latency" translate="no">​</a></h2>
<p>Choose your desired option and configure your capture device settings. You can easily stream your captured screen to <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>. It accepts WebRTC streams and provides low-latency HLS (LLHLS) streaming to your viewers, with a delay of less than 3 seconds.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>This guide demonstrates how you can stream your webcam/microphone or screen capture directly to <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> from your web browser. This approach makes web-based live streaming a breeze without the need for additional software or plugins. Try it out to leverage the powerful low-latency streaming capabilities of <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> and enhance your interaction with viewers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>WebRTC</category>
            <category>LL-HLS</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[Low-Latency Streaming to OvenStudio LLHLS using OBS Studio]]></title>
            <link>https://ovenmedialabs.com/blog/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio</link>
            <guid>https://ovenmedialabs.com/blog/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio</guid>
            <pubDate>Thu, 14 Sep 2023 11:34:26 GMT</pubDate>
            <description><![CDATA[OvenStudio LLHLS is a Low-Latency Streaming Server that operates in a Cloud environment, boasting exceptional performance and scalability.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-HyB9u_BlmFpbi9PmvlxwbA@2x-8349bd0095ae8c698494d95758f097e9.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>Content creation and sharing industries are evolving at an unprecedented pace, and video/audio streaming has become an integral part of our daily lives.</p>
<!-- -->
<p>For content providers, streamers, and businesses utilizing streaming, finding the right tools to seamlessly broadcast media sources is essential. <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> supports various ingress protocols such as WebRTC, WHIP, SRT, and RTMP, allowing you to send media sources to <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> using <strong>software encoders</strong> like <a href="https://github.com/AirenSoft/OvenLiveKit-Web" target="_blank" rel="noopener noreferrer" class="">OvenLiveKit</a>, <a href="https://play.google.com/store/apps/details?id=com.airensoft.ovenstreamencoder.camera&amp;hl=en_US" target="_blank" rel="noopener noreferrer" class="">OvenStreamEncoder</a>, OBS, Xsplit,</p>
<p><img decoding="async" loading="lazy" alt="With Software&nbsp;Encoder" src="https://ovenmedialabs.com/assets/images/1-HyB9u_BlmFpbi9PmvlxwbA@2x-8349bd0095ae8c698494d95758f097e9.png" width="1648" height="449" class="img_ev3q"></p>
<p><em>With Software&nbsp;Encoder</em></p>
<p>or even <strong>hardware encoders</strong>.</p>
<p><img decoding="async" loading="lazy" alt="With Hardware&nbsp;Encoder" src="https://ovenmedialabs.com/assets/images/1-z4TIVIUyyz4Me2MGmXz3OQ@2x-bd87534c5b6a2a11ed11ffbf0f1d1d80.png" width="1648" height="449" class="img_ev3q"></p>
<p><em>With Hardware&nbsp;Encoder</em></p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-3jKWsMPEelXBMh6J-JAJ0w@2x-f814707b6b335b94fa247d126ee9b32b.png" width="1648" height="1648" class="img_ev3q"></p>
<p><a href="https://obsproject.com/" target="_blank" rel="noopener noreferrer" class="">Open Broadcaster Software</a> <em>(OBS or OBS Studio)</em> is one of the most popular open-source live encoders globally, favored by creators and streamers alike. These encoders enable content to be streamed to a streaming server using various protocols. When using <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> as your streaming server, you can reduce the traditional streaming delay of around 10 seconds to less than 3 seconds, providing an interactive experience for your viewers.</p>
<p>In this guide, we’ll walk you through the process of using OBS to send media sources to <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ovenstudio-llhls">OvenStudio LLHLS?<a href="https://ovenmedialabs.com/blog/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio#ovenstudio-llhls" class="hash-link" aria-label="Direct link to OvenStudio LLHLS?" title="Direct link to OvenStudio LLHLS?" translate="no">​</a></h2>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> is a <strong>Low-Latency Streaming Server</strong> that operates in a Cloud environment, boasting exceptional performance and scalability. It supports a range of ingress protocols <em>(WebRTC, WHIP, SRT, RTMP, and more)</em>, allowing media sources received via these protocols to be streamed as <strong>Low Latency HLS</strong> <em>(LLHLS)</em> with a streaming delay of less than 3 seconds. If you want to broadcast various content with minimal delay, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> is your solution.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sending-media-sources-to-ovenstudio-llhls">Sending Media Sources to OvenStudio LLHLS<a href="https://ovenmedialabs.com/blog/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio#sending-media-sources-to-ovenstudio-llhls" class="hash-link" aria-label="Direct link to Sending Media Sources to OvenStudio LLHLS" title="Direct link to Sending Media Sources to OvenStudio LLHLS" translate="no">​</a></h2>
<p>The process of sending media sources to <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> using OBS is straightforward and can be summarized in the following steps:</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-Shx63amHpvEswTkPPhAibw-3349c674b9dfc9ae73b7e64d5f90b3cd.png" width="1600" height="803" class="img_ev3q"></p>
<ol>
<li class=""><strong>OBS Installation</strong>: Start by downloading the appropriate version of OBS for your operating system from the <a href="https://obsproject.com/" target="_blank" rel="noopener noreferrer" class="">official website</a> and install it on your computer. Launch OBS and load the media source you want to broadcast.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-0VrMpaoet0GX_ZyJkweNyQ-bc02ea72b2f1eb24ee8efc2a65a69b9e.png" width="1600" height="433" class="img_ev3q"></p>
<ol start="2">
<li class=""><strong>OBS Settings</strong>: Click on the [<strong>Settings</strong>] button in the bottom right corner of OBS. Here, you can select your desired video and audio devices, and adjust basic settings like resolution, framerate, bitrate, and more.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-rjsgMS9VybT3n0wyYaVYiA-952f70d6b221d269d64139de81279fe3.png" width="1600" height="803" class="img_ev3q"></p>
<p>3.** Create a Streaming Box**: After logging into OvenStudio LLHLS, click the [<strong>+</strong>] button on the main page to create a Managed Stream.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-0liKMG-Lce8EuPJJaP5sYQ-6d271adbbfcff6ebdd740a28afae1545.png" width="1600" height="401" class="img_ev3q"></p>
<ol start="4">
<li class=""><strong>Choose the Appropriate Streaming Protocol</strong>: OBS can transmit a media source with various ingress protocols like WebRTC, WHIP, SRT, and RTMP, among others. Once you’ve created your Managed Stream in OvenStudio LLHLS, click on it to access the details. In the right-hand menu, navigate to the [<strong>URLs</strong>] tab and copy the Ingress URL <em>(Stream key)</em> for your chosen protocol. Or, on the same page, press the [<strong>Start streaming</strong>] button at the bottom of the player and select the [<strong>Live Encoder</strong>] tab from the menu that appears. Using the ingress URL that appears afterward works the same way.</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-xyRJGDK3Mq8Bwqp7QEraHQ-85ae608690915da8a966a20873b7555f.png" width="1600" height="867" class="img_ev3q"></p>
<ol start="5">
<li class=""><strong>Enter Stream Key</strong>: Return to the OBS settings screen and enter the <strong>Stream key</strong> you copied. Then, close the settings window. Then click the [<strong>OK</strong>] button below to close the settings window.</li>
</ol>
<ul>
<li class="">**WebRTC — **wss://{domain}:{port}/{app name}/{<strong>stream name?direction=send</strong>}</li>
<li class="">**WHIP — **wss://{domain}:{port}/{app name}/{<strong>stream name?direction=whip</strong>}</li>
<li class="">**SRT — **srt://{domain}:{port}?streamid=srt%3A%2F%2F{domain}%3A{port}%2F{app name}%2F{<strong>stream name</strong>}</li>
<li class="">**RTMP — **rtmp://{domain}:{port}/{app name}/{<strong>stream name</strong>}</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-Im6tkiNxaeKii3iqfIL0Yw-73f283cb16a2ab256761906b308febf0.png" width="1600" height="867" class="img_ev3q"></p>
<p>6.** Connect and Start Streaming**: Once you’ve configured OBS, click the [<strong>Start Streaming</strong>] button to begin streaming your video to OvenStudio LLHLS.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-Sd9sFOyHOxHcxHP-sWvH4w-3f4f93a4debde5996e0cf6569877bb17.png" width="1600" height="803" class="img_ev3q"></p>
<p>7.** Low-Latency Streaming Monitoring**: If your media source is successfully delivered to OvenStudio LLHLS, you can monitor it using the OvenPlayer within OvenStudio LLHLS. You can also use the Origin URL <em>(or Edge URL, depending on your settings)</em> from the [URLs] tab to watch it in LLHLS-compatible players like <a href="https://demo.ovenplayer.com/" target="_blank" rel="noopener noreferrer" class="">OvenPlayer</a>, <a href="https://www.theoplayer.com/test-your-stream-hls-dash-hesp" target="_blank" rel="noopener noreferrer" class="">THEO Player</a>, and others.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-wNDmuDbFxNThdls1tIqGtQ-0d159cfb6df0bf5ee8aa4aad5c9f7844.png" width="1600" height="401" class="img_ev3q"></p>
<ol start="8">
<li class=""><strong>Checking Latency</strong>: To ensure your streaming delay is less than 3 seconds, compare the OBS streaming screen to what you see on OvenStudio LLHLS’s player. If your streaming exceeds 3 seconds, check if the [<strong>Live Streaming</strong>] indicator at the bottom of the OvenStudio LLHLS player is lit in red. If it is, but your streaming delay still exceeds 3 seconds, it might be related to network, system performance, instance location, or instance type issues.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="in-conclusion">In Conclusion<a href="https://ovenmedialabs.com/blog/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio#in-conclusion" class="hash-link" aria-label="Direct link to In Conclusion" title="Direct link to In Conclusion" translate="no">​</a></h2>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> provides easy scalability and delivers reliable low-latency streaming. It can be employed in various interactive content services, including game streaming, sports streaming, entertainment events, online classes, video conferencing, and more —* *<a class="" href="https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls"><em><strong>What you can do with OvenStudio LLHLS</strong></em></a>.</p>
<p>The technological advancements and flexibility offered by <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> present content creators and streamers with opportunities to utilize streaming in diverse ways, enhancing interactions with viewers. Enjoy a superior streaming experience with <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>Sub-Second Latency</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[How to choose an AWS EC2 Instance for using OvenStudio LLHLS?]]></title>
            <link>https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls</link>
            <guid>https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls</guid>
            <pubDate>Tue, 12 Sep 2023 05:46:14 GMT</pubDate>
            <description><![CDATA[Selecting the right EC2 instance type for OvenStudio LLHLS enables smooth and efficient streaming performance.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-HvFmukpRjHl207C97sumAg-b19059d6499e2b22f1a39ba94f6327d1.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-HvFmukpRjHl207C97sumAg-b19059d6499e2b22f1a39ba94f6327d1.png" width="875" height="875" class="img_ev3q"></p>
<p>When it comes to deploying <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> on the <a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>, selecting the right EC2 instance type is a critical decision that can significantly impact your streaming performance and cost efficiency. In this blog post, we’ll guide you through the process of choosing the optimal EC2 instance for your <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> deployment.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="01-consider-your-workload-and-streaming-requirements">#01. Consider Your Workload and Streaming Requirements<a href="https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls#01-consider-your-workload-and-streaming-requirements" class="hash-link" aria-label="Direct link to #01. Consider Your Workload and Streaming Requirements" title="Direct link to #01. Consider Your Workload and Streaming Requirements" translate="no">​</a></h3>
<p>Before diving into EC2 instance types, evaluate your streaming workload and requirements. Factors to consider include:</p>
<ul>
<li class=""><strong>Concurrent Viewers</strong>: Estimate the number of simultaneous viewers you expect. This will impact the CPU, memory, and network resources needed.</li>
<li class=""><strong>Video Quality</strong>: Higher quality streams require more resources. Determine the desired video quality <em>(resolution, bitrate, framerate, and more)</em> of your streams.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="02-cpu-and-memory-requirements">#02. CPU and Memory Requirements<a href="https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls#02-cpu-and-memory-requirements" class="hash-link" aria-label="Direct link to #02. CPU and Memory Requirements" title="Direct link to #02. CPU and Memory Requirements" translate="no">​</a></h3>
<p>For <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>, CPU and memory are crucial. Here are some EC2 instance families that offer a good balance between CPU and memory:</p>
<ul>
<li class=""><strong>M5 Instances</strong>: These provide a balanced mix of resources, ideal for moderate CPU and memory-intensive workloads.</li>
<li class=""><strong>C5 Instances</strong>: Designed for compute-intensive tasks, these instances offer high CPU performance.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="03-network-performance">#03. Network Performance<a href="https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls#03-network-performance" class="hash-link" aria-label="Direct link to #03. Network Performance" title="Direct link to #03. Network Performance" translate="no">​</a></h3>
<p>Since streaming involves transmitting large amounts of data, network performance matters. EC2 instance types vary in their network capabilities:</p>
<ul>
<li class=""><strong>Network Performance Levels</strong>: Instances like the C4, C5, M4, and M5 families generally offer higher network performance.</li>
<li class=""><strong>Enhanced Networking</strong>: Look for instances that support Enhanced Networking, which can improve network throughput and latency.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="04-ec2-instancesizing">#04. EC2 Instance&nbsp;Sizing<a href="https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls#04-ec2-instancesizing" class="hash-link" aria-label="Direct link to #04. EC2 Instance&nbsp;Sizing" title="Direct link to #04. EC2 Instance&nbsp;Sizing" translate="no">​</a></h3>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> supports a variety of instance types including T2, T3, M4, M5, M6, C4, C5, C6, depending on various usage scenarios. The list of instances that can use OvenStudio LLHLS is shown below:</p>
<ul>
<li class="">**T2: **t2.micro, t2.small, t2.medium, t2.large, t2.xlarge, t2.2xlarge</li>
<li class="">**T3: **t3.micro, t3.small, t3.medium, t3.large, t3.xlarge, t3.2xlarge</li>
<li class="">**T3A: **t3a.micro, t3a.small, t3a.medium, t3a.large, t3a.xlarge, t3a.2xlarge</li>
<li class="">**M4: **m4.large, m4.xlarge, m4.2xlarge, m4.4xlarge, m4.10xlarge, m4.16xlarge</li>
<li class="">**M5: **m5.large, m5.xlarge, m5.2xlarge, m5.4xlarge, m5.8xlarge, m5.12xlarge, m5.16xlarge, m5.24xlarge, m5.metal</li>
<li class="">**M5A: **m5a.large, m5a.xlarge, m5a.2xlarge, m5a.4xlarge, m5a.8xlarge, m5a.12xlarge, m5a.16xlarge, m5a.24xlarge</li>
<li class="">**M5AD: **m5ad.large, m5ad.xlarge, m5ad.2xlarge, m5ad.4xlarge, m5ad.8xlarge, m5ad.12xlarge, m5ad.16xlarge, m5ad.24xlarge</li>
<li class="">**M5D: **m5d.large, m5d.xlarge, m5d.2xlarge, m5d.4xlarge, m5d.8xlarge, m5d.12xlarge, m5d.16xlarge, m5d.24xlarge, m5d.metal</li>
<li class="">**M5ZN: **m5zn.large, m5zn.xlarge, m5zn.2xlarge, m5zn.3xlarge, m5zn.6xlarge, m5zn.12xlarge, m5zn.metal</li>
<li class="">**M6I: **m6i.large, m6i.xlarge, m6i.2xlarge, m6i.4xlarge, m6i.8xlarge, m6i.12xlarge, m6i.16xlarge, m6i.24xlarge, m6i.32xlarge, m6i.metal</li>
<li class="">**C4: **c4.8xlarge</li>
<li class="">**C5: **c5.large, **c5.xlarge **<em>(Vendor Recommended)</em>, c5.2xlarge, c5.4xlarge, c5.9xlarge, c5.12xlarge, c5.18xlarge, c5.24xlarge, c5.metal</li>
<li class="">**C5D: **c5d.9xlarge, c5d.12xlarge, c5d.18xlarge, c5d.24xlarge, c5d.metal</li>
<li class="">**C5A: **c5a.8xlarge, c5a.12xlarge, c5a.16xlarge, c5a.24xlarge</li>
<li class="">**C5N: **c5n.9xlarge, c5n.18xlarge, c5n.metal</li>
<li class="">**C6I: **c6i.large, c6i.xlarge, c6i.2xlarge, c6i.4xlarge, c6i.8xlarge, c6i.12xlarge, c6i.16xlarge, c6i.24xlarge, c6i.32xlarge, c6i.metal</li>
</ul>
<p>If you want to know the performance and features of each instance, you can refer to the guides provided by AWS. Click the links below to see a description of each instance:</p>
<ul>
<li class="">**Low-cost and General Purpose **(T2): <a href="https://aws.amazon.com/ec2/instance-types/t2" target="_blank" rel="noopener noreferrer" class="">Amazon EC2 T2 Instances</a></li>
<li class="">**Low-cost and General Purpose **(T3): <a href="https://aws.amazon.com/ec2/instance-types/t3/" target="_blank" rel="noopener noreferrer" class="">Amazon EC2 T3 Instances</a></li>
<li class="">**General Purpose **(M5~M6): <a href="https://aws.amazon.com/ec2/instance-types/?nc1=h_ls#General_Purpose" target="_blank" rel="noopener noreferrer" class="">Amazon EC2 Instance M-Types</a></li>
<li class=""><strong>Optimized Computing</strong> (C4~C6): <a href="https://aws.amazon.com/ec2/instance-types/?nc1=h_ls#Compute_Optimized" target="_blank" rel="noopener noreferrer" class="">Amazon EC2 Instance C-Types</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="05-cost-optimization">#05. Cost Optimization<a href="https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls#05-cost-optimization" class="hash-link" aria-label="Direct link to #05. Cost Optimization" title="Direct link to #05. Cost Optimization" translate="no">​</a></h3>
<p>Optimizing costs is essential. Choose an instance that meets your requirements without being overprovisioned. AWS offers various pricing options <em>(On-Demand, Spot Instances, Reserved Instances)</em> that can help control costs.</p>
<p>The AWS Marketplace provides calculators to help you figure out your software and instance costs, click <a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee#pdp-pricing" target="_blank" rel="noopener noreferrer" class=""><strong>HERE</strong></a> for more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Selecting the right EC2 instance type for <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> enables smooth and efficient streaming performance. By evaluating your workload, and considering CPU, memory, network, and storage requirements, you can make an informed decision that aligns with your streaming goals and budget. For a comprehensive guide on EC2 instance types, performance benchmarks, and hands-on examples, check out our detailed documentation on the <a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/ovenstudio-llhls/aws-instance" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a>.</p>
<p>Tailor your OvenStudio LLHLS to fit your needs by considering your requirements, instance characteristics, specifications, and pricing. For instance, if you want to utilize OvenStudio LLHLS to its full potential and set up medium to large-scale streaming, following our recommendation, you might choose the <strong>c5.xlarge</strong> instance on a C5 instance family. This instance offers specifications of 4vCPU / 8GiB RAM / Up to 10Gbps <em>(Network Bandwidth)</em> / Up to 4750Mbps <em>(EBS Bandwidth)</em>, with an hourly cost of $0.33 <em>(Software: $0.16 per hour, Instance: $0.17 per hour)</em>. Plus, with an annual commitment, you can enjoy the software at a discounted rate of $450, which is approximately 68% cheaper.</p>
<p>Moreover, if your streaming requirements grow beyond your current selection, you can consider scaling up by choosing higher-spec instances. Alternatively, leverage OvenStudio LLHLS’s seamless integration with AWS CloudFront to expand your streaming distribution by adding Edge Servers as needed.</p>
<p>Remember, making the right EC2 instance choice sets the foundation for a successful and reliable <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> deployment on the <a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">AWS Marketplace</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[What you can do with OvenStudio LLHLS?]]></title>
            <link>https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls</link>
            <guid>https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls</guid>
            <pubDate>Thu, 07 Sep 2023 05:52:26 GMT</pubDate>
            <description><![CDATA[If you want to extend your service to millions of viewers globally through CDN, OvenStudio LLHLS is the perfect fit.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-3VuWZcWeLrBFySdAjQKvCw-f66592b3f6ee456fdef6df45c7c56926.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a>, a low-latency streaming server designed for the cloud, is built upon the open-source sub-second latency streaming server, <a href="https://airensoft.com/ome.html" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a>. Despite the availability of technology that can achieve sub-1-second latency for streaming, OvenStudio LLHLS has chosen to adopt a technology that achieves sub-3-second latency.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why">Why?<a href="https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls#why" class="hash-link" aria-label="Direct link to Why?" title="Direct link to Why?" translate="no">​</a></h3>
<p>While leveraging WebRTC output could potentially expand the application scope of OvenStudio LLHLS, there is no CDN service that supports WebRTC, and involves setting up and operating an edge cluster yourself. This can be complex and specialized, which is why many people still opt for traditional CDN services when using (LL)HLS. The ease of configuration and management is a key factor.</p>
<p>Furthermore, WebRTC is primarily focused on near-real-time streaming and does not support Digital Rights Management (DRM). Thus, for services requiring DRM support, implementing WebRTC can be challenging. OvenStudio LLHLS has plans to support DRM in the near future, so if DRM is essential for your service, stay tuned for the upcoming updates.</p>
<p>There are certainly cases where sub-second latency is important, such as ‘<strong>near-real-time events</strong>’. Please read the examples we present below. If you need this technology, you need <a href="https://airensoft.com/ome.html" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="live-event-streaming">Live Event Streaming<a href="https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls#live-event-streaming" class="hash-link" aria-label="Direct link to Live Event Streaming" title="Direct link to Live Event Streaming" translate="no">​</a></h2>
<ul>
<li class=""><strong>News Updates</strong>: OvenMediaEnigne powers live news broadcasts, enabling audiences to stay connected with breaking news and unfolding events as they happen. Whether it’s a live report from the scene or a breaking story, OvenMediaEngine enables viewers to receive up-to-the-minute updates at sub-second latency.</li>
<li class=""><strong>Interactive Games</strong>: Sub-second latency streaming technology through OvenMediaEngine turns gaming sessions into thrilling and immersive experiences, making the gameplay interactions truly captivating when the interaction between game streamers and viewers.</li>
<li class=""><strong>Online Gambling</strong>: OvenMediaEngine enhances the online gambling experience by delivering near-real-time event and outcome updates from virtual casinos. This enables gamblers to stay informed about the latest developments, making their betting experience more engaging and dynamic.</li>
<li class=""><strong>Horse Racing and Sports Betting</strong>: For platforms offering horse racing and sports betting, OvenMediaEngine enables instantaneous updates on ongoing events and outcomes. This sub-second latency streaming empowers bettors to make informed decisions quickly.</li>
<li class=""><strong>Financial and Stock Markets</strong>: In the world of finance and stock trading, where every second counts, streaming with less than 1 second of delay becomes mission-critical. OvenMediaEngine allows you to deliver streams of financial transactions and market updates with sub-second latency. This near-real-time advantage can potentially translate into significant financial gains, making it a game-changer for traders and investors.</li>
<li class=""><strong>Online Auctions</strong>: OvenMediaEngine finds applications in online auction platforms, enabling bidders to receive near-real-time updates on the bidding process. This enables participants to stay informed about the latest bids and auction progress, contributing to a competitive and engaging experience.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-3VuWZcWeLrBFySdAjQKvCw-f66592b3f6ee456fdef6df45c7c56926.png" width="875" height="875" class="img_ev3q"></p>
<p><strong>If you want to easily extend your service to millions of viewers globally through CDN integration while enjoying sub-3-second latency</strong>, OvenStudio LLHLS is the perfect fit. Certainly, providing the mentioned ‘Live Event Streaming’ use cases with streaming delays of less than 3 seconds is entirely feasible.</p>
<p>Now, <a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> brings forth a low-latency streaming technology that finds application in diverse scenarios across various industries. Let’s delve into some prominent use cases where OvenStudio LLHLS’s cutting-edge streaming technology offers exceptional performance and reliability, contributing to the advancement of these industries.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="entertainment-streaming">Entertainment Streaming<a href="https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls#entertainment-streaming" class="hash-link" aria-label="Direct link to Entertainment Streaming" title="Direct link to Entertainment Streaming" translate="no">​</a></h2>
<ul>
<li class=""><strong>Sports Coverage</strong>: From sports (and e-sports) matches to athletic events, OvenStudio LLHLS’s low-latency streaming enables viewers to experience the thrill of every moment, keeping up with the action as if they were present on the field.</li>
<li class=""><strong>Live Concerts</strong>: OvenStudio LLHLS empowers the entertainment industry by enabling live concert streaming. Fans can enjoy the performance at low latency, while artists can interact with their audience, creating an immersive and engaging experience.</li>
<li class=""><strong>Fan Engagement Platforms</strong>: OvenStudio LLHLS facilitates direct interaction between artists and fans through live streaming. Quick responses from artists during live sessions enhance fan engagement, making fans feel more connected to their favorite artists.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="educational-streaming">Educational Streaming<a href="https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls#educational-streaming" class="hash-link" aria-label="Direct link to Educational Streaming" title="Direct link to Educational Streaming" translate="no">​</a></h2>
<ul>
<li class=""><strong>Remote Education</strong>: In the realm of remote learning, OvenStudio LLHLS supports low-latency delivery of lectures, enabling educators and students to interact seamlessly. Live Q&amp;A sessions and low-latency discussions foster an engaging learning environment.</li>
<li class=""><strong>Conferences</strong>: OvenStudio LLHLS finds application in conferences, allowing speakers to deliver their presentations in low latency while engaging with the audience through live Q&amp;A sessions. This enriches the conference experience and encourages active participation.</li>
<li class=""><strong>School Events</strong>: OvenStudio LLHLS supports low-latency interaction between teachers, students, and parents during school events. Whether it’s a parent-teacher streaming meeting or a school assembly, OvenStudio LLHLS enhances communication and engagement.</li>
<li class=""><strong>Religious Services</strong>: OvenStudio LLHLS powers live streaming of religious events, enabling clergy members to connect with their congregation at low latency. This technology fosters a sense of community among worshippers, even in streaming settings.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="online-collaboration-tools">Online Collaboration Tools<a href="https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls#online-collaboration-tools" class="hash-link" aria-label="Direct link to Online Collaboration Tools" title="Direct link to Online Collaboration Tools" translate="no">​</a></h2>
<ul>
<li class=""><strong>Online Screenings</strong>: By utilizing OvenStudio LLHLS for low-latency streaming, you can set up online screenings, enabling interaction between media and the audience. This provides a groundbreaking tool for film production companies, broadcasting networks, event planners, lecturers, and other content creators to innovate and execute engaging online premieres and screenings.</li>
<li class=""><strong>Remote Meetings</strong>: OvenStudio LLHLS enhances remote meetings by providing low-latency response and communication among participants. This enables discussions to flow seamlessly, even when participants are geographically distant.</li>
<li class=""><strong>Remote Work</strong>: OvenStudio LLHLS supports remote work scenarios by enabling low-latency collaboration and communication among team members. Whether it’s brainstorming sessions or project updates, OvenStudio LLHLS enables efficient and effective collaboration.</li>
</ul>
<p>The diverse use cases mentioned above, which we will continuously enhance with input from our clients, will offer rapid responsiveness and interactivity with sub-3-second streaming latency. This will strengthen the bond between content creators and viewers or users, opening up a wide range of business opportunities.</p>
<p>Thank you for reading.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/what-you-can-do-with-ovenstudio-llhls#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[What is an LLHLS Streaming Server?]]></title>
            <link>https://ovenmedialabs.com/blog/what-is-an-llhls-streaming-server</link>
            <guid>https://ovenmedialabs.com/blog/what-is-an-llhls-streaming-server</guid>
            <pubDate>Fri, 18 Aug 2023 05:55:43 GMT</pubDate>
            <description><![CDATA[The Low Latency HLS (LLHLS) streaming server is designed for low-latency streaming.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-Ww7XaG3nhUn6uELkI5rwng-96bf863733dd62cf449421cbd0992808.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-Ww7XaG3nhUn6uELkI5rwng-96bf863733dd62cf449421cbd0992808.png" width="853" height="853" class="img_ev3q"></p>
<p>We are living in an era where anyone can easily broadcast content. In the past, broadcasting was limited to television stations, but now, with the power of smartphones and computers, anyone can effortlessly stream their content to the world. Streaming platforms and services have revolutionized the way we consume media, offering creators a convenient and fast way to share their creations with the world.</p>
<!-- -->
<p>From YouTubers and streamers to artists and educators, people from various fields are using streaming to share their passions and talents with a global audience. Even businesses have embraced streaming to launch products, host events, and conduct meetings on a global scale.</p>
<p>However, to make all this streaming magic happen, we need <strong>Streaming Servers</strong>. Streaming servers play a crucial role in delivering various types of content, such as videos, music, and events, to viewers in a stable and reliable manner. Without a properly functioning streaming server, streaming platforms and services may encounter difficulties in smooth operations.</p>
<p>Let’s explore more about streaming servers in the following article!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-a-streaming-server">What is a Streaming Server?<a href="https://ovenmedialabs.com/blog/what-is-an-llhls-streaming-server#what-is-a-streaming-server" class="hash-link" aria-label="Direct link to What is a Streaming Server?" title="Direct link to What is a Streaming Server?" translate="no">​</a></h2>
<p>A streaming server plays a crucial role in transmitting media content, such as video and audio (media sources), to users. It enables users to watch (stream) video or audio on web browsers, mobile apps, or other devices.</p>
<p>The most significant role of a streaming server is to deliver media data to users reliably. The technical reliability of the streaming server directly impacts the overall service stability. Additionally, the streaming server efficiently manages internet bandwidth and ensures a consistent streaming experience across various devices and platforms.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-llhls-streaming-server">What is LLHLS Streaming Server?<a href="https://ovenmedialabs.com/blog/what-is-an-llhls-streaming-server#what-is-llhls-streaming-server" class="hash-link" aria-label="Direct link to What is LLHLS Streaming Server?" title="Direct link to What is LLHLS Streaming Server?" translate="no">​</a></h2>
<p>The Low Latency HLS (LLHLS) streaming server is designed for low-latency streaming. LLHLS is an advanced version of the streaming protocol HLS, originally developed by Apple. While conventional HLS typically uses segment lengths of 6 to 10 seconds, LLHLS significantly reduces segment lengths to minimize latency. This enables faster responsiveness, making it ideal for near-real-time interactive applications such as events, game streaming, online conferences, and video meetings.</p>
<p>LLHLS is mainly supported by web-based players and mobile apps. As most modern browsers and devices support LLHLS streaming, users can experience smooth streaming without the need for additional plugins.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-build-an-llhls-streaming-server">How to Build an LLHLS Streaming Server?<a href="https://ovenmedialabs.com/blog/what-is-an-llhls-streaming-server#how-to-build-an-llhls-streaming-server" class="hash-link" aria-label="Direct link to How to Build an LLHLS Streaming Server?" title="Direct link to How to Build an LLHLS Streaming Server?" translate="no">​</a></h2>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> is the best choice for quickly and easily building an LLHLS streaming server. With OvenStudio LLHLS, you can set up a low-latency streaming server in just a few minutes without the need for complex installation processes. The platform offers a user-friendly interface and powerful features, enabling efficient management of your streaming workflow. By choosing OvenStudio LLHLS, you can enhance user engagement and interaction with near-real-time updated content, providing more effective communication and a better user experience.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-A20rWxUTJKwNaOClt5O3BQ-50a9729f6d1b8cad10ac8873b55e04d4.png" width="1600" height="900" class="img_ev3q"></p>
<ol>
<li class="">OvenStudio LLHLS enables low-latency streaming with a delay of under 3 seconds. For near-real-time content delivery, minimizing latency is crucial. To achieve this, OvenStudio LLHLS leverages cutting-edge technologies and the LLHLS protocol, providing stable and low-latency streaming.</li>
<li class="">OvenStudio LLHLS supports high-quality media content delivery with low latency. It efficiently handles the resources required for streaming high-quality media sources, ensuring stable delivery. Moreover, with CDN integration and scaling options, it can serve a larger audience with low-latency high-definition content.</li>
<li class="">OvenStudio LLHLS offers Adaptive Bitrate Streaming (ABR) support. This feature automatically adjusts the bitrate of content based on viewers’ network conditions and device capabilities, delivering an optimal viewing experience for each viewer.</li>
<li class="">OvenStudio LLHLS provides valuable statistics and data for analyzing viewers’ watching patterns and behavior. Content creators and service providers can gain insights into viewers’ preferences, identify areas for improvement, and enhance service quality.</li>
</ol>
<p>OvenStudio LLHLS is designed to deliver and share high-quality media content in near-real-time. By choosing OvenStudio LLHLS on your AWS Cloud, you can operate your streaming platform or service more effectively.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information">For more information<a href="https://ovenmedialabs.com/blog/what-is-an-llhls-streaming-server#for-more-information" class="hash-link" aria-label="Direct link to For more information" title="Direct link to For more information" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>Fundamentals</category>
        </item>
        <item>
            <title><![CDATA[What is Low-Latency Streaming?]]></title>
            <link>https://ovenmedialabs.com/blog/what-is-low-latency-streaming</link>
            <guid>https://ovenmedialabs.com/blog/what-is-low-latency-streaming</guid>
            <pubDate>Tue, 08 Aug 2023 03:22:23 GMT</pubDate>
            <description><![CDATA[By reducing the typical 6–15 seconds latency of traditional streaming to approximately under 3 seconds.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-ZfDFEae1AFV1TDnGIJ0JWA-e31fdfd2ef4ca2e43f3a228270f6f499.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-ZfDFEae1AFV1TDnGIJ0JWA-e31fdfd2ef4ca2e43f3a228270f6f499.png" width="853" height="853" class="img_ev3q"></p>
<p>The pandemic has forced people to stay indoors, significantly changing today’s digital content consumption patterns. Many individuals have become aware of the latency issues in traditional streaming services and are now seeking digital content that can provide immediate responses.</p>
<!-- -->
<p>Near-real-time events, game streaming, online lectures, and other fields require fast responsiveness and minimal delays. To meet these demands, the Low Latency HTTP Live Streaming (LLHLS) approach has gained attention. In this article, we will explore the concept, importance, implementation, and the OvenStudio LLHLS solution for low-latency streaming.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-llhls-low-latency-streaming">What is LLHLS Low-Latency Streaming?<a href="https://ovenmedialabs.com/blog/what-is-low-latency-streaming#what-is-llhls-low-latency-streaming" class="hash-link" aria-label="Direct link to What is LLHLS Low-Latency Streaming?" title="Direct link to What is LLHLS Low-Latency Streaming?" translate="no">​</a></h2>
<p>Low-Latency HLS (LLHLS) streaming is an advanced version of Apple’s HTTP Live Streaming (HLS) protocol designed to minimize latency in near-real-time streaming. By significantly reducing the segment length compared to traditional HLS, LLHLS enables the implementation of near-real-time events and content, allowing for interactive services. Viewers can now participate in various online events in near-real-time, such as live commerce, game streaming, and online conferences.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-is-llhls-low-latency-streaming-needed">Why is LLHLS Low-Latency Streaming Needed?<a href="https://ovenmedialabs.com/blog/what-is-low-latency-streaming#why-is-llhls-low-latency-streaming-needed" class="hash-link" aria-label="Direct link to Why is LLHLS Low-Latency Streaming Needed?" title="Direct link to Why is LLHLS Low-Latency Streaming Needed?" translate="no">​</a></h2>
<p>LLHLS streaming plays a crucial role in various platforms and services that require near-real-time content delivery. By reducing the typical 6–15 seconds latency of traditional streaming to approximately <strong>under 3 seconds</strong>, LLHLS allows viewers to actively engage with the live-streamed content in near-real-time.</p>
<p>As a result, LLHLS streaming provides immediate interactivity and a more differentiated experience to a large audience. It caters to users familiar with traditional streaming, offering them unique and valuable content in areas like live commerce, sports broadcasting, game streaming, online education, and gambling. Simultaneously, it attracts new viewers with captivating online experiences.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-implement-llhls-low-latency-streaming">How to Implement LLHLS Low-Latency Streaming?<a href="https://ovenmedialabs.com/blog/what-is-low-latency-streaming#how-to-implement-llhls-low-latency-streaming" class="hash-link" aria-label="Direct link to How to Implement LLHLS Low-Latency Streaming?" title="Direct link to How to Implement LLHLS Low-Latency Streaming?" translate="no">​</a></h2>
<p>To implement low-latency streaming using LLHLS protocol, it is crucial to faithfully adhere to <strong>Apple’s HLS specifications</strong>. While Legacy HLS could be adequately delivered using a regular HTTP server after segment packaging, LLHLS requires more complex server-side techniques such as <strong>Preload Hint</strong>, <strong>Blocking of Media Downloads</strong>, and <strong>HLS Delivery Directives</strong> for achieving low latency. Therefore, utilizing a dedicated streaming server is highly recommended to ensure successful implementation. If you are interested in detailed information about the LLHLS protocol, please refer to the <a href="https://developer.apple.com/documentation/http-live-streaming/enabling-low-latency-http-live-streaming-hls" target="_blank" rel="noopener noreferrer" class="">Apple Developer Documentation</a>.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-TfB8J8EpbgToln_BAOXp-w-b03d6016bf043d713b2260e54782b4e2.png" width="1600" height="900" class="img_ev3q"></p>
<p><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS</a> seamlessly integrates with existing infrastructures and systems, using <strong>WebRTC</strong>, <strong>WHIP</strong>, <strong>RTMP</strong>, <strong>SRT</strong>, and other ingress protocols to receive media sources. It leverages the <strong>LLHLS</strong> protocol to achieve low-latency transmission. To enhance streaming stability across different browsers, the built-in live transcoder encodes the media sources for low-latency streaming. Moreover, it supports various Output Profiles, allowing you to utilize the <strong>Adaptive Bit-Rate</strong> (ABR) feature as needed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="advantages-of-using-ovenstudio-llhls">Advantages of Using OvenStudio LLHLS:<a href="https://ovenmedialabs.com/blog/what-is-low-latency-streaming#advantages-of-using-ovenstudio-llhls" class="hash-link" aria-label="Direct link to Advantages of Using OvenStudio LLHLS:" title="Direct link to Advantages of Using OvenStudio LLHLS:" translate="no">​</a></h2>
<ol>
<li class=""><strong>Interactive Content</strong>: OvenStudio LLHLS leverages low-latency streaming technology to support near-real-time updating content. Whether it’s live commerce, sports broadcasting, game streaming, online education, or gambling, viewers can actively participate in near-real-time events with minimized delays.</li>
<li class=""><strong>Enhanced User Experience</strong>: With OvenStudio LLHLS, you can provide high-quality streaming with reduced latency, offering viewers a remarkable streaming experience.</li>
<li class=""><strong>Differentiated Service</strong>: By offering lower latency compared to other services, OvenStudio LLHLS can deliver unique value to viewers accustomed to traditional streaming. Providing a differentiated service with lower delay can help you gain a competitive edge.</li>
<li class=""><strong>Scalability to Reach More Viewers</strong>: LLHLS low-latency streaming enables you to deliver high-quality near-real-time streaming to a large audience. This is particularly beneficial for scenarios like event broadcasting, large-scale online lectures, and horse racing coverage, where a significant number of viewers tune in simultaneously. LLHLS low-latency streaming can handle massive traffic and accommodate many concurrent viewers.</li>
</ol>
<p>In summary, OvenStudio LLHLS can help you quickly and easily set up a low-latency streaming server, offering your audience the best streaming experience possible.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-more-information-please-refer-to-the-following-links">For more information, please refer to the following links:<a href="https://ovenmedialabs.com/blog/what-is-low-latency-streaming#for-more-information-please-refer-to-the-following-links" class="hash-link" aria-label="Direct link to For more information, please refer to the following links:" title="Direct link to For more information, please refer to the following links:" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://airensoft.com/os" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Official Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS on AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS User Guide</a></li>
<li class=""><a href="mailto:ovenstudio@airensoft.com" target="_blank" rel="noopener noreferrer" class="">Support and Inquiries</a></li>
</ul>
<p>Thank you for taking the time to read this article. If you have any further questions or need more information, feel free to ask.</p>]]></content:encoded>
            <category>Sub-Second Latency</category>
            <category>Fundamentals</category>
        </item>
        <item>
            <title><![CDATA[Introducing OvenStudio LLHLS: A Powerful LLHLS Streaming Server for the Cloud]]></title>
            <link>https://ovenmedialabs.com/blog/introducing-ovenstudio-llhls-a-powerful-llhls-streaming-server-for-the-cloud</link>
            <guid>https://ovenmedialabs.com/blog/introducing-ovenstudio-llhls-a-powerful-llhls-streaming-server-for-the-cloud</guid>
            <pubDate>Thu, 20 Jul 2023 05:06:29 GMT</pubDate>
            <description><![CDATA[OvenStudio LLHLS provides auto configure-ability, streaming for Low-Latency, Large-Scale, High-Definition, and Adaptive Bitrate.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-rz92IoipEcAp2Hemfo4CXg-0dda5cb9f4bcb953103122518861453b.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p>We are thrilled to announce the launch of <strong>OvenStudio LLHLS</strong>. This groundbreaking Low Latency HLS (LLHLS) streaming server brings together the power of auto configure-ability, streaming for Low-Latency, Large-Scale, High-Definition quality, and Adaptive Bitrate. This LLHLS server is designed to quick the way you deliver your content to viewers across the globe. From now on, your streaming service can deliver Low-Latency and High-Definition streaming to Large-Scale viewers!</p>
<!-- -->
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-rz92IoipEcAp2Hemfo4CXg-0dda5cb9f4bcb953103122518861453b.png" width="1648" height="1648" class="img_ev3q"></p>
<p>With OvenStudio LLHLS, setting up your streaming infrastructure has never been easier. The auto-configurable feature takes care of the complex installation and configuration process, allowing you to focus on creating exceptional streaming experiences for your audience because it empowers you to effortlessly deploy and scale your streaming services with just a few clicks.</p>
<p>Experience the true potential of large-scale streaming with OvenStudio LLHLS. Built to handle the demands of millions of concurrent viewers, this server can smooth playback and uninterrupted streaming even during peak traffic with Content Delivery Networks (CDN). Certainly, integrating with the CDN (AWS CloudFront) in OvenStudio LLHLS can be easily automated.</p>
<p>Also, it enables the seamless delivery of high-definition videos while leveraging the benefits of low-latency streaming. So viewers can experience smooth streaming without sacrificing video quality.</p>
<p>Adaptive bitrate streaming is another standout feature of OvenStudio LLHLS. This technology automatically adjusts the quality of the stream based on the viewer’s network conditions, providing a seamless and optimized viewing experience across different devices and network environments. Your viewers can enjoy your content without interruptions, regardless of their connection speed or device capabilities.</p>
<p>We understand the importance of low-latency streaming in today’s fast-paced digital world. With OvenStudio LLHLS, you can deliver live content with minimal delay, creating an immersive and interactive experience for your viewers. Whether it’s live sports events, gaming tournaments, or real-time webinars, your audience will feel fully engaged and connected.</p>
<p>OvenStudio LLHLS is the ultimate solution for content creators, media companies, and businesses looking to elevate their streaming capabilities. With its comprehensive feature set and user-friendly interface, you can streamline your streaming workflows, manage your content effortlessly, and gain valuable insights through advanced analytics.</p>
<p>Don’t miss out on the future of streaming. With OvenStudio LLHLS, start your streaming revolution today and captivate your audience like never before.</p>
<p>Thank you!</p>
<ul>
<li class=""><a href="https://airensoft.com/os.html" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Website</a></li>
<li class=""><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS AWS Marketplace</a></li>
<li class=""><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/ovenstudio-llhls/getting-started" target="_blank" rel="noopener noreferrer" class="">OvenStudio LLHLS Getting Started</a></li>
</ul>]]></content:encoded>
            <category>LL-HLS</category>
            <category>OvenMediaEngine</category>
        </item>
        <item>
            <title><![CDATA[Driving the Media Service Market with Advanced Live Streaming Technology — Digital 365]]></title>
            <link>https://ovenmedialabs.com/blog/driving-the-media-service-market-with-advanced-live-streaming-technology-digital</link>
            <guid>https://ovenmedialabs.com/blog/driving-the-media-service-market-with-advanced-live-streaming-technology-digital</guid>
            <pubDate>Thu, 25 May 2023 10:36:12 GMT</pubDate>
            <description><![CDATA[AirenSoft is a company dedicated to researching and developing software as the core driving force behind media services.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-top8sNd8S9nwWHFOvNYUgA-23c328277fd8bafea3a940b5de83cb5d.jpeg" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-top8sNd8S9nwWHFOvNYUgA-23c328277fd8bafea3a940b5de83cb5d.jpeg" width="1319" height="353" class="img_ev3q"></p>
<p><strong>This article is from Digital 365 (Vol. 20), and we have translated it. If you would like to view the original version, please click <strong><a href="https://www.fkii.org/webzine/FKII_2305/people01.php" target="_blank" rel="noopener noreferrer" class=""><strong>HERE</strong></a></strong> (Korean).</strong></p>
<!-- -->
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1--KJTHKSTQEuamhg05ymP9Q-832ee68f727c44199a7d0057e3ad33dc.png" width="1648" height="1648" class="img_ev3q"></p>
<p>IT technology is rapidly transforming the world. In the ever-evolving landscape of the software industry, where global companies transcend national boundaries in endless competition and failure to adapt to technological innovation and market changes leads to obsolescence, there are industry leaders striving to realize a powerful media world by continuously harnessing their potential.</p>
<p><a href="https://airensoft.com/" target="_blank" rel="noopener noreferrer" class=""><strong>AirenSoft</strong></a> has developed an <strong>Open-Source Streaming Server with Sub-Second Latency Large-Scale, and High-Definition</strong> to meet the challenges of the dynamic media ecosystem. AirenSoft aims to make complex and demanding media technology more accessible to everyone and has been developed significantly reducing latency in live streaming and enabling stable high-quality broadcasts regardless of viewer growth.</p>
<p>I had the opportunity to meet Jeheon Han, the CEO of AirenSoft, who leads the company with his extensive understanding and experience in streaming, along with his future insights into the field of media technology.</p>
<p>Q. I kindly request an introduction to the company <strong>AirenSoft</strong>, along with an overview of the <strong>Sub-Second Latency</strong> (or Ultra-Low Latency) <strong>Large-Scale Live Streaming Server</strong> and the <strong>OvenMediaEngine</strong>.</p>
<p>A. The company name AirenSoft derives its meaning from the first five letters of “A-I-R-E-N” representing the Air Engine used in hot air balloons. It signifies a company dedicated to researching and developing software as the core driving force behind media services.</p>
<p>OvenMediaEngine is an Open-Source Streaming Server that significantly reduces the latency time from the Broadcaster (or Steamer) to the Viewer to less than one second, compared to the typical delay of over eight to fifteen seconds. It has been successfully applied in notable cases such as the “<strong>2022 FIFA World Cup Mobile Broadcast</strong>” by SBS and the mobile live commerce platform “<strong>Shoppy Live</strong>” by GS Shop. With OvenMediaEngine, viewers can cheer together in real-time during mobile 2022 FIFA World Cup streaming, hearing their neighbors’ cheers simultaneously with the goal scenes. It also enables true bidirectional live broadcasting in live commerce, where hosts can instantly respond to viewers’ chat questions, resolving any product-related inquiries.</p>
<p><img decoding="async" loading="lazy" alt="Jeheon Han, CEO of AirenSoft, was happy to be interviewed" src="https://ovenmedialabs.com/assets/images/1-V_537EdofqZH-gYQDPSSFw-52a23f3c498be79f3f7d3d014d9354ae.png" width="1600" height="1067" class="img_ev3q"></p>
<p><em>Jeheon Han, CEO of AirenSoft, was happy to be interviewed</em></p>
<p>Q. I’m curious about the background and motivation behind the development of these media solutions. And I would like to know about the biggest challenges the company has faced so far and the key insights or turning points that have helped overcome them.</p>
<p>A. Since its establishment in 2010, AirenSoft has quietly grown in the B2B market, developing various core solutions for media, including Media Players, Media Conversion Systems (Transcoder), and Online Video Platforms (OVP). Among them, the ultra-low latency live streaming solution requires high technical expertise and years of media technology experience. Recognizing the opportunity to gain a competitive edge by fully leveraging its capabilities, AirenSoft embarked on research and development in this field in 2018.</p>
<p>The biggest challenge the company faced was the technical issues that arose during the service development process. However, the developers have overcome these challenges through extensive experimentation and research, resolving problems, and accumulating valuable experience. Building on this experience, AirenSoft is dedicated to continuous efforts in developing even better media solutions in the future.</p>
<p>AirenSoft, leveraging its accumulated technical expertise in the media B2B solutions market, launched a B2C service called OvenCloud in 2015, providing personal video storage space in the cloud. The service underwent over a year of research and development and involved significant infrastructure investments. It gained significant popularity, once achieving the top position in downloads on the Google Play Store, by offering services such as converting old VHS videotapes into digital files and automatically recording gameplay screens in League of Legends (LOL) to store in the cloud. However, the service had to be discontinued due to fierce competition from global IT giants like Google, Amazon, Naver, and Baidu, who offered aggressive promotions with free storage space of up to 1TB. This experience became a crucial turning point in identifying our strengths, weaknesses, opportunities, and threats, leading us to refocus on B2B solutions based on our technical capabilities.</p>
<p>Q. Howard Love, an American entrepreneur, has represented the growth model of startups using the J-curve, which consists of six stages — Create, Release, Morph, Model, Scale, and Harvest. AirenSoft, founded in 2010, is currently in which stage?</p>
<p>A. The OvenMediaEngine is currently in the early stage of Model-Optimization. Our partners, while the primary needs for adopting OvenMediaEngine may be similar across different domains, the specific architecture, features, and performance requirements vary. It’s applied to various domains such as Cloud-based CCTV, Content Delivery Networks (CDN), Live Commerce, Sports Broadcasting, Online Gambling, and Live Black-box, and it has been continuously innovated and upgraded to offer a wide range of functionalities and options. The business model has also evolved from simple package sales to include technical support and partnership models, reflecting a shift in business strategy.</p>
<p><img decoding="async" loading="lazy" alt="Jeheon Han has explained more about OvenMediaEngine" src="https://ovenmedialabs.com/assets/images/1-tqywAnd4Soc63vQqoAvOlg-f7bd3b8892ee0e4ddbb307a45f5a5a46.png" width="1600" height="1067" class="img_ev3q"></p>
<p><em>Jeheon Han has explained more about OvenMediaEngine</em></p>
<p>Q. I’d love to hear about your strategy and business plan for sustainable growth, and how you’ve overcome the death valleys that startups often face.</p>
<p>A. B2B media solutions like OvenMediaEngine often require fine-tuning and dedicated support to optimize their performance for each specific website or platform they are required to and applied to, so offering a single service alone would limit the potential for growth. To overcome this, we have made significant investments to ensure flexibility in adapting to various environments. We have established partnerships with both domestic and international platform companies, enabling us to effectively collaborate and expand our business. Additionally, to address growth limitations, we have automated and packaged our solutions based on the most common use cases, making them readily available on cloud platforms. This strategy allows us to overcome growth constraints and provide scalable and adaptable solutions to our clients.</p>
<p>Since its inception, AirenSoft has released various media solution products. However, OvenMediaEngine is the product that the company has focused all its capabilities on. AirenSoft did not initially adopt the typical high-risk, high-return strategy commonly associated with startups. Instead, the company chose to develop half of its resources into desired media solution products while undertaking media technology-related service projects for survival. Through accumulated experience in the media technology industry, AirenSoft identified an item with the potential for sustained growth and, after eight years, successfully developed a <strong>sub-second latency streaming solution</strong> that is not easily replicable. As a result, we have not experienced the valley of death typically associated with startups. However, it did take a considerable amount of time for us to reduce the proportion of service projects for the sake of the company’s survival.</p>
<p>Q. When I visit AirenSoft’s website, I will notice that it is primarily focused on the title OvenMediaEngine, with the company introduction divided into three stages — <strong>Original Technology</strong>, <strong>Development</strong>, and <strong>Business</strong>. Could you provide an explanation regarding the content featured on the website?</p>
<p>A. In fact, the field of streaming servers is a highly specialized area that can be challenging for even engineers to understand in detail, let alone the general public. Since our primary customers are developers and engineers in the media industry, it may be difficult for the average person to comprehend the website content easily.</p>
<p>The concept of OvenMediaEngine and its detailed specifications, performance, and features are explained under the category of Original Technology. Through consultations with our clients, we also engage in the task of integrating OvenMediaEngine into their existing systems, which falls under the category of Development. Additionally, our business activities involve establishing partnerships with platform companies and technology/business collaborations, which are covered under the category of Business.</p>
<p>Q. What is the meaning of the company logo and the significance of the orange logo color?</p>
<p>A. As for our company logo, it is a representation of the Air Engine used in hot air balloons and its fire. It symbolizes the Air Engine, while the color orange represents both the color of the engine and passion. Please note that the above explanation provides a general understanding and may not cover all the specific details of AirenSoft’s website and logo.</p>
<p>Q. Even if you have a great business idea and excellent technology, it can be challenging to survive if there is no market response. What differentiating public relations methods and marketing strategies does AirenSoft use both domestically and internationally?</p>
<p>A. Streaming servers are the core software of media services because any failure in the streaming server implies a failure in the entire media service. Therefore, companies strive to adopt highly reliable streaming servers, and to ensure this reliability, they require diverse references and a good reputation. From the beginning, AirenSoft has been focused on open-sourcing the OvenMediaEngine, running a global community, and building its technology and credibility.</p>
<p>Many media services worldwide have adopted and are using the OvenMediaEngine. From the perspective of user companies, open-source offers the advantage of being free and having access to the source code, allowing them to handle the worst-case scenarios independently. However, AirenSoft offers paid technical support to ensure the stability of its services, including long-term support (LTS) packages, rapid bug fix deployment, guaranteed updates for the subscription period, and the provision of RPM or Docker images. And we generate revenue by offering commercial software derived from the OvenMediaEngine.</p>
<p><img decoding="async" loading="lazy" alt="NAB Show&nbsp;2023" src="https://ovenmedialabs.com/assets/images/1-OzET3Dc-w_pWAXSU74xi6Q-16ff200781234afa99903d0eb58c4c19.png" width="1600" height="727" class="img_ev3q"></p>
<p><em>NAB Show&nbsp;2023</em></p>
<p>The open-source software and the open-source community, we already have, is the most powerful and differentiating marketing strategy to build trust and showcase our skills. Beyond that, we also regularly attend international exhibitions like NAB and IBC to meet contributors in our community and hear their feedback, all of which are outreach efforts to move us forward.</p>
<p>As part of its marketing and promotion efforts, AirenSoft has been consistently participating in competitions like the Korea Software Awards since last year.</p>
<p>Q. In 2023, there are anticipated to be significant changes in the domestic and international IT industry due to an unprecedented global economic slowdown. What are the trends of competitors in developing streaming services such as OvenMediaEngine in the global market, what are AirenSoft’s comparative advantages and global competitiveness compared to other companies at home and abroad, and what are the strategies for overseas expansion, threats to opportunities, and things to watch out for?</p>
<p>A. Live streaming services are not only essential for platforms like YouTube and Twitch for live broadcasting or Zoom and Google Meet for online meetings but also have a wide range of applications in various fields. For example, recently, there has been a significant rise in the demand for services that stream and monitor the live footage from commercial vehicles’ black boxes, which has legal and insurance implications. We are currently in discussions with top companies in Southeast Asia and Europe regarding related solutions.</p>
<p>The pandemic has brought about significant changes in our lifestyles. Video conferencing and Remote work are no longer unfamiliar experiences. Overseas online zoo startups are collaborating with us to reduce the latency in their live broadcasts.</p>
<p><img decoding="async" loading="lazy" alt="Jeheon Han has spoken about the vision and goals of AirenSoft" src="https://ovenmedialabs.com/assets/images/1-cppW3O3_woB_vDKYWmw0VQ-1eaa0e86b18c22bdcffe5394dca857ad.png" width="1600" height="1067" class="img_ev3q"></p>
<p><em>Jeheon Han has spoken about the vision and goals of AirenSoft</em></p>
<p>In the global market, the size of the ultra-low latency live streaming server market is relatively small, with only a few products available. While there have been numerous server solutions targeting small-scale groups for online conferences, the number of products being developed specifically for <strong>large-scale and high-definition broadcasting</strong> is extremely limited, with less than five options available. In Asia, OvenMediaEngine by AirenSoft stands as one of the few choices, making it nearly unique in the region.</p>
<p>The global economic downturn is expected to reduce the overall market size by dampening investments. However, in the live-streaming industry, competition is already limited due to the scarcity of competing companies. Additionally, AirenSoft, being a small and flexible organization, as well as a specialized development company, is relatively less affected by economic downturns.</p>
<p>The biggest threats to streaming servers are service outages, low reputation regarding stability issues, and compatibility with existing systems. However, OvenMediaEngine, being based on open-source technology, benefits from a global open-source community where users worldwide test it in various environments. This enables rapid improvements in stability and performance, resulting in high reliability. Additionally, open-source solutions have a low entry barrier as they can be adopted during the proof-of-concept stage for media services. Once implemented, commercial media services require technical support and maintenance, which can be incorporated into a viable business model.</p>
<p>Q. Congratulations! OvenMediaEngine won the Grand Prize in the Multimedia S/W category and the Prime Minister’s Award at the 2022 Korea Software Award, hosted by the Ministry of Science and ICT (MSIT) and The Federation of Korean Information Industries (FKII). What is the significance of the award and how does it make you feel, what are the challenges ahead, and do you have any ideas or advice for media technology startups?</p>
<p>A. Winning the Prime Minister’s Award has provided us with the confidence that our direction is on the right track and has boosted our reputation in the business area. While we have received positive feedback from engineers in the open-source community and international exhibitions regarding the technical aspects, receiving significant attention and response from the judges allowed us to showcase our product with even greater confidence, leading to several significant contracts. Going forward, we plan to actively sell paid products and services based on the foundation of the open-source community.</p>
<p><img decoding="async" loading="lazy" alt="Korea Software Awards&nbsp;2022" src="https://ovenmedialabs.com/assets/images/1-ix3v8AYH7pmxLslbssh4cQ-508cc9713b34f7a1db4103d7b983bf1e.png" width="1400" height="790" class="img_ev3q"></p>
<p><em>Korea Software Awards&nbsp;2022</em></p>
<p>As a result of this award, we would like to share industry-specific knowledge with professionals in the same field, both domestically and internationally, and exchange valuable ideas. If needed, we are willing to share and consult on the media technology we possess. We will respond sincerely to any interested companies who reach out to us.</p>
<p>Thank you.</p>]]></content:encoded>
            <category>OvenMediaEngine</category>
            <category>News</category>
        </item>
        <item>
            <title><![CDATA[AirenSoft participates in the 2023 NAB Show]]></title>
            <link>https://ovenmedialabs.com/blog/airensoft-participates-in-the-2023-nab-show</link>
            <guid>https://ovenmedialabs.com/blog/airensoft-participates-in-the-2023-nab-show</guid>
            <pubDate>Fri, 03 Feb 2023 06:33:30 GMT</pubDate>
            <description><![CDATA[AirenSoft will exhibit at the 2023 NAB Show. And our booth is located at W4048 in West Hall.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-ThGO0-XokdcCZHdpxKie7A-51b7daec7ec9c1d1c232102823b43ce2.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-ThGO0-XokdcCZHdpxKie7A-51b7daec7ec9c1d1c232102823b43ce2.png" width="1200" height="628" class="img_ev3q"></p>
<p>AirenSoft will exhibit at the 2023 NAB Show. This show, taking place at the Las Vegas Convention Center from April 15–19, is an unrivaled exhibition for broadcast, media, and technology.</p>
<!-- -->
<p>Our booth is located at <a href="https://nab23.mapyourshow.com/8_0/floorplan/?hallID=A&amp;selectedBooth=W4048" target="_blank" rel="noopener noreferrer" class=""><strong>W4048</strong> in West Hall</a>. If you are thinking of coming to the show, please stop by W4048.</p>
<p>Also, we are preparing to show you <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class=""><strong>OvenMediaEngine</strong></a>, a sub-second latency streaming solution using LLHLS and WebRTC, and give you a chance to experience the <a href="https://airensoft.com/enterprise.html" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine Enterprise Demo</a>.</p>
<p>Finally, if you need to get your <a href="https://registration.experientevent.com/ShowNAB231/Flow/ATT/?#!/registrant//CustomLogin/" target="_blank" rel="noopener noreferrer" class="">Exhibit Pass</a>, register using our FREE code (LV85499) when registering.</p>
<p>Thank you!</p>]]></content:encoded>
            <category>OvenMediaEngine</category>
            <category>News</category>
        </item>
        <item>
            <title><![CDATA[The World Cup with Low Latency Live Streaming: SBS]]></title>
            <link>https://ovenmedialabs.com/blog/the-world-cup-with-low-latency-live-streaming-sbs</link>
            <guid>https://ovenmedialabs.com/blog/the-world-cup-with-low-latency-live-streaming-sbs</guid>
            <pubDate>Fri, 18 Nov 2022 08:14:10 GMT</pubDate>
            <description><![CDATA[SBS introduces OvenMediaEngine to provide Low-Latency Qatar WorldCup 2022 Live!]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-7ooGPdNUgldreKo0bg1pbg@2x-72520a120218ced77a6257340116c82a.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-7ooGPdNUgldreKo0bg1pbg@2x-72520a120218ced77a6257340116c82a.png" width="804" height="204" class="img_ev3q"></p>
<p>Seoul Broadcasting System (SBS), one of the leading South Korean television and radio broadcasters, introduces <a href="https://github.com/AirenSoft/OvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> to provide Low-Latency Qatar WorldCup 2022 Live!</p>
<!-- -->
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-l2k8yV9RF7vig2PxIw_MbA-dae61c5ad229335c8195da5f990d7814.png" width="1600" height="1083" class="img_ev3q"></p>
<p>SBS provided a service with a latency of about 15 seconds by using HLS as a streaming protocol. Still, applying OvenMediaEngine’s LLHLS reduced latency by more than 10 seconds, enabling real-time access to World Cup matches with minimal delay.</p>
<p>It is the first time in Korea to broadcast the World Cup through low-latency live streaming, and it will be one of the few cases worldwide.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-OWW9BAZfRc445eQSPB59Xw-6357007c82ea0014fe1d6d0c04bad77d.png" width="1648" height="1679" class="img_ev3q"></p>
<p>During the World Cup, experience low-latency streaming using the SBS <a href="https://www.sbs.co.kr/" target="_blank" rel="noopener noreferrer" class="">web</a> and app. If you press Live provided in the SBS web/app and turn on the low-latency switch on the bottom right, it automatically applies to low-latency streaming mode.</p>
<p>Thank you!</p>]]></content:encoded>
            <category>Sub-Second Latency</category>
        </item>
        <item>
            <title><![CDATA[OvenMediaEngine is certified as Good Software Level 1 by the TTA]]></title>
            <link>https://ovenmedialabs.com/blog/ovenmediaengine-is-certified-as-good-software-level-1-by-the-tta</link>
            <guid>https://ovenmedialabs.com/blog/ovenmediaengine-is-certified-as-good-software-level-1-by-the-tta</guid>
            <pubDate>Mon, 24 Oct 2022 04:31:21 GMT</pubDate>
            <description><![CDATA[OvenMediaEngine gets Good Software Level 1 certified by the Telecommunications Technology Association.]]></description>
            <content:encoded><![CDATA[<img src="https://ovenmedialabs.com/assets/images/1-EsxtpGgsj7VeIeZW4WgNcQ-f6e0a893dedd04f579ab2a905c28aeb7.png" alt="" class="blog-hero" loading="eager"><aside class="card_CchO" aria-label="Author"><div class="label_jcpa">Written by</div><div class="author_zYag"><a class="avatarLink_SpGf" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs"><img src="https://ovenmedialabs.com/images/airen_ci/OML_Symbol_White.svg" alt="OvenMedia Labs" class="avatar_LotJ"></a><div class="text_V24h"><a class="name_APya" href="https://ovenmedialabs.com/blog/authors/ovenmedialabs">OvenMedia Labs</a><div class="titleGroup_p6kk"><div class="title_idtL">Media Technology Experts Group</div></div></div></div></aside><p><a href="https://github.com/airensoft/oOvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a>, Open-Source Sub-Second Latency Streaming Server using LLHLS and WebRTC, gets Good Software Level 1 certified by the Telecommunications Technology Association (TTA).</p>
<!-- -->
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-EsxtpGgsj7VeIeZW4WgNcQ-f6e0a893dedd04f579ab2a905c28aeb7.png" width="1648" height="1648" class="img_ev3q"></p>
<p>The Good Software (GS) Certification began in 2001 in order to improve the quality of software products and promote the spread of high-quality products.​</p>
<p>To certify that it is good quality software, TTA performs systematic testing and evaluates it based on international standards, ISO/IEC 25023, 25051, and 25041.</p>
<p><img decoding="async" loading="lazy" src="https://ovenmedialabs.com/assets/images/1-vUTn2-r2a5C7cYYDl4AL9A-75c6d7cde2e4e015959571b7d860a535.png" width="1600" height="2233" class="img_ev3q"></p>
<p>So, <a href="https://github.com/airensoft/oOvenMediaEngine" target="_blank" rel="noopener noreferrer" class="">OvenMediaEngine</a> has passed all functional compatibility, performance efficiency, usability, reliability, and security based on international standards. As a result, it has been certified as the highest-quality software.</p>
<p>Thank you!</p>]]></content:encoded>
            <category>OvenMediaEngine</category>
            <category>News</category>
            <category>Release</category>
        </item>
    </channel>
</rss>