<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by OvenMediaEngine on Medium]]></title>
        <description><![CDATA[Stories by OvenMediaEngine on Medium]]></description>
        <link>https://medium.com/@OvenMediaEngine?source=rss-10679759006d------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*Es_ekF4kxUFigEqIDd--5Q.png</url>
            <title>Stories by OvenMediaEngine on Medium</title>
            <link>https://medium.com/@OvenMediaEngine?source=rss-10679759006d------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 21 Jun 2026 17:52:01 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@OvenMediaEngine/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Low-Latency HLS: The Era of Flexible Low-Latency Streaming]]></title>
            <link>https://medium.com/@OvenMediaEngine/low-latency-hls-the-era-of-flexible-low-latency-streaming-ec675aa61378?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/ec675aa61378</guid>
            <category><![CDATA[streaming-server]]></category>
            <category><![CDATA[llhls]]></category>
            <category><![CDATA[ovenmediaengine]]></category>
            <category><![CDATA[low-latency-hls]]></category>
            <category><![CDATA[open-source]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Mon, 13 Jan 2025 12:40:19 GMT</pubDate>
            <atom:updated>2025-01-13T13:19:50.599Z</atom:updated>
            <content:encoded><![CDATA[<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><a href="https://medium.com/@OvenMediaEngine/webrtc-a-new-paradigm-for-real-time-web-communication-1642a884a4c1">[Part1] WebRTC: A New Paradigm for Real-Time Web Communication</a></li><li><a href="https://medium.com/@OvenMediaEngine/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls-9d00512b3e61">[Part2] HLS: IS it Possible to Achieve Low-Latency Streaming with HLS?</a></li><li><a href="https://medium.com/@OvenMediaEngine/low-latency-hls-the-era-of-flexible-low-latency-streaming-ec675aa61378"><strong>[Part3] Low-Latency HLS: The Era of Flexible Low-Latency Streaming</strong></a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o55HKF96EEBHGig1_ghgVQ.png" /></figure><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><h3>What is Low-Latency HLS?</h3><p>Low-Latency HLS is an extension of the HLS protocol that enables low-latency video streaming while maintaining scalability and stability.</p><h4>Backward Compatibility of HLS</h4><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">About the EXT-X-VERSION tag | Apple Developer Documentation</a></p><ul><li>You must use an #EXT-X-VERSION:3 or higher if you have floating point #EXTINF duration values.</li><li>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>You must use an #EXT-X-VERSION:9 or higher if you have #EXT-X-SKIP.</li><li>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><h3>How Does Low-Latency HLS Reduce Latency?</h3><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><h3>Partial Segments</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CxagLnOl2NBbrE6c94AJgA.png" /></figure><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">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p><p><strong>How It Works</strong>:</p><ul><li>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>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>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">HTTP Live Streaming 2nd Edition</a></p><p><strong>Tags and Attributes</strong>:</p><ul><li><strong>#EXT-X-PART-INF</strong>: The EXT-X-PART-INF tag provides information about the Partial Segments in the Playlist.</li><li><strong>PART-TARGET</strong>: PART-TARGET indicates the Part Target Duration.</li><li><strong>#EXT-X-PART</strong>: The EXT-X-PART tag identifies a Partial Segment.</li><li><strong>URI</strong>: The value is a quoted-string containing the URI for the Partial Segment.</li><li><strong>DURATION</strong>: The value is the duration of the Partial Segment.</li><li><strong>INDEPENDENT</strong>: The value is YES if the Partial Segment contains an independent frame.</li><li><strong>#EXT-X-SERVER-CONTROL</strong>: The EXT-X-SERVER-CONTROL tag allows the Server to indicate support for Delivery Directives.</li><li><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><pre>#EXTM3U<br>#EXT-X-VERSION:10<br>#EXT-X-TARGETDURATION:6<br>#EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=1.500000<br>#EXT-X-PART-INF:PART-TARGET=0.500000<br>...<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_0_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;,INDEPENDENT=YES<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_1_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;,INDEPENDENT=YES<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_2_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_3_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;,INDEPENDENT=YES<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_4_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;<br>...</pre><h3>Playlist Delta Updates</h3><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">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p><h3>Blocking Playlist Reloads</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*W8m3zTFcNcGvbdAXhS_qRg.png" /></figure><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">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p><p><strong>Tags and Attributes</strong>:</p><ul><li><strong>#EXT-X-SERVER-CONTROL</strong>: The EXT-X-SERVER-CONTROL tag allows the Server to indicate support for Delivery Directives.</li><li><strong>CAN-BLOCK-RELOAD</strong>: The value is YES if the server supports Blocking Playlist Reload.</li></ul><p><strong>For example</strong>:</p><pre>#EXTM3U<br>#EXT-X-VERSION:10<br>#EXT-X-TARGETDURATION:6<br>#EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=1.5<br>#EXT-X-PART-INF:PART-TARGET=0.500000<br>#EXT-X-MEDIA-SEQUENCEa:24<br>…</pre><h3>Preload Hints and Blocking of Media Downloads</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2Va_MUTaRIegPRrcc-4LIA.png" /></figure><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">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p><p><strong>Tags and Attributes</strong>:</p><ul><li><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><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><strong>URI</strong>: The value is a quoted-string containing a URI identifying the hinted resource.</li></ul><p><strong>For example</strong>:</p><pre>…<br>#EXT-X-PART-INF:PART-TARGET=0.500000<br>…<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_7_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;,INDEPENDENT=YES<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_8_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;,INDEPENDENT=YES<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_31_9_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;<br>#EXT-X-PRELOAD-HINT:TYPE=PART,URI=&quot;part_1_31_10_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;<br>…</pre><h3>Rendition Reports</h3><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">Enabling Low-Latency HTTP Live Streaming (HLS) | Apple Developer Documentation</a></p><p><strong>Tags and Attributes</strong>:</p><ul><li><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><strong>URI</strong>: The value is a quoted-string containing the URI for the Media Playlist of the specified Rendition.</li><li><strong>LAST-MSN</strong>: The value specifies the Media SequenceNumber of the last Media Segment currently in the specified Rendition.</li><li><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><pre>…<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_33_6_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;<br>#EXT-X-PART:DURATION=0.500,URI=&quot;part_1_33_7_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;,INDEPENDENT=YES<br>#EXT-X-PRELOAD-HINT:TYPE=PART,URI=&quot;part_1_33_8_video_vXjbEtmq_llhls.m4s?session=23_0Ec5agfl&quot;<br>#EXT-X-RENDITION-REPORT:URI=&quot;chunklist_0_video_llhls.m3u8?session=23_0Ec5agfl&quot;,LAST-MSN=33,LAST-PART=8<br>#EXT-X-RENDITION-REPORT:URI=&quot;chunklist_2_video_llhls.m3u8?session=23_0Ec5agfl&quot;,LAST-MSN=33,LAST-PART=8<br>#EXT-X-RENDITION-REPORT:URI=&quot;chunklist_3_video_llhls.m3u8?session=23_0Ec5agfl&quot;,LAST-MSN=33,LAST-PART=8</pre><h3>Delivery Directives</h3><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">HTTP Live Streaming 2nd Edition</a></p><p><strong>Tags and Attributes</strong>:</p><ul><li><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><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><pre>[Latest Playlist]<br>https://domain/app/stream1/chunklist_1_video_llhls.m3u8<br><br>[Future Playlist]<br>https://domain/app/stream1/chunklist_1_video_llhls.m3u8?_HLS_msn=31&amp;_HLS_part=3</pre><h3>Low-Latency HLS Optimization and Performance Analysis in OvenMediaEngine</h3><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 href="https://airensoft.gitbook.io/ovenmediaengine/streaming/low-latency-hls#configuration">Low-Latency HLS | OvenMediaEngine</a></p><h4>OvenMediaEngine LLHLS Configuration</h4><ul><li><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><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><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><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><h3>#01. Configuration — Focus on Stability</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DVXMXV_y3_7GjjrKSU4r3Q.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Partial Segment Duration </strong>(&lt;ChunkDuration&gt;): 1 second</li><li><strong>Segment Duration </strong>(&lt;SegmentDuration&gt;): 4 seconds</li><li><strong>Segment Count</strong> (&lt;SegmentCount&gt;): 10</li><li><strong>Part Hold Back </strong>(&lt;PartHoldBack&gt;): 3 seconds</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tP2cIzHYx9dKSXNWdgGw-g.png" /></figure><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><strong>Result</strong>: 112 frames (3.734 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 0.9 seconds</li><li><strong>Part Hold Back</strong>: 3 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h3>#02. Configuration — Focus on Balance</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wcamHUZ9uj5L9d0eqtLr2Q.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Partial Segment Duration </strong>(&lt;ChunkDuration&gt;): 0.5 seconds</li><li><strong>Segment Duration </strong>(&lt;SegmentDuration&gt;): 4 seconds</li><li><strong>Segment Count</strong> (&lt;SegmentCount&gt;): 10</li><li><strong>Part Hold Back </strong>(&lt;PartHoldBack&gt;): 1.5 second</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YSF8jrg-80zd3YLs_xgo9A.png" /></figure><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><strong>Result</strong>: 58 frames (1.934 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 0.5 seconds</li><li><strong>Part Hold Back</strong>: 1.5 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h3>#03. Configuration — Focus on Low-Latency</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gouHKrFX63t_QKhZIdSExA.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Partial Segment Duration </strong>(&lt;ChunkDuration&gt;): 0.2 seconds</li><li><strong>Segment Duration </strong>(&lt;SegmentDuration&gt;): 4 seconds</li><li><strong>Segment Count</strong> (&lt;SegmentCount&gt;): 10</li><li><strong>Part Hold Back </strong>(&lt;PartHoldBack&gt;): 0.6 seconds</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yqM6jbyjotqITcMwLgLz_w.png" /></figure><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><strong>Result</strong>: 31 frames (1.034 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 0.2 seconds</li><li><strong>Part Hold Back</strong>: 0.6 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h4>Analysis and Insights</h4><ul><li>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>Reducing the Part Hold Back value decreases latency, but values that are too small can increase the risk of buffering.</li></ul><h3>Optimal Configuration Selection</h3><p>Based on the test results, OvenMediaEngine recommends the following Low-Latency HLS settings.</p><ul><li><strong>Partial Segment Duration</strong>: 0.5 seconds</li><li><strong>Segment Duration</strong>: 4 to 6 seconds</li><li><strong>Segment Count</strong>: 10</li><li><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><h3>Conclusion</h3><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><h3>For more information</h3><ul><li><a href="https://airensoft.com/ome.html">OvenMediaEngine Website</a></li><li><a href="https://github.com/AirenSoft/OvenMediaEngine">OvenMediaEngine GitHub</a></li><li><a href="https://airensoft.gitbook.io/ovenmediaengine">OvenMediaEngine User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ec675aa61378" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Rethinking HLS: Is it Possible to Achieve Low-Latency Streaming with HLS?]]></title>
            <link>https://medium.com/@OvenMediaEngine/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls-9d00512b3e61?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/9d00512b3e61</guid>
            <category><![CDATA[ovenmediaengine]]></category>
            <category><![CDATA[http-live-streaming]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[streaming-server]]></category>
            <category><![CDATA[hls]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Mon, 13 Jan 2025 12:10:34 GMT</pubDate>
            <atom:updated>2025-01-13T12:48:37.358Z</atom:updated>
            <content:encoded><![CDATA[<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><a href="https://medium.com/@OvenMediaEngine/webrtc-a-new-paradigm-for-real-time-web-communication-1642a884a4c1">[Part1] WebRTC: A New Paradigm for Real-Time Web Communication</a></li><li><a href="https://medium.com/@OvenMediaEngine/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls-9d00512b3e61"><strong>[Part2] HLS: IS it Possible to Achieve Low-Latency Streaming with HLS?</strong></a></li><li><a href="https://medium.com/@OvenMediaEngine/low-latency-hls-the-era-of-flexible-low-latency-streaming-ec675aa61378">[Part3] Low-Latency HLS: The Era of Flexible Low-Latency Streaming</a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QTfw5SNqrP1WBG6TEADoug.png" /></figure><h3>Why Does HLS Remain Widely Used in Modern Streaming?</h3><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><h3>Reducing Latency in HLS: Understanding and Adjusting Segment Duration</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/904/1*-p9P1KZyjL6Iv0LwNKZqlQ.png" /></figure><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">HTTP Live Streaming (HLS) authoring specification for Apple devices | Apple Developer Documentation</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/650/1*pNzLkKQT3PFV8WVW1NHGgw.png" /></figure><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">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><h4>HLS Tags Used in This Test</h4><ul><li><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><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><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><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><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><h4>Explaining the Test Options: Live Encoder and Streaming Server Settings</h4><p>In this test, below is a breakdown of specific configurations for the live encoder (OBS) and streaming server (OvenMediaEngine) and their roles:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/983/1*LHk3I2Y2IyIEW34zIBFKUQ.png" /></figure><p><strong>In Live Encoder (OBS) Settings,</strong></p><ul><li><strong>Rate Control </strong>(CBR)<strong>: </strong>CBR can send a consistent bitrate throughout the stream, which is suitable for live streaming.</li><li><strong>Bitrate </strong>(2500 Kbps): This specifies the data rate at which the video is streamed.</li><li><strong>FPS </strong>(30): 30 frames per second provides smooth motion for most streaming while keeping processing and bandwidth requirements manageable.</li><li><strong>Keyframe Interval </strong>(1 or 2): Keyframe intervals dictate how often a full video frame (I-frame) is encoded.</li><li><strong>CPU Usage Preset </strong>(ultrafast): The ‘ultrafast’ preset minimizes CPU usage by prioritizing encoding speed over compression efficiency.</li><li><strong>Profile </strong>(Main): The ‘Main’ profile balances compatibility and quality, making it suitable for most streaming.</li><li><strong>Tune </strong>(zerolatency): This tuning option optimizes the encoder for low-latency streaming, reducing buffering and improving performance by prioritizing speed over compression.</li><li><strong>x264 Options </strong>(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><strong>Video </strong>(Pass-through; H264): The server directly forwards the H264-encoded video stream from the encoder without transcoding.</li><li><strong>Audio </strong>(Pass-through; AAC): Similar to video, the AAC-encoded audio is forwarded without transcoding.</li></ul><h4>#01. When Setting the Segment Duration to 1 Second to Reduce Latency</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pBfYr0JcokkQsxTfAZeMGg.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Segment Duration </strong>(#EXT-X-TARGETDURATION): 1 second</li><li><strong>Hold Back </strong>(#EXT-X-SERVER-CONTROL:HOLD-BACK): 3 seconds</li><li><strong>Keyframe Interval</strong>: 1 second</li><li><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><strong>Result</strong>: 110 frames (3.667 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 0.9 seconds (time required to create a new segment)</li><li><strong>Player Hold-Back</strong>: 3 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h4>#02. When Setting a Negative Time Offset to Further Reduce Latency</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L7RlT3G54tZkPZ7ySrOfJQ.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Segment Duration </strong>(#EXT-X-TARGETDURATION): 1 seconds</li><li><strong>Hold Back </strong>(#EXT-X-SERVER-CONTROL:HOLD-BACK): 3 seconds</li><li><strong>Time Offset </strong>(#EXT-X-START:TIME-OFFSET): -1 seconds</li><li><strong>Keyframe Interval</strong>: 1 seconds</li><li><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><strong>Result</strong>: 51 frames (1.7 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 0.9 seconds (time required to create a new segment)</li><li><strong>Player Hold-Back</strong>: 3 seconds</li><li><strong>START:TIME-OFFSET</strong>: -1 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h3>Reducing Latency in HLS: Achieving Low Latency in HLS Without Compromising Stability and Quality</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IfAgWNbsIWKzw5EC2DwdOA.png" /></figure><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>THEO Blog Post — How to Optimize LL-HLS for Low Latency Streaming</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/685/1*4BJ3q-3kQ679m719F0WCSQ.png" /></figure><p><a href="https://www.theoplayer.com/blog/how-to-optimize-ll-hls-for-low-latency-streaming">How to Optimize LL-HLS for Low Latency Streaming</a></p><ul><li>Apple Documentation — HTTP Live Streaming (HLS) Authoring Specification for Apple Devices (Section 1.13)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/931/1*Z9jWeTacqJag64c2-IWq-A.png" /></figure><p><a href="https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices">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><h4>#03. When Setting the Keyframe Interval to 2 Seconds for Quality</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z9GpIkWJZuIlCybTSWbHsQ.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Segment Duration </strong>(#EXT-X-TARGETDURATION): 2 seconds</li><li><strong>Hold Back </strong>(#EXT-X-SERVER-CONTROL:HOLD-BACK): 6 seconds</li><li><strong>Time Offset </strong>(#EXT-X-START:TIME-OFFSET): -2 seconds</li><li><strong>Keyframe Interval</strong>: 2 seconds</li><li><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><strong>Result</strong>: 92 frames (3.067 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 1.9 seconds (time required to create a new segment)</li><li><strong>Player Hold-Back</strong>: 6 seconds</li><li><strong>START:TIME-OFFSET</strong>: -2 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h3>How much do B-Frames affect streaming quality?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sZJ6czqabCTq0JHvlzjE7w.png" /></figure><ul><li><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><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><h4>#04. When Setting the B-Frame Value to 2 for Quality</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R--BwztoNhSaWvsSipD_Rw.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Segment Duration </strong>(#EXT-X-TARGETDURATION): 2 seconds</li><li><strong>Hold Back </strong>(#EXT-X-SERVER-CONTROL:HOLD-BACK): 6 seconds</li><li><strong>Time Offset </strong>(#EXT-X-START:TIME-OFFSET): -2 seconds</li><li><strong>Keyframe Interval</strong>: 2 seconds</li><li><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><strong>Result</strong>: 106 frames (3.534 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 1.9 seconds (time required to create a new segment)</li><li><strong>Player Hold-Back</strong>: 6 seconds</li><li><strong>START:TIME-OFFSET</strong>: -2 seconds</li><li><strong>B-frame Encoding/Decoding:</strong> 0.2 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h3>Stability Issues Discovered with Negative Time Offset</h3><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><h4>Player Instability</h4><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><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">https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.4</a>.</li></ul><h4>Server Instability</h4><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><h4>Factors That Can Cause Jitter</h4><p>There are many factors that can cause jitter, as shown below:</p><ul><li><strong>Variations in Keyframe Interval</strong>: Changes in Keyframe Interval due to factors such as Scenecut options or encoder performance.</li><li><strong>Frame Drops Issues:</strong> Jitter may occur in any situation where frames are dropped.</li><li><strong>Issues with Video Sources </strong>(Encoder): Problems with video sources, such as encoder performance or configuration issues, can lead to jitter.</li><li><strong>Server Transcoding Performance Issues</strong>: Insufficient server performance for processing video data may cause jitter.</li><li><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><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><h3>Reducing Latency in HLS: Finding Optimal Configuration</h3><h4>#05. When Configured for Quality and Stability</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wTvKnCw2vZuT9X5sMgr1bQ.png" /></figure><p><strong>Configuration</strong>:</p><ul><li><strong>Segment Duration </strong>(#EXT-X-TARGETDURATION): 2 seconds</li><li><strong>Hold Back </strong>(#EXT-X-SERVER-CONTROL:HOLD-BACK): 6 seconds</li><li><strong>Keyframe Interval</strong>: 2 seconds</li><li><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><strong>Result</strong>: 205 frames (6.834 seconds) latency</li><li><strong>Server Buffer</strong>: 0.1 to 1.9 seconds (time required to create a new segment)</li><li><strong>Player Hold-Back</strong>: 6 seconds</li><li><strong>Other factors </strong>(Encoder, Ingest, Package, A/V gap, etc.): 0.2 seconds</li></ul><h3>Conclusion</h3><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><h3>For more information</h3><ul><li><a href="https://airensoft.com/ome.html">OvenMediaEngine Website</a></li><li><a href="https://github.com/AirenSoft/OvenMediaEngine">OvenMediaEngine GitHub</a></li><li><a href="https://airensoft.gitbook.io/ovenmediaengine">OvenMediaEngine User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9d00512b3e61" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[WebRTC: A New Paradigm for Real-Time Web Communication]]></title>
            <link>https://medium.com/@OvenMediaEngine/webrtc-a-new-paradigm-for-real-time-web-communication-1642a884a4c1?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/1642a884a4c1</guid>
            <category><![CDATA[webrtc]]></category>
            <category><![CDATA[whips]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[ovenmediaengine]]></category>
            <category><![CDATA[streaming-server]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Fri, 15 Nov 2024 08:41:00 GMT</pubDate>
            <atom:updated>2025-01-13T12:41:41.732Z</atom:updated>
            <content:encoded><![CDATA[<p>In this blog series, we’ll explore how <a href="https://github.com/AirenSoft/OvenMediaEngine"><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><a href="https://medium.com/@OvenMediaEngine/webrtc-a-new-paradigm-for-real-time-web-communication-1642a884a4c1"><strong>[Part1] WebRTC: A New Paradigm for Real-Time Web Communication</strong></a></li><li><a href="https://medium.com/@OvenMediaEngine/rethinking-hls-is-it-possible-to-achieve-low-latency-streaming-with-hls-9d00512b3e61">[Part2] HLS: IS it Possible to Achieve Low-Latency Streaming with HLS?</a></li><li><a href="https://medium.com/@OvenMediaEngine/low-latency-hls-the-era-of-flexible-low-latency-streaming-ec675aa61378">[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><figure><img alt="" src="https://cdn-images-1.medium.com/max/721/1*Tz1I0NhSCeKPb_TKABWOqQ@2x.png" /></figure><h3>What is WebRTC?</h3><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><h3>Components of WebRTC</h3><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><strong>WebRTC API</strong>: The primary tool for developers, featuring APIs like getUserMedia, RTCPeerConnection, and RTCDataChannel, which facilitate camera and microphone access, establish connections and enable data transfer.</li><li><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><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><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><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><h3>Pros and Cons of WebRTC</h3><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><h4><strong>Pros:</strong></h4><ul><li><strong>Real-Time Communication</strong>: WebRTC inherently supports bidirectional communication, making it a significant advantage for real-time interaction applications.</li><li><strong>Broad Browser Support</strong>: Most major browsers, including Chrome and Firefox, support WebRTC natively, eliminating the need for plugins.</li></ul><h4><strong>Cons:</strong></h4><ul><li><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><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><h3>WebRTC Implementation in OvenMediaEngine</h3><p><a href="https://github.com/AirenSoft/OvenMediaEngine">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">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">OvenMediaEngine</a> offers a suite of sophisticated features designed to support stability, scalability, and seamless user experience in large-scale environments.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/721/1*vMCvNSNz-CGrUps07BRLeQ@2x.png" /></figure><h4><strong>Sub-Second Latency Streaming</strong></h4><ul><li>By leveraging WebRTC’s real-time capabilities, <a href="https://github.com/AirenSoft/OvenMediaEngine">OvenMediaEngine</a> enables sub-second latency streaming suitable for live commerce, sports broadcasts, gambling, and other applications where immediate interaction is essential.</li></ul><h4><strong>Various Protocol Input Support</strong></h4><ul><li>In addition to WebRTC, <a href="https://github.com/AirenSoft/OvenMediaEngine">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><h4><strong>Embedded Live Transcoder</strong></h4><ul><li><a href="https://github.com/AirenSoft/OvenMediaEngine">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>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><h4><strong>Adaptive Bitrate Streaming (ABR)</strong></h4><ul><li>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><h4><strong>TCP and UDP Transmission</strong></h4><ul><li>While WebRTC typically uses UDP for low latency, <a href="https://github.com/AirenSoft/OvenMediaEngine">OvenMediaEngine</a> also supports TCP transport for scenarios where UDP is restricted, maintaining stable connectivity in challenging network environments.</li></ul><h4><strong>Scalability</strong></h4><ul><li>For large-scale viewership, <a href="https://github.com/AirenSoft/OvenMediaEngine">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">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">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">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><h3>Optimized WebRTC Testing on OvenMediaEngine</h3><p>We conducted tests in two scenarios to evaluate the WebRTC performance of <a href="https://github.com/AirenSoft/OvenMediaEngine">OvenMediaEngine</a>. The test results clearly demonstrate the real-world performance and efficiency of <a href="https://github.com/AirenSoft/OvenMediaEngine">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><figure><img alt="" src="https://cdn-images-1.medium.com/max/983/1*5uLTnGl1YGG49NW44vQ_Sg.png" /></figure><ul><li><strong>Audio Encoder</strong>: FFmpeg AAC</li><li><strong>Video Encoder</strong>: x264</li><li><strong>Rate Control</strong>: CBR</li><li><strong>Bitrate</strong>: 2500 Kbps</li><li><strong>FPS</strong>: 30</li><li><strong>Keyframe Interval</strong>: 2s</li><li><strong>CPU Usage Preset</strong>: ultrafast</li><li><strong>Profile</strong>: Baseline</li><li><strong>Tune</strong>: zerolatency</li><li><strong>x264 Options</strong>: scenecut=0, bframes=0</li></ul><h4>#01. RTMP to WebRTC using OBS and OvenMediaEngine</h4><p>The first test scenario involved streaming RTMP input to WebRTC output.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/983/1*ZX0OkRY8WyiVqZ-Dm-DChw.png" /></figure><ul><li><strong>RTMP Ingress URL: </strong>rtmp://&lt;OvenMediaEngine IP&gt;[:RTMP Listen Port]/&lt;App Name&gt;/&lt;Stream Name&gt;</li><li><strong>Configure OvenMediaEngine: </strong>Encode media sources ingested into OvenMediaEngine to <strong>Opus</strong> via the embedded live transcoder.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bfyICyKPFqMv3WiQcMndtQ.png" /></figure><ul><li><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><h4>#02. WHIP to WebRTC using OBS and OvenMediaEngine</h4><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><figure><img alt="" src="https://cdn-images-1.medium.com/max/983/1*evXRrkS4T6VMbpN_bwGLIg.png" /></figure><ul><li><strong>WHIP Ingress URL: </strong>http[s://&lt;OvenMediaEngine IP&gt;[:WebRTC Listen Port]/&lt;App Name&gt;/&lt;Stream Name&gt;?direction=whip</li><li><strong>Configure OvenMediaEngine: </strong>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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HSPW5m-DW7MwPJSntOxhng.png" /></figure><ul><li><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><h3>Conclusion</h3><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">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 — <em>typically around 10 to 15 seconds </em>— 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><h3>For more information</h3><ul><li><a href="https://airensoft.com/ome.html">OvenMediaEngine Website</a></li><li><a href="https://github.com/AirenSoft/OvenMediaEngine">OvenMediaEngine GitHub</a></li><li><a href="https://airensoft.gitbook.io/ovenmediaengine">OvenMediaEngine User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1642a884a4c1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OvenMediaEngine — Getting Started with OME Docker Launcher]]></title>
            <link>https://medium.com/@OvenMediaEngine/ovenmediaengine-getting-started-with-ome-docker-launcher-2d1723279b1c?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/2d1723279b1c</guid>
            <category><![CDATA[ovenmediaengine]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[streaming-server]]></category>
            <category><![CDATA[open-source]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Mon, 27 May 2024 07:02:20 GMT</pubDate>
            <atom:updated>2024-05-28T18:36:07.079Z</atom:updated>
            <content:encoded><![CDATA[<h3>OvenMediaEngine — Getting Started with OME Docker Launcher</h3><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 src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FMkfVfI--OT4%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMkfVfI--OT4&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FMkfVfI--OT4%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/9b8d066c9b23677ca33927a3a19ea64f/href">https://medium.com/media/9b8d066c9b23677ca33927a3a19ea64f/href</a></iframe><p>Below are the commands and examples used in the video guide.</p><h3>AWS EC2 Instance Setup</h3><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 href="https://airensoft.gitbook.io/ovenmediaengine/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><h4>Ports used by default</h4><ul><li>API (Manager) is configured to use 8081 (Port)</li><li>API (Manager) is configured to use 8082 (TLSPort)</li><li>RTMP Provider is configured to use 1935 (Port)</li><li>SRT Provider is configured to use 9999 (Port)</li><li>WebRTC Provider is configured to use 3333 (Port)</li><li>WebRTC Provider is configured to use 3334 (TLSPort)</li><li>WebRTC Provider is configured to use 10000–10004/UDP (IceCandidate)</li><li>WebRTC Provider is configured to use 3478 (TcpRelay)</li><li>OVT Publisher is configured to use 9000 (Port)</li><li>LLHLS Publisher is configured to use 3333 (Port)</li><li>LLHLS Publisher is configured to use 3334 (TLSPort)</li><li>WebRTC Publisher is configured to use 3333 (Port)</li><li>WebRTC Publisher is configured to use 3334 (TLSPort)</li><li>WebRTC Publisher is configured to use 10000–10004/UDP (IceCandidate)</li><li>WebRTC Publisher is configured to use 3478 (TcpRelay)</li></ul><h3>Installing Docker in EC2</h3><p>The commands used to install Docker on an EC2 instance in the video guide are as follows:</p><pre># Install Dqocker<br>$sudo yum install docker -y<br><br># Run Docker<br>$ sudo service docker start</pre><h3>Installing OvenMediaEngine on Docker in EC2</h3><p>For detailed steps, refer to the <a href="https://airensoft.gitbook.io/ovenmediaengine/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><pre># Run OME Docker Launcher<br>$ curl -OL &#39;https://raw.githubusercontent.com/AirenSoft/OvenMediaEngine/master/misc/ome_docker_launcher.sh&#39; &amp;&amp; chmod +x ome_docker_launcher.sh<br><br># Show OME Docker Launcher help message<br>$ sudo ./ome_docker_launcher.sh -h<br><br># Download the latest Docker image and setup<br>$ sudo ./ome_docker_launcher.sh setup<br><br># Start a docker container<br>$ sudo OME_HOST_IP=&lt;Instance_IP&gt; ./ome_docker_launcher.sh start</pre><h3>Broadcasting with OBS to OvenMediaEngine</h3><p>If you would like to know how to set up and use protocols that OvenMediaEngine can ingest, please refer to the <a href="https://airensoft.gitbook.io/ovenmediaengine/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><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>Bitrate: <strong>2500kbps</strong></li><li>Keyframe Interval: <strong>1s</strong></li><li>CPU Usage Preset: <strong>ultrafast</strong></li><li>Profile: <strong>main</strong></li><li>Tune: <strong>zerolatency</strong></li><li>x264 Options: <strong>bframes=0 threads=8</strong></li></ul><h3>Streaming Playback</h3><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 href="https://airensoft.gitbook.io/ovenmediaengine/streaming"><strong>Streaming</strong></a> section in the OvenMediaEngine User Guide.</p><h4>Without TLS</h4><ul><li>OvenPlayer Demo: <a href="http://demo.ovenplayer.com"><strong>http://demo.ovenplayer.com</strong></a></li><li>WebRTC: <strong>ws://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;</strong></li><li>LLHLS: <strong>http://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;/llhls.m3u8</strong></li></ul><h4>With TLS</h4><ul><li>OvenPlayer Demo: <a href="https://demo.ovenplayer.com"><strong>https://demo.ovenplayer.com</strong></a></li><li>WebRTC: <strong>wss://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;</strong></li><li>LLHLS: <strong>https://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;/llhls.m3u8</strong></li></ul><h3>Configuring OvenMediaEngine Options</h3><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 href="https://airensoft.gitbook.io/ovenmediaengine"><strong>OvenMediaEngine User Guide</strong></a>.</p><pre># Go to the folder where Server.xml is located<br>$cd /usr/share/ovenmediaengine/conf/<br><br># Edit Server.xml<br>$ sudo vi Server.xml</pre><p>Also, if you modify Server.xml, you always need to turn OvenMediEngine on and off to apply it.</p><pre># Stop OvenMediaEngine<br>$ sudo ./ome_docker_launcher.sh stop<br><br># Start OvenMediaEngine<br>$ sudo OME_HOST_IP=&lt;Instance_IP&gt; ./ome_docker_launcher.sh start</pre><h3>TLS Encryption (Certification)</h3><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 href="https://airensoft.gitbook.io/ovenmediaengine/configuration/tls-encryption"><strong>TLS Encryption</strong></a>, a subtopic of Configuration in the OvenMediaEngine User Guide.</p><pre># Install Certbot<br>$ sudo yum -y install certbot<br><br># Certificate issuance<br>$ sudo certbot certonly --standalone -d &lt;Domain&gt; -m &lt;Email&gt; --agree-tos  -n<br><br># Check whether the certificate was issued correctly<br>$ sudo ls -al /etc/letsencrypt/live/&lt;Domain&gt;</pre><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><pre>&lt;TLS&gt;<br>  &lt;CertPath&gt;./cert.crt&lt;/CertPath&gt;<br>  &lt;KeyPath&gt;./cert.key&lt;/KeyPath&gt;<br>  &lt;ChainCertPath&gt;./cert.ca-bundle&lt;/ChainCertPath&gt;<br>&lt;/TLS&gt;</pre><p>Here’s how to copy these:</p><pre># Copy and rename cert.pem to cert.crt <br>$ sudo cp /etc/letsencrypt/live/&lt;Domain&gt;/cert.pem /usr/share/ovenmediaengine/conf/cert.crt<br><br># Copy and rename privkey.pem to cert.key<br>$ sudo cp /etc/letsencrypt/live/&lt;Domain&gt;/privkey.pem /usr/share/ovenmediaengine/conf/cert.key<br><br># Copy and rename fullchain.pem to cert.ca-bundle<br>$ sudo cp /etc/letsencrypt/live/&lt;Domain&gt;/fullchain.pem /usr/share/ovenmediaengine/conf/cert.ca-bundle</pre><p>Next, check whether the certificate has been properly copied to the OvenMediaEngine directory. If confirmed, restart OvenMediaEngine to apply it.</p><pre># Check the certificate has been copied properly<br>$ sudo ls -al /usr/share/ovenmediaengine/conf<br><br># Stop OvenMediaEngine<br>$ sudo ./ome_docker_launcher.sh stop<br><br># Start OvenMediaEngine<br>$ sudo OME_HOST_IP=&lt;Instance_IP&gt; ./ome_docker_launcher.sh start</pre><p>To verify that your certificate is working properly, stream using TLS.</p><ul><li>OvenPlayer Demo: <a href="https://demo.ovenplayer.com"><strong>https://demo.ovenplayer.com</strong></a></li><li>WebRTC: <strong>wss://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;</strong></li><li>LLHLS: <strong>https://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;/llhls.m3u8</strong></li></ul><h3>Adaptive Bitrate Streaming (ABR)</h3><p>The example used in the video guide is below: Please refer to <a href="https://airensoft.gitbook.io/ovenmediaengine/transcoding#adaptive-bitrate-streaming-abr"><strong>Adaptive Bitrate Streaming (ABR)</strong></a> in the OvenMediaEngine User Guide for detailed information on the function.</p><pre>&lt;OutputProfile&gt;<br> &lt;Name&gt;bypass_stream&lt;/Name&gt;<br> &lt;OutputStreamName&gt;${OriginStreamName}&lt;/OutputStreamName&gt;<br> &lt;!--LLHLS URL : https://domain/app/stream/abr.m3u8 --&gt; <br> &lt;Playlist&gt;<br>  &lt;Name&gt;For ABR&lt;/Name&gt;<br>  &lt;FileName&gt;abr&lt;/FileName&gt;<br>  &lt;Options&gt; &lt;!-- Optinal --&gt;<br>   &lt;!-- <br>   Automatically switch rendition in WebRTC ABR <br>   [Default] : true<br>   --&gt;<br>   &lt;WebRtcAutoAbr&gt;true&lt;/WebRtcAutoAbr&gt; <br>  &lt;/Options&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;Bypass&lt;/Name&gt;<br>   &lt;Video&gt;bypass_video&lt;/Video&gt;<br>   &lt;Audio&gt;bypass_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;FHD&lt;/Name&gt;<br>   &lt;Video&gt;video_1920&lt;/Video&gt;<br>   &lt;Audio&gt;bypass_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;HD&lt;/Name&gt;<br>   &lt;Video&gt;video_720&lt;/Video&gt;<br>   &lt;Audio&gt;bypass_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;SD&lt;/Name&gt;<br>   &lt;Video&gt;video_480&lt;/Video&gt;<br>   &lt;Audio&gt;bypass_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;FHD_Opus&lt;/Name&gt;<br>   &lt;Video&gt;video_1920&lt;/Video&gt;<br>   &lt;Audio&gt;opus_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;HD_Opus&lt;/Name&gt;<br>   &lt;Video&gt;video_720&lt;/Video&gt;<br>   &lt;Audio&gt;opus_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;SD_Opus&lt;/Name&gt;<br>   &lt;Video&gt;video_480&lt;/Video&gt;<br>   &lt;Audio&gt;opus_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br> &lt;/Playlist&gt;<br> &lt;!--LLHLS URL : https://domain/app/stream/llhls.m3u8 --&gt; <br> &lt;Playlist&gt;<br>  &lt;Name&gt;Change Default&lt;/Name&gt;<br>  &lt;FileName&gt;llhls&lt;/FileName&gt;<br>  &lt;Rendition&gt;<br>   &lt;Name&gt;HD&lt;/Name&gt;<br>   &lt;Video&gt;video_720&lt;/Video&gt;<br>   &lt;Audio&gt;bypass_audio&lt;/Audio&gt;<br>  &lt;/Rendition&gt;<br> &lt;/Playlist&gt; <br> &lt;Encodes&gt;<br>  &lt;Audio&gt;<br>   &lt;Name&gt;bypass_audio&lt;/Name&gt;<br>   &lt;Bypass&gt;true&lt;/Bypass&gt;<br>  &lt;/Audio&gt;<br>  &lt;Video&gt;<br>   &lt;Name&gt;bypass_video&lt;/Name&gt;<br>   &lt;Bypass&gt;true&lt;/Bypass&gt;<br>  &lt;/Video&gt;<br>  &lt;Audio&gt;<br>   &lt;Name&gt;opus_audio&lt;/Name&gt;<br>   &lt;Codec&gt;opus&lt;/Codec&gt;<br>   &lt;Bitrate&gt;128000&lt;/Bitrate&gt;<br>   &lt;Samplerate&gt;48000&lt;/Samplerate&gt;<br>   &lt;Channel&gt;2&lt;/Channel&gt;<br>  &lt;/Audio&gt;<br>  &lt;Video&gt;<br>   &lt;Name&gt;video_1920&lt;/Name&gt;<br>   &lt;Codec&gt;h264&lt;/Codec&gt;<br>   &lt;Bitrate&gt;1024000&lt;/Bitrate&gt;<br>   &lt;Framerate&gt;30&lt;/Framerate&gt;<br>   &lt;Width&gt;1920&lt;/Width&gt;<br>   &lt;Height&gt;1080&lt;/Height&gt;<br>   &lt;Preset&gt;faster&lt;/Preset&gt;<br>  &lt;/Video&gt;<br>  &lt;Video&gt;<br>   &lt;Name&gt;video_720&lt;/Name&gt;<br>   &lt;Codec&gt;h264&lt;/Codec&gt;<br>   &lt;Bitrate&gt;724000&lt;/Bitrate&gt;<br>   &lt;Framerate&gt;30&lt;/Framerate&gt;<br>   &lt;Width&gt;1280&lt;/Width&gt;<br>   &lt;Height&gt;720&lt;/Height&gt;<br>   &lt;Preset&gt;faster&lt;/Preset&gt;<br>  &lt;/Video&gt;<br>  &lt;Video&gt;<br>   &lt;Name&gt;video_480&lt;/Name&gt;<br>   &lt;Codec&gt;h264&lt;/Codec&gt;<br>   &lt;Bitrate&gt;224000&lt;/Bitrate&gt;<br>   &lt;Framerate&gt;30&lt;/Framerate&gt;<br>   &lt;Width&gt;720&lt;/Width&gt;<br>   &lt;Height&gt;480&lt;/Height&gt;<br>   &lt;Preset&gt;faster&lt;/Preset&gt;<br>  &lt;/Video&gt;<br> &lt;/Encodes&gt;<br>&lt;/OutputProfile&gt;</pre><p>Now that Server.xml has been modified you must restart OvenMediaEngine.</p><pre># Stop OvenMediaEngine<br>$ sudo ./ome_docker_launcher.sh stop<br><br># Start OvenMediaEngine<br>$ sudo OME_HOST_IP=&lt;Instance_IP&gt; ./ome_docker_launcher.sh start</pre><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><h4>Without TLS</h4><ul><li>OvenPlayer Demo: <a href="http://demo.ovenplayer.com"><strong>http://demo.ovenplayer.com</strong></a></li><li>WebRTC: <strong>ws://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;/&lt;FileName&gt;</strong></li><li>LLHLS: <strong>http://&lt;Instance_IP&gt;:3333/app/&lt;Stream_Name&gt;/&lt;FileName&gt;.m3u8</strong></li></ul><h4>With TLS</h4><ul><li>OvenPlayer Demo: <a href="https://demo.ovenplayer.com"><strong>https://demo.ovenplayer.com</strong></a></li><li>WebRTC: <strong>wss://&lt;Domain&gt;:3334/app/&lt;Stream_Name&gt;/&lt;FileName&gt;</strong></li><li>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>WebRTC: <strong>VP8, H.264, Opus</strong></li><li>LLHLS: <strong>H.264, AAC</strong></li></ul><h3>REST API</h3><p>Please refer to <a href="https://airensoft.gitbook.io/ovenmediaengine/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><pre> &lt;Bind&gt;<br>  &lt;Managers&gt;<br>   &lt;API&gt;<br>    &lt;Port&gt;${env:OME_APIT_PORT:8081}&lt;/Port&gt;<br>    &lt;TLSPort&gt;${env:OME_APIT_PORT:8082}&lt;/TLSPort&gt;<br>    &lt;WorkerCount&gt;1&lt;/WorkerCount&gt;<br>   &lt;/API&gt;<br>  &lt;/Managers&gt;<br>  ...<br> &lt;/Bind&gt;</pre><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><pre> &lt;Managers&gt;<br>  &lt;Host&gt;<br>   &lt;Names&gt;<br>    &lt;Name&gt;*&lt;/Name&gt;<br>   &lt;/Names&gt;<br>   &lt;TLS&gt;<br>    &lt;CertPath&gt;./cert.crt&lt;/CertPath&gt;<br>    &lt;KeyPath&gt;./cert.key&lt;/KeyPath&gt;<br>    &lt;ChainCertPath&gt;./cert.ca-bundle&lt;/ChainCertPath&gt;<br>   &lt;/TLS&gt;<br>  &lt;/Host&gt;<br>  &lt;API&gt;<br>   &lt;AccessToken&gt;ID:Password&lt;/AccessToken&gt;<br>   &lt;CrossDomains&gt;<br>    &lt;Url&gt;*&lt;/Url&gt;<br>   &lt;/CrossDomains&gt;<br>  &lt;/API&gt;<br> &lt;/Managers&gt;</pre><p>When you are finished editing Server.xml, restart OvenMediaEngine again so that OvenMediaEngine can read the modified Server.xml.</p><pre># Stop OvenMediaEngine<br>$ sudo ./ome_docker_launcher.sh stop<br><br># Start OvenMediaEngine<br>$ sudo OME_HOST_IP=&lt;Instance_IP&gt; ./ome_docker_launcher.sh start</pre><p>Restart OvenMediaEngine, and in the displayed dashboard, check that the API-related ports are recognized properly.</p><pre>API (Manager) is configured to use 8081 (Port)<br>API (Manager) is configured to use 8082 (TLSPort)</pre><p>Then, let’s call the API according to the API request pattern.</p><h4>Without TLS</h4><ul><li><strong>http://&lt;Instance_IP&gt;:8081/v1/&lt;Resource&gt;</strong></li></ul><h4>With TLS</h4><ul><li><strong>https://&lt;Domain&gt;:8082/v1/&lt;Resource&gt;</strong></li></ul><p>Please refer to the <a href="https://airensoft.gitbook.io/ovenmediaengine/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><h3>Conclusion</h3><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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z1ez34kIPE7FcUQaoddeWg.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2d1723279b1c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to transmit Low-Latency Streaming to broader viewers and share securely?]]></title>
            <link>https://medium.com/@OvenMediaEngine/how-to-transmit-low-latency-streaming-to-broader-viewers-and-share-securely-afe1fa6d7cc5?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/afe1fa6d7cc5</guid>
            <category><![CDATA[signed-urls]]></category>
            <category><![CDATA[low-latency-streaming]]></category>
            <category><![CDATA[ovenstudio-llhls]]></category>
            <category><![CDATA[low-latency-hls]]></category>
            <category><![CDATA[aws-cloudfront]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Wed, 03 Jan 2024 10:05:16 GMT</pubDate>
            <atom:updated>2024-01-03T10:05:16.241Z</atom:updated>
            <content:encoded><![CDATA[<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">OvenStudio LLHLS</a> with <strong>AWS CloudFront </strong>(CDN)<strong> </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">OvenStudio LLHLS</a> automates the entire process.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/804/1*JdJom5ts2XHECXlRNYUsew@2x.png" /></figure><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">OvenStudio LLHLS</a> simplifies the integration with AWS CloudFront, making it a breeze.</p><h3>What is AWS CloudFront?</h3><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><h4><em>What is CDN (Content Delivery Network)?</em></h4><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><h4>Advantages of CDN:</h4><ul><li><strong>Swift Transmission</strong>: Caching content at edge locations facilitates rapid content delivery.</li><li><strong>Scalability</strong>: Easily scales servers to accommodate increased traffic, suitable for large-scale streaming services.</li><li><strong>Security</strong>: Supports encryption via SSL/TLS, ensuring secure data transmission.</li><li><strong>Cost-Efficiency</strong>: Efficiently utilizes bandwidth and resources, resulting in cost savings.</li></ul><h4>Why CDN in Streaming Servers?</h4><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">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">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><h3>What is a Signed URL?</h3><p>A Signed URL in <a href="https://airensoft.com/os.html">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><h4>Additionally, Using the Signed URL in OvenStudio LLHLS:</h4><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><h4>How to Utilize the Signed URL Feature?</h4><ul><li><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><strong>Copyright Protection</strong>: Signed URL prevents unauthorized copying and distribution of content, providing a safeguard for copyright protection.</li><li>Activities such as Online courses, Live forums, Webinars, Sports broadcasts, Online auctions, Internal previews, and more can benefit from these functionalities.</li></ul><h3>Setting Up Signed URL in OvenStudio LLHLS:</h3><p><a href="https://airensoft.com/os.html">OvenStudio LLHLS</a> makes it incredibly simple to configure and use the Signed URL feature with AWS CloudFront. Follow these steps:</p><h4><strong>Connect with AWS CloudFront (Signed URL):</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8YFP_7DJNIpkqDP73VqnaA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rXuGNXgYRzEO2CzCSJOqMA.png" /></figure><ul><li>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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6UeogbyPTNKUSRQTMitaeA.png" /></figure><ul><li>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"><em>AWS Identity and Access Management User Guide</em></a>.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6G49PPSwwiCKbf-8p_RPLQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZA1UKsYHkAhzrTNpbB44Mw.png" /></figure><ul><li>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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*m6CpPSO26rzpAtIdJBNHKg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wKPOodG2oFXjXB_jErDXeg.png" /></figure><ul><li>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><h3>Renewing Signed URL in Case of Leakage</h3><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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GiP7SfFs5AjpeYUaSBKyVQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-PLHQ_iMy67CeFgNsr9vnw.png" /></figure><ul><li>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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rrvp4237OGO0PPf1nuBLkA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2M0rmKTz2C0I8FKrd1PFHg.png" /><figcaption>When comparing the URL before and after refreshing, you can observe a change in the Auth syntax of the Signed Edge URL.</figcaption></figure><ul><li><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><h3>Using the Signed URL via API</h3><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"><strong>Access Token</strong></a> in the OvenStudio LLHLS’s User Guide. :</p><h4><strong>Issuing Access Tokens:</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8YFP_7DJNIpkqDP73VqnaA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Dc2ryhK_f_dc4ffc0Wew9Q.png" /></figure><ul><li>First, access OvenStudio LLHLS, enter the<strong> [Settings]</strong> screen, and select <strong>[REST API]</strong> from the left menu.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*O19MqnZHBAQjPp510hFCwQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*03hN5LRmoPSH7OTbXN6aKQ.png" /></figure><ul><li>Under<strong> [REST API]</strong>, in the <strong>[Tokens] </strong>section, click <strong>[Generate new token]</strong> to acquire an access token.</li></ul><h4><strong>Parameter Descriptions:</strong></h4><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"><strong>Body Parameters</strong> of Signed URL</a>.”</p><ul><li><strong>“stream_name”</strong> requires the name of the streaming box for which the Signed URL is generated.</li><li><strong>“date_less_than”</strong> ensures the URL is valid until a specified date and time, and this parameter is mandatory.</li><li><strong>“date_grater_than”</strong> makes the URL valid from a specified date and time.</li></ul><h4><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls/v1/signed-url#examples">Examples</a>:</h4><ul><li>To create a Signed URL for the streaming named OvenStudio, valid until January 1, 2024, 00:00:00 (UTC).</li></ul><pre>{<br> &quot;stream&quot;: {<br>  &quot;stream_name&quot;: &quot;OvenStudio&quot;<br> },<br> &quot;policy&quot;: {<br>  &quot;date_less_than&quot;: &quot;2024-01-01T00:00:00Z&quot;<br> }<br>}</pre><ul><li>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><pre>{<br> &quot;stream&quot;: {<br>  &quot;stream_name&quot;: &quot;OvenStudio_Xmas&quot;<br> },<br> &quot;policy&quot;: {<br>  &quot;date_less_than&quot;: &quot;2023-12-26T00:00:00Z&quot;,<br>  &quot;date_greater_than&quot;: &quot;2023-12-24T00:00:00Z&quot;<br> }<br>}</pre><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"><strong>Signed URL</strong></a> section.</p><h3>Conclusion</h3><p><a href="https://airensoft.com/os.html">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">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">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">OvenStudio LLHLS</a>.</p><h3>For more information</h3><ul><li><a href="https://airensoft.com/os">OvenStudio LLHLS Website</a></li><li><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">OvenStudio LLHLS on AWS Marketplace</a></li><li><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls">OvenStudio LLHLS User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=afe1fa6d7cc5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to use ABR Streaming in OvenStudio LLHLS?]]></title>
            <link>https://medium.com/@OvenMediaEngine/how-to-use-abr-streaming-in-ovenstudio-llhls-50b1022111d2?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/50b1022111d2</guid>
            <category><![CDATA[ovenstudio-llhls]]></category>
            <category><![CDATA[low-latency-streaming]]></category>
            <category><![CDATA[low-latency-hls]]></category>
            <category><![CDATA[adaptive-bitrate]]></category>
            <category><![CDATA[abr]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Thu, 07 Dec 2023 11:10:29 GMT</pubDate>
            <atom:updated>2023-12-07T11:10:29.799Z</atom:updated>
            <content:encoded><![CDATA[<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><figure><img alt="" src="https://cdn-images-1.medium.com/max/801/1*reoaVyM-7dkuMomcDmmi0w@2x.png" /></figure><p><strong>ABR (<em>Adaptive Bitrate</em>)</strong> <strong>Streaming </strong>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><h3>Advantages of ABR</h3><ul><li><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><strong>Traffic Efficiency</strong>: ABR efficiently utilizes bandwidth, optimizing network traffic.</li><li><strong>Reaching a Larger Audience</strong>: ABR enables streaming in diverse environments, allowing streamed content to reach a broader audience.</li></ul><h3>Where Can ABR Be Applied?</h3><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><h3>How Does OvenStudio LLHLS Provide ABR?</h3><ul><li><strong>Embedded Live Transcoder</strong>: <a href="https://airensoft.com/os.html">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><strong>ABR Profiles</strong>: <a href="https://airensoft.com/os.html">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><strong>Dynamic Streaming</strong>: <a href="https://airensoft.com/os.html">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><strong>Automatic Profile Switching</strong>: When changes are detected in network speed and stability, <a href="https://github.com/AirenSoft/OvenPlayer">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">OvenPlayer</a>.</li></ul><p>In summary, <a href="https://airensoft.com/os.html">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">OvenPlayer</a>, optimized for <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a>, to provide a smoother streaming experience.</p><h3>Can’t use ABR with Low-Latency Streaming?</h3><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">OvenStudio LLHLS</a> smoothly delivers ABR with a latency of less than 3 seconds. <a href="https://airensoft.com/os.html">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">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">OvenStudio LLHLS</a> now!</p><h3>Configuring ABR in OvenStudio LLHLS</h3><p>To provide ABR functionality, <a href="https://airensoft.com/os.html">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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GLhb149KHL1JeYX6N2huIw.png" /></figure><ul><li>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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4ZO8R5kB6cUordWQVIEs3g.png" /></figure><ul><li>From there, select the <strong>[ABR] </strong>tab in the left menu to access the ABR settings page.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*E5iqWZXrDDWEinxbnT1VhQ.png" /></figure><ul><li>On the ABR settings page, choose the encoding presets you want to use from the<strong> [Profiles]</strong> section. You need to select at least two profiles to enable ABR functionality.</li><li>After selecting all the profiles you want to use, please press the<strong> [Apply]</strong> 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><h3>Using ABR in OvenStudio LLHLS</h3><ul><li>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 href="https://medium.com/@AirenSoft/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio-65fc78873779"><strong>previous post (</strong><em>Low-Latency Streaming to OvenStudio LLHLS using OBS Studio</em>)</a> for guidance.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*etHP02f0VmsjowH5_jkzlA.png" /></figure><ul><li>If the streaming appears correctly in OvenStudio LLHLS, hover your mouse over the OvenPlayer provided on the detailed view page. Click on the<strong> [Settings] </strong>icon on the right side of the controller bar that appears.</li><li>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/"><strong>OvenPlayer Demo</strong></a>. Give it a try now!</li></ul><h3>Conclusion</h3><p>Don’t worry about concerns that delivering multiple profiles will prevent low-latency streaming. <a href="https://airensoft.com/os.html">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">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">OvenStudio LLHLS</a>.</p><h3>For more information</h3><ul><li><a href="https://airensoft.com/os">OvenStudio LLHLS Website</a></li><li><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">OvenStudio LLHLS on AWS Marketplace</a></li><li><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls">OvenStudio LLHLS User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=50b1022111d2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why OvenStudio LLHLS issues Free TLS and Domain?]]></title>
            <link>https://medium.com/@OvenMediaEngine/why-ovenstudio-llhls-issues-free-tls-and-domain-d2c41179b74f?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/d2c41179b74f</guid>
            <category><![CDATA[low-latency-streaming]]></category>
            <category><![CDATA[ovenstudio-llhls]]></category>
            <category><![CDATA[https]]></category>
            <category><![CDATA[tls]]></category>
            <category><![CDATA[webrtc]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Fri, 01 Dec 2023 07:55:01 GMT</pubDate>
            <atom:updated>2023-12-01T07:55:01.911Z</atom:updated>
            <content:encoded><![CDATA[<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><figure><img alt="" src="https://cdn-images-1.medium.com/max/801/1*27pSa0XBV-kpmjHjqEc9OA@2x.png" /></figure><p>Now, with <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a>, you can address these issues effectively. <a href="https://airensoft.com/os.html">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><h3>Why is TLS Needed for WebRTC Ingress?</h3><p>WebRTC <em>(Web Real-Time Communication) </em>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><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><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><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><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><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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fXKe24onk8H2zzwdnl4aeA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JK4wYOnk6AeihrOnNJyr0Q.png" /></figure><p><a href="https://airensoft.com/os.html">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"><strong>Quick Start Guide for OvenStudio LLHLS</strong></a>.</p><h3>Why Automatic TLS and Domain Setup on Initial Connection in OvenStudio LLHLS?</h3><p><a href="https://airensoft.com/os.html">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">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 href="https://medium.com/@AirenSoft/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit-de1153cdfc09"><strong><em>previous post</em></strong></a><em>)</em>. Therefore, on the initial connection, <a href="https://airensoft.com/os.html">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">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><h3>The Advantages of OvenStudio LLHLS’s TLS and Automatic Domain Issuance Policy</h3><ul><li><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><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><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><h3>Conclusion</h3><p>Automatically setting up free TLS certificates and domains using <a href="https://airensoft.com/os.html">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><h3>For more information</h3><ul><li><a href="https://airensoft.com/os">OvenStudio LLHLS Website</a></li><li><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">OvenStudio LLHLS on AWS Marketplace</a></li><li><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls">OvenStudio LLHLS User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d2c41179b74f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[WebRTC to LLHLS Streaming with OvenStudio LLHLS using OvenLiveKit]]></title>
            <link>https://medium.com/@OvenMediaEngine/webrtc-to-llhls-streaming-with-ovenstudio-llhls-using-ovenlivekit-de1153cdfc09?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/de1153cdfc09</guid>
            <category><![CDATA[low-latency-streaming]]></category>
            <category><![CDATA[webrtc]]></category>
            <category><![CDATA[low-latency-hls]]></category>
            <category><![CDATA[ovenlivekit]]></category>
            <category><![CDATA[ovenstudio-llhls]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Tue, 19 Sep 2023 10:11:28 GMT</pubDate>
            <atom:updated>2023-09-19T10:11:28.548Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/801/1*9RVJldGxW7li8I7o3LGPqw@2x.png" /></figure><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">OvenStudio LLHLS</a>, don’t worry. It comes with <a href="https://github.com/AirenSoft/OvenLiveKit-Web">OvenLiveKit</a>, which allows you to transmit streams through WebRTC directly from a web browser, without the need for additional software or plugins.</p><h4>Key Benefits Using OvenLiveKit</h4><ol><li><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><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">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">OvenLiveKit</a> within <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a>.</p><h3>OvenLiveKit?</h3><p><a href="https://github.com/AirenSoft/OvenLiveKit-Web">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">OvenMediaEngine</a>, an Open-Source Sub-Second Latency Streaming Server. However, as you may be aware, <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a> is developed with it, which means that <a href="https://github.com/AirenSoft/OvenLiveKit-Web">OvenLiveKit</a> will seamlessly work in <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*diEsNBh9y3ChUwQN2QnkAA.png" /></figure><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">OvenStudio LLHLS</a>. If you’re interested in learning more, check out the links below.</p><ul><li><a href="https://github.com/AirenSoft/OvenLiveKit-Web">OvenLiveKit GitHub</a></li><li><a href="https://space.ovenplayer.com/">OvenSpace Demo</a></li></ul><h3>Using OvenLiveKit in Your Web Browser</h3><p><a href="https://github.com/AirenSoft/OvenLiveKit-Web">OvenLiveKit</a> is provided along with <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a>. Follow these steps to start WebRTC streaming with it. This guide used the Chrome browser.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JbwzFvTOAkPdakoxVbdSnQ.png" /></figure><p>1.<strong> Create a Streaming Box:</strong> Access OvenStudio LLHLS via your web browser and create a streaming box. After that, go to the detailed view page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tdbRaFxSrQEP1WYPNW1Vqw.png" /></figure><p>2. <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:</p><h4><strong>WebCam/Mic</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eJyYWvSENKgGPujYnicrfw.png" /></figure><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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8TjoGaIoFsDy9yZMcw9g8Q.png" /></figure><p>iii) If you encounter issues capturing your screen in the WebCam/Mic settings screen, please check your browser’s permissions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*T0xmfad7bfcBLtdEKngETA.png" /></figure><p>iv) In the bottom right, compare the latency between the capturing OvenLiveKit and OvenPlayer on the left. It’s really that simple.</p><h4><strong>Screen Sharing</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XLY77yePwQzNigeNH2MriQ.png" /></figure><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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4wFRSvFZSLylaDswuq2KkQ.png" /></figure><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><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4-SYIYdf4iG8QkUXFSm69A.png" /></figure><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><h3>Going Live with Sub-3-Second Latency</h3><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">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><h3>Conclusion</h3><p>This guide demonstrates how you can stream your webcam/microphone or screen capture directly to <a href="https://airensoft.com/os.html">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">OvenStudio LLHLS</a> and enhance your interaction with viewers.</p><h3>For more information</h3><ul><li><a href="https://airensoft.com/os">OvenStudio LLHLS Website</a></li><li><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">OvenStudio LLHLS on AWS Marketplace</a></li><li><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls">OvenStudio LLHLS User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=de1153cdfc09" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Low-Latency Streaming to OvenStudio LLHLS using OBS Studio]]></title>
            <link>https://medium.com/@OvenMediaEngine/low-latency-streaming-to-ovenstudio-llhls-using-obs-studio-65fc78873779?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/65fc78873779</guid>
            <category><![CDATA[low-latency-hls]]></category>
            <category><![CDATA[ovenstudio-llhls]]></category>
            <category><![CDATA[streaming-server]]></category>
            <category><![CDATA[low-latency-streaming]]></category>
            <category><![CDATA[llhls]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Thu, 14 Sep 2023 11:34:26 GMT</pubDate>
            <atom:updated>2023-09-14T11:34:26.238Z</atom:updated>
            <content:encoded><![CDATA[<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">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">OvenStudio LLHLS</a> using <strong>software encoders</strong> like <a href="https://github.com/AirenSoft/OvenLiveKit-Web">OvenLiveKit</a>, <a href="https://play.google.com/store/apps/details?id=com.airensoft.ovenstreamencoder.camera&amp;hl=en_US">OvenStreamEncoder</a>, OBS, Xsplit,</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/801/1*HyB9u_BlmFpbi9PmvlxwbA@2x.png" /><figcaption>With Software Encoder</figcaption></figure><p>or even <strong>hardware encoders</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/801/1*z4TIVIUyyz4Me2MGmXz3OQ@2x.png" /><figcaption>With Hardware Encoder</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/801/1*3jKWsMPEelXBMh6J-JAJ0w@2x.png" /></figure><p><a href="https://obsproject.com/">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">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">OvenStudio LLHLS</a>.</p><h3>OvenStudio LLHLS?</h3><p><a href="https://airensoft.com/os.html">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">OvenStudio LLHLS</a> is your solution.</p><h3>Sending Media Sources to OvenStudio LLHLS</h3><p>The process of sending media sources to <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a> using OBS is straightforward and can be summarized in the following steps:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Shx63amHpvEswTkPPhAibw.png" /></figure><p>1. <strong>OBS Installation</strong>: Start by downloading the appropriate version of OBS for your operating system from the <a href="https://obsproject.com/">official website</a> and install it on your computer. Launch OBS and load the media source you want to broadcast.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0VrMpaoet0GX_ZyJkweNyQ.png" /></figure><p>2. <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.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rjsgMS9VybT3n0wyYaVYiA.png" /></figure><p>3.<strong> Create a Streaming Box</strong>: After logging into OvenStudio LLHLS, click the [<strong>+</strong>] button on the main page to create a Managed Stream.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0liKMG-Lce8EuPJJaP5sYQ.png" /></figure><p>4. <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.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xyRJGDK3Mq8Bwqp7QEraHQ.png" /></figure><p>5. <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.</p><ul><li><strong>WebRTC — </strong>wss://{domain}:{port}/{app name}/{<strong>stream name?direction=send</strong>}</li><li><strong>WHIP — </strong>wss://{domain}:{port}/{app name}/{<strong>stream name?direction=whip</strong>}</li><li><strong>SRT — </strong>srt://{domain}:{port}?streamid=srt%3A%2F%2F{domain}%3A{port}%2F{app name}%2F{<strong>stream name</strong>}</li><li><strong>RTMP — </strong>rtmp://{domain}:{port}/{app name}/{<strong>stream name</strong>}</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Im6tkiNxaeKii3iqfIL0Yw.png" /></figure><p>6.<strong> Connect and Start Streaming</strong>: Once you’ve configured OBS, click the [<strong>Start Streaming</strong>] button to begin streaming your video to OvenStudio LLHLS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Sd9sFOyHOxHcxHP-sWvH4w.png" /></figure><p>7.<strong> Low-Latency Streaming Monitoring</strong>: 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/">OvenPlayer</a>, <a href="https://www.theoplayer.com/test-your-stream-hls-dash-hesp">THEO Player</a>, and others.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wNDmuDbFxNThdls1tIqGtQ.png" /></figure><p>8. <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.</p><h3>In Conclusion</h3><p><a href="https://airensoft.com/os.html">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 —<em> </em><a href="https://medium.com/@AirenSoft/what-you-can-do-with-ovenstudio-llhls-86e626341dc5"><strong><em>What you can do with OvenStudio LLHLS</em></strong></a>.</p><p>The technological advancements and flexibility offered by <a href="https://airensoft.com/os.html">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">OvenStudio LLHLS</a>!</p><h3>For more information</h3><ul><li><a href="https://airensoft.com/os">OvenStudio LLHLS Website</a></li><li><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">OvenStudio LLHLS on AWS Marketplace</a></li><li><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls">OvenStudio LLHLS User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=65fc78873779" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to choose an AWS EC2 Instance for using OvenStudio LLHLS?]]></title>
            <link>https://medium.com/@OvenMediaEngine/how-to-choose-an-aws-ec2-instance-for-using-ovenstudio-llhls-4678d2858b7e?source=rss-10679759006d------2</link>
            <guid isPermaLink="false">https://medium.com/p/4678d2858b7e</guid>
            <category><![CDATA[low-latency-hls]]></category>
            <category><![CDATA[ovenstudio-llhls]]></category>
            <category><![CDATA[low-latency-streaming]]></category>
            <category><![CDATA[streaming-server]]></category>
            <category><![CDATA[llhls]]></category>
            <dc:creator><![CDATA[OvenMediaEngine]]></dc:creator>
            <pubDate>Tue, 12 Sep 2023 05:46:14 GMT</pubDate>
            <atom:updated>2023-09-12T06:09:34.015Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/827/1*HvFmukpRjHl207C97sumAg.png" /></figure><p>When it comes to deploying <a href="https://airensoft.com/os.html">OvenStudio LLHLS</a> on the <a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">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">OvenStudio LLHLS</a> deployment.</p><h4>#01. Consider Your Workload and Streaming Requirements</h4><p>Before diving into EC2 instance types, evaluate your streaming workload and requirements. Factors to consider include:</p><ul><li><strong>Concurrent Viewers</strong>: Estimate the number of simultaneous viewers you expect. This will impact the CPU, memory, and network resources needed.</li><li><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><h4>#02. CPU and Memory Requirements</h4><p>For <a href="https://airensoft.com/os.html">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><strong>M5 Instances</strong>: These provide a balanced mix of resources, ideal for moderate CPU and memory-intensive workloads.</li><li><strong>C5 Instances</strong>: Designed for compute-intensive tasks, these instances offer high CPU performance.</li></ul><h4>#03. Network Performance</h4><p>Since streaming involves transmitting large amounts of data, network performance matters. EC2 instance types vary in their network capabilities:</p><ul><li><strong>Network Performance Levels</strong>: Instances like the C4, C5, M4, and M5 families generally offer higher network performance.</li><li><strong>Enhanced Networking</strong>: Look for instances that support Enhanced Networking, which can improve network throughput and latency.</li></ul><h4>#04. EC2 Instance Sizing</h4><p><a href="https://airensoft.com/os.html">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><strong>T2: </strong>t2.micro, t2.small, t2.medium, t2.large, t2.xlarge, t2.2xlarge</li><li><strong>T3: </strong>t3.micro, t3.small, t3.medium, t3.large, t3.xlarge, t3.2xlarge</li><li><strong>T3A: </strong>t3a.micro, t3a.small, t3a.medium, t3a.large, t3a.xlarge, t3a.2xlarge</li><li><strong>M4: </strong>m4.large, m4.xlarge, m4.2xlarge, m4.4xlarge, m4.10xlarge, m4.16xlarge</li><li><strong>M5: </strong>m5.large, m5.xlarge, m5.2xlarge, m5.4xlarge, m5.8xlarge, m5.12xlarge, m5.16xlarge, m5.24xlarge, m5.metal</li><li><strong>M5A: </strong>m5a.large, m5a.xlarge, m5a.2xlarge, m5a.4xlarge, m5a.8xlarge, m5a.12xlarge, m5a.16xlarge, m5a.24xlarge</li><li><strong>M5AD: </strong>m5ad.large, m5ad.xlarge, m5ad.2xlarge, m5ad.4xlarge, m5ad.8xlarge, m5ad.12xlarge, m5ad.16xlarge, m5ad.24xlarge</li><li><strong>M5D: </strong>m5d.large, m5d.xlarge, m5d.2xlarge, m5d.4xlarge, m5d.8xlarge, m5d.12xlarge, m5d.16xlarge, m5d.24xlarge, m5d.metal</li><li><strong>M5ZN: </strong>m5zn.large, m5zn.xlarge, m5zn.2xlarge, m5zn.3xlarge, m5zn.6xlarge, m5zn.12xlarge, m5zn.metal</li><li><strong>M6I: </strong>m6i.large, m6i.xlarge, m6i.2xlarge, m6i.4xlarge, m6i.8xlarge, m6i.12xlarge, m6i.16xlarge, m6i.24xlarge, m6i.32xlarge, m6i.metal</li><li><strong>C4: </strong>c4.8xlarge</li><li><strong>C5: </strong>c5.large, <strong>c5.xlarge </strong><em>(Vendor Recommended)</em>, c5.2xlarge, c5.4xlarge, c5.9xlarge, c5.12xlarge, c5.18xlarge, c5.24xlarge, c5.metal</li><li><strong>C5D: </strong>c5d.9xlarge, c5d.12xlarge, c5d.18xlarge, c5d.24xlarge, c5d.metal</li><li><strong>C5A: </strong>c5a.8xlarge, c5a.12xlarge, c5a.16xlarge, c5a.24xlarge</li><li><strong>C5N: </strong>c5n.9xlarge, c5n.18xlarge, c5n.metal</li><li><strong>C6I: </strong>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><strong>Low-cost and General Purpose </strong>(T2): <a href="https://aws.amazon.com/ec2/instance-types/t2">Amazon EC2 T2 Instances</a></li><li><strong>Low-cost and General Purpose </strong>(T3): <a href="https://aws.amazon.com/ec2/instance-types/t3/">Amazon EC2 T3 Instances</a></li><li><strong>General Purpose </strong>(M5~M6): <a href="https://aws.amazon.com/ec2/instance-types/?nc1=h_ls#General_Purpose">Amazon EC2 Instance M-Types</a></li><li><strong>Optimized Computing</strong> (C4~C6): <a href="https://aws.amazon.com/ec2/instance-types/?nc1=h_ls#Compute_Optimized">Amazon EC2 Instance C-Types</a></li></ul><h4>#05. Cost Optimization</h4><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"><strong>HERE</strong></a> for more details.</p><h3>Conclusion</h3><p>Selecting the right EC2 instance type for <a href="https://airensoft.com/os.html">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">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">OvenStudio LLHLS</a> deployment on the <a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">AWS Marketplace</a>.</p><h3>For more information</h3><ul><li><a href="https://airensoft.com/os">OvenStudio LLHLS Website</a></li><li><a href="https://aws.amazon.com/marketplace/pp/prodview-xwvoj4om6w4ee">OvenStudio LLHLS on AWS Marketplace</a></li><li><a href="https://ovenstudio.gitbook.io/ovenstudio-llhls">OvenStudio LLHLS User Guide</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4678d2858b7e" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>