Adaptive Streaming

This topic describes how to implement media playback using adaptive bitrate streaming, including live streaming.

Adaptive streaming is media streaming which adjusts its bit rate during playback. It offers reduced network usage and buffering time, and increased picture quality compared to traditional media streaming. For more information, see Adaptive bitrate streaming on Wikipedia.

The AVPlay API supports 3 common adaptive streaming engines. The following table lists the file extensions for which adaptive streaming is enabled.

Table 1. Supported file extensions for adaptive streaming
Streaming Engine File Extensions
Smooth Streaming .ism/Manifest
MPEG-DASH .xml
.mpd
HTTP Live Streaming (HLS) .m3u8
Note

For more information on the versions of HLS supported on Samsung TVs, see the General Features.
The HTML5 video element does not support adaptive streaming. You must use the AVPlay API.

Playing Adaptive Streaming Media

Adaptive streaming media playback is implemented using the AVPlay API in the same way as other media. The AVPlay instance handles the adaptive streaming media type based on the basic specifications for the stream.

When the AVPlay instance is in the IDLE state, you can adjust some adaptive streaming parameters by calling the setStreamingProperty() method with the ADAPTIVE_INFO property:

...
var bitRateString = 'BITRATES=5000~10000|STARTBITRATE=HIGHEST|SKIPBITRATE=LOWEST';

webapis.avplay.setStreamingProperty('ADAPTIVE_INFO', bitRateString);
...
webapis.avplay.prepare();

The following table specifies the allowed parameters and values for the ADAPTIVE_INFO property. You can set multiple parameters by separating them with a "|" character.

Table 2. ADAPTIVE_INFO parameters
Parameter Description Values
"BITRATES" Bit rate of the stream Range indicated by a "~" character, or a fixed bit rate.
For example:
  • BITRATES= 5000~50000
  • BITRATES=6000
"FIXED_MAX_RESOLUTION" Maximum streaming resolution (for 4K and 8K streaming only, if resolutions not defined in meta data) "widthXheight" in pixels, for example "3000x2000"
"STARTBITRATE" Bit rate for the start of adaptive streaming "LOWEST", "HIGHEST", "AVERAGE", or a fixed number as a string
"SKIPBITRATE" Bit rate to ignore during streaming "LOWEST", "HIGHEST", "AVERAGE", or a fixed number as a string
"START_TIME" Resume time for live streaming Time in milliseconds

The following bit rates are recommended for each stream resolution:

Table 3. Recommended streaming bit rates
Resolution Bit Rates
8K (7680x4320) 60Mbps / 45Mbps / 25Mbps
4K (3840x2160) 15Mbps / 10Mbps
2560x1440 6.5Mbps
FHD (1920x1080) 5Mbps, 3Mbps
HD (1280x720) 1.5Mbps

Implementing 4K and 8K Adaptive Streaming

