Install & Upgrade Specifications Setup Streaming Local/FTP File HLS HTML5 Video RTMP SRT MPEG-TS MPEG-DASH Decklink Newtek NDI Webcam & Screen RTSP Advanced Settings Continuous Streaming Multi-bitrate Video Codecs NVIDIA GPU Intel GPU NETINT VPU Video Overlay

IPTV Live Video Encoding & Streaming HLS

Apple HLS HTTP Live Streaming (HLS) is an HTTP-based adaptive bitrate streaming communications protocol developed by Apple Inc. It is widely supported by most media players, web browsers and mobile devices.

HLS breaks video content into small chunks and delivers them via standard HTTP web servers. Viewers download these chunks on-the-fly, allowing them to start watching immediately without waiting for the entire video to download.

Stream from 3rd Party HLS Server

Choose http as source type, enter http or https m3u8 url as source media. e.g. https://my.videosite.com/live/playlist.m3u8

Stream HLS to handheld phone and pad devices (Android & iOS)

First of all, please note IPVTL DOES NOT output Apple HLS directly. Instead, it generates HLS playlist file (.m3u8) and segment files (MPEG-TS or CMAF fragmented MP4) on your local disk. These files can then be fed to web server like Nginx, Apache or Microsoft IIS to provide HLS to end player running in user Apps or browsers.

IVPTL output HLS

In Windows version, the default output playlist file is C:\media\ipvt_ch#.m3u8. And segment files will be generated in C:\media\ipvt_ch#-##.ts. You can edit Target URL and change it to your perferred folder and file name. Be sure to put them under your web server publish folder to be found and downloaded.

More HLS settings, like segment length, playlist entry size and encryption (DRM) are availabe in Advanced HLS Config below.

Best Practice - Working with Nginx to provide Apple HLS streaming

  1. Install Nginx, for example to C:\nginx.
  2. In C:\nginx, create folder media as virtual root folder for hls.
  3. In C:\nginx\media, create folder hls to place m3u8 and segments.
  4. In IPVTL, set output file to C:\nginx\media\hls\stream.m3u8.
  5. Edit nginx.conf, in http{} -> server{} section, add location{} section for hls as below:
http {
  ...
  server {
    ...
    location /hls {
      types {
        application/vnd.apple.mpegurl m3u8;
        video/mp2t ts; # or video/mp4 mp4 m4s if using CMAF;
      }
      root media;
      add_header Cache-Control no-cache;
    }
    ...
  }
  ...
}

If both Nginx and IPVTL channel start successfully, the output HLS stream can be played at http://<your-web-server>/hls/stream.m3u8.

HLS Adaptive Bitrate Streaming

Adaptive bitrate streaming is a method of video streaming over HTTP where the source content is encoded at multiple bit rates. Video streaming clients can dynamically adapt in real-time, in order to provide the best quality for each individual viewer. ABR streams take into account network conditions, screen size and device capabilities and can adjust on the fly to changes in available bandwidth and device resources.

To set up HLS adaptive bitrate streaming, follow instructions in multi-bitrate section. If multi-bitrate profiles are set up, there will be playlists generated for each profile, like 1080p.m3u8, 720p.m3u8 and 360p.m3u8. And there will be an extra master playlist generated as well, like:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1920x1080
1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1200000,RESOLUTION=1280x720
720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
360p.m3u8

The master playlist, together with each profile playlist shall be published to webserver for content delivery.

Advanced HLS Config

If you are streaming into HLS format, the output playlist and segment files details can be changed, including segment format and duration, playlist entry size, playlist base URL for internet clients and master playlist name.

IPVTL HLS Config

You can also enable CENC encryption in ISO/IEC 23001-7 standard AES cbcs for DRM systems. To accomplish that, an AES key and an extra metadata file is required. The key file has 16 octets key in binary format that can be generated using openssl command like:

$ openssl rand -hex 16 | xxd -r -p > stream.key

The metadata file is text format with content below:

AES key URI # to be placed in playlist for internet clients
AES key file path # to be read from local folder for segments encryption
AES initialization vector (IV) # hexadecimal string as segments sequence number, optional

For example:

http://your-web-server/hls/stream.key
d:\media\hls\stream.key
0123456789ABCDEF0123456789ABCDEF

Enter the metadata file path in AES128 Encryption Key Info File to enable stream encryption.

Note: AES key is maintained externally and can be periodically updated to achieve higher streaming security.