To implement adaptive streaming for 4K and 8K resolution TVs:

  1. Check whether the device supports 4K or 8K video streaming.

  2. Define the supported screen resolutions for your content.
    You can do this in 2 ways:

    • Define each stream resolution in the content meta data:

      • MPEG-DASH stream meta data ("MPD" file)
        ...  
        <AdaptationSet ...>
          ... 
          <Representation id="2" mimeType="video/mp4" codecs="hev1.2.4.L150.90" width="3840" height="2130" ...>
            <BaseURL>input_video_3840x2130_7000k_dashinit.mp4 </BaseURL>
            <SegmentBase indexRangeExact="true" indexRange="2923-3194"> 
              <Initialization range="0-2922"/>
            </SegmentBase>
          </Representation> 
          …
          <Representation id="6" mimeType="video/mp4" codecs="hev1.2.4.L180.90" width="7680" height="4320" ...>
            <BaseURL>input_video_7680x4320_30000k_dashinit.mp4</BaseURL> 
              <SegmentBase indexRangeExact="true" indexRange="2889-3172">
                <Initialization range="0-2888"/>
              </SegmentBase>
            </Representation>
            ...
          </AdaptationSet>
          ```
        
      • HLS stream meta data ("M3U8" file)
        #EXTM3U
        #EXT-X-VERSION:3
        #EXT-X-STREAM-INF:BANDWIDTH=24576000,RESOLUTION=7680x4320 
           7680x4320_1/output.m3u8 
        #EXT-X-STREAM-INF:BANDWIDTH=10240000,RESOLUTION=3840x2160
           3840x2160_1/output.m3u8
        #EXT-X-STREAM-INF:BANDWIDTH=6502400,RESOLUTION=2560x1440
           2560x1440_1/output.m3u8
        #EXT-X-STREAM-INF:BANDWIDTH=4403200,RESOLUTION=1920x1080
           1920x1080_1/output.m3u8
        #EXT-X-STREAM-INF:BANDWIDTH=3072000,RESOLUTION=1280x720
           1280x720_1/output.m3u8
        
        
    • If the stream resolutions are not fully defined in the meta data, or if you want simply to define a maximum stream resolution, set the desired maximum resolution using the setStreamingProperty() method of the AVPlay API:

      ...
      webapis.avplay.setStreamingProperty("ADAPTIVE_INFO", "FIXED_MAX_RESOLUTION=7680x4320");
      ...
      webapis.avplay.prepare();
      

Recommended 8K Adaptive Streaming Content Specifications

The following table describes the recommended specifications for MPEG-DASH streaming at 8K resolution.

Table 4. Recommended content specifications for 8K MPEG-DASH streaming
Item Recommendation Notes
Video Codec HEVC (H.265) Profile: Main10 6.1
Maximum reference frames (decoded buffers): 6
  • Recommeded number of I-frames: 1 frame/GOP
  • GOP structure: SAP1 or SAP2
    If any GOP has continuous I-frames, data feeding delay can cause jittering.
Maximum I-frame size:
  • 60p: 3.5Mbyte
  • 30p: 7Mbyte
Audio Codec AAC (2 channel)
DD/DD+ (5.1, 7.1)
-
Media Format fMP4 fMP4 recommended for compatibility with 2018-19 models
Supported: CMAF (since 2020 models)
Resolution Maximum 7680x4320 Multiple resolutions and bit rates recommended to support changes in network conditions.
Frame Rate 30fps, 25fps, or 24fps Supported: Maximum 60fps (50, 25, 24, 23.97)
Bit Rate Maximum 80Mps Supported: Average 100Mbps
Streaming Protocol MPEG-DASH Recommeded segment duration:
  • VOD: max 6 seconds
  • LIVE: max 2 seconds
HDR HDR10+ Supported: HLG, HDR10, HDR10+
DRM PlayReady
CENC (CTR) encryption
Supported: CBCS encryption (since 2019 models)
Subtitles SMPTE-TT (internal)
WebVTT (external)
-

The following table describes the recommended specifications for HLS streaming at 8K resolution.

Table 5. Recommended content specifications for 8K HLS streaming
Item Recommendation Remarks
Video Codec HEVC (H.265) Profile: Main10 6.1
Maximum reference frames (decoded buffers): 6
  • Recommeded number of I-frames: 1 frame/GOP
  • GOP structure: SAP1 or SAP2
    If any GOP has continuous I-frames, data feeding delay can cause jittering.
Maximum I-frame size:
  • 60p: 3.5Mbyte
  • 30p: 7Mbyte
Audio Codec AAC (2 channel)
DD/DD+ (5.1, 7.1)
Media Format MPEG-TS MPEG-TS recommended for compatibility with 2018-19 models
Supported: fMP4, CMAF (since 2020 models)
Resolution maximum 7680x4320 Multiple resolutions and bit rates recommended to support changes in network conditions.
Frame rate 30fps, 25fps or 24fps Supported: Maximum 60fps (50, 25, 24, 23.97)
Bitrate Maximum 80Mps Supported: Average 100Mbps
Streaming Protocol HLS Recommeded segment duration:
  • VOD: max 6 seconds
  • LIVE: max 4 seconds
HDR HDR10+ Supported: HLG, HDR10, HDR10+
DRM AES-128 encryption Supported: PlayReady with CMAF format (since 2020 models)
CENC (CTR) encryption
, CBCS (since 2019 models)
Subtitles SMPTE-TT (text) (external)
WebVTT (external)
-

Live Streaming Limitations

The jumpForward(), jumpBackward(), and seekTo() methods of the AVPlay API, which are related to live seeking, have limited functionality in live streaming. If you want to use live seek, the streaming server must maintain past and future segments. The seekable range is limited to the segments maintained on the server. The following table lists the streaming engines that support live seek.

Table 6. Streaming engines supporting live seek
Streaming EngineLive Seek Support
Smooth StreamingSupported
MPEG-DASH
HTTP Live Streaming (HLS)