Stream live media over HTTP

Stream live media over HTTP, using HDS and HLS. Know the prerequisites, configurations, and details about how to package.

Prerequisites for live streaming over HTTP

To use HTTP Dynamic Streaming (HDS) and HTTP Live Streaming (HLS) to serve live streams to clients over HTTP, publish the streams to the HTTP Live Packager service on Adobe Media Server (rootinstall/applications/livepkgr). The livepkgr service ingests the streams, packages them into fragments, and delivers the fragments to Flash and iOS clients in real-time.

To complete these tutorials, use the following software:

Publish and play a single live stream over HTTP

  1. Install Adobe Media Server 5 and choose to install Apache HTTP Server.

  2. Install Flash Media Live Encoder and configure it to use absolute time.

    1. Close Flash Media Live Encoder.

    2. Open the Flash Media Live Encoder rootinstall\conf\config.xml file in a text editor.

      The default installation location on Windows is C:\Program Files\Adobe\Flash Media Live Encoder 3.2.

      The default installation location on Mac OS is Macintosh HD:Applications:Adobe:Flash Media Live Encoder 3.2.

    3. Set the tag //flashmedialiveencoder_config/mbrconfig/streamsynchronization/enable to true:

      <flashmedialiveencoder_config> 
          <mbrconfig> 
              <streamsynchronization> 
                  <!-- "true" to enable this feature, "false" to disable.                    --> 
                  <enable>true</enable>
    4. Save the file.

  3. To publish a live stream to Adobe Media Server, start Flash Media Live Encoder and do the following:

    1. In the Encoding Options panel, from the Preset pop-up menu, choose High Bandwidth (800 Kbps) — H.264. For Audio Format, choose AAC.

      Note:

      Flash Media Live Encoder on Windows doesn’t support AAC encoding. To add support for AAC, purchase the MainConcept AAC Encoder.

      Flash Media Live Encoder Encoding Options panel

    2. Click the wrench next to Format to open Advanced Encoder Settings and do the following:

      • Profile—Main

      • Level—3.1

      • Keyframe Frequency—4 or a multiple of <FragmentDuration> in the applications/livepkgr/events/_definst_/liveevent/Event.xml file. The default value of <FragmentDuration> is 4000 milliseconds.

        note: For information about profile and level support, see Supported file formats and codecs.



        Flash Media Live Encoder Advanced Encoder Settings

    3. In the AMS URL text box enter the following:

      rtmp://localhost/livepkgr

      note: Use the RTMP protocol to stream the content to the livepkgr application on Adobe Media Server. You can substitute an IP address or a domain name for “localhost”.

    4. In the Stream text box enter the following:

      livestream?adbe-live-event=liveevent

      note: The applications/livepkgr/main.asc file expects this value.

    5. Deselect Save to File.

    6. Click Start.

  4. (Adobe HTTP Dynamic Streaming) To play the media in Flash Media Playback, do the following:

    1. Open Flash Media Playback in a web browser.

    2. Note:

      Flash Media Playback requires Flash Player 10.1 to support HTTP Dynamic Streaming.

    3. In Video Source, enter:

      http://localhost/hds-live/livepkgr/_definst_/liveevent/livestream.f4m

      For information about the request URL, see URLs for publishing and playing live streams over HTTP.

    4. Select Yes under the question “Are you using HTTP Streaming or Adobe Access 2.0?”.

    5. Click Preview. Click Play.

  5. (Adobe HTTP Dynamic Streaming) To play the media in Strobe Media Playback, see Pre-built media players.

  6. (Apple HTTP Live Streaming) Use the following URL:

    http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream.m3u8

    For information about where to use the URL to serve various iOS devices, QuickTime, and Safari, see HTTP Live Streaming Overview in the iOS Reference Library.

    For information about the request URL, see URLs for publishing and playing live streams over HTTP.

Note:

Replace localhost and servername with the domain name or IP address of the computer hosting Adobe Media Server. If you’re using a Adobe Media Server hosting provider, they can give you this value.

Publish and play live multi-bitrate streams over HTTP

  1. Install Adobe Media Server 5 and choose to install Apache HTTP Server.

  2. Install Flash Media Live Encoder and configure it to use absolute time.

    1. Close Flash Media Live Encoder.

    2. Open the Flash Media Live Encoder rootinstall\Conf\config.xml file in a text editor.

    3. Set the tag //flashmedialiveencoder_config/mbrconfig/streamsynchronization/enable to true:

      <flashmedialiveencoder_config> 
          <mbrconfig> 
              <streamsynchronization> 
                  <!-- "true" to enable this feature, "false" to disable.                    --> 
                  <enable>true</enable>
    4. Save the file.

  3. Browse to rootinstall/applications/livepkgr/events/_definst_/liveevent and do the following:

    • Edit the Event.xml file to look like the following:

      <Event> <EventID>liveevent</EventID> <Recording> <FragmentDuration>4000</FragmentDuration> <SegmentDuration>16000</SegmentDuration> <DiskManagementDuration>3</DiskManagementDuration> </Recording> </Event>
    • Remove the Manifest.xml file from the liveevent folder or rename it.

  4. (Adobe HTTP Dynamic Streaming) For multi-bitrate streaming, Flash and AIR media players request an F4M manifest file that contains the location and bitrate of each live stream. This type of F4M file is called a set-level manifest. To create an set-level manifest, do the following:

    1. Open rootinstall/tools/f4mconfig/configurator/f4mconfig.html in a browser.

    2. Select the f4m file type.

    3. Stream URIs can be absolute or relative to a Base URI. Enter the following for the Base URI:

      http://localhost/hds-live/livepkgr/_definst_/liveevent

    4. Enter the following for each stream and click Add:

      Stream URI

      Bitrate

      livestream1.f4m

      150

      livestream2.f4m

      500

      livestream3.f4m

      700

    5. To preview the file, click View Manifest. The manifest file looks like this:

      <manifest xmlns="http://ns.adobe.com/f4m/2.0"> 
          <baseURL>http://localhost/hds-live/livepkgr/_definst_/liveevent/</baseURL> 
          <media href="livestream1.f4m" bitrate="150"/> 
          <media href="livestream2.f4m" bitrate="500"/> 
          <media href="livestream3.f4m" bitrate="700"/> 
      </manifest>
    6. Click Save Manifest and save the file as liveevent.f4m to rootinstall/webroot.

      The media player requests this file from a web server. This tutorial saves the file to rootinstall/webroot, but the file can be served from any location on any webserver. This file does not need to live on Adobe Media Server. This file can also have any name.

  5. (Apple HTTP Live Streaming) iOS devices request an M3U8 variant playlist file that contains the location, bitrate, and optionally the codec of each stream. To create an M3U8 file, do the following:

    1. If the Set-level F4M/M3U8 File Generator tool isn’t open, double-click rootinstall/tools/f4mconfig/configurator/f4mconfig.html to open it in a browser.

    2. Select m3u8.

    3. Enter the Stream URI and bitrate for each stream. Stream URIs can be absolute or relative. If they are relative, they are relative to the m3u8 file.

      Note:

      You can’t use a Base URI when generating an M3U8 file.

      This tutorial uses the following Stream URI settings:

      Stream URI

      Bitrate

      http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream1.m3u8

      150

      http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream2.m3u8

      500

      http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream3.m3u8

      700

    4. For m3u8 files, you can optionally add a codec for each stream.

      If one stream is audio-only, specify an audio codec. Specify audio and video codecs for the other streams in the manifest. See Publish an audio-only stream (HLS).

    5. To view the file, click View Manifest. The m3u8 file looks like this:

      #EXTM3U 
      #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=150000 
      http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream1.m3u8 
      #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000 
      http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream2.m3u8 
      #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000 
      http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream3.m3u8
    6. Save the file as liveevent.m3u8 to the folder rootinstall/webroot.

      The media player requests this file from a web server. This tutorial saves the file to rootinstall/webroot, but the file can be served from any location on any webserver. This file does not need to live on Adobe Media Server.

  6. To publish a live stream to Adobe Media Server, start Flash Media Live Encoder and do the following:

    1. In the Encoding Options panel, from the Preset pop-up menu, choose Multi Bitrate - 3 Streams (1500 Kbps) - H.264. Choose Audio Format AAC.

      Note:

      Flash Media Live Encoder on Windows doesn’t support AAC encoding. To add support for AAC, purchase the MainConcept AAC Encoder.

    2. Click the wrench next to Format to open Advanced Encoder Settings. For Keyframe frequency, select 4 seconds.

      Note:

      This value matches the <FragmentDuration> value in the applications/livepkgr/events/_definst_/liveevent/Event.xml file. The <FragmentDuration> value is in milliseconds.

    3. For Bit Rate, choose 150, 500, and 700.

    4. In the AMS URL text box, enter the following:

      rtmp://localhost/livepkgr

      note: This application is installed with Adobe Media Server and contains a main.asc file and configuration files for live HTTP Dynamic Streaming.

    5. In the Stream text box, enter the following:

      livestream%i?adbe-live-event=liveevent

      note: The applications/livepkgr/main.asc file expects this value. Flash Media Live Encoder uses the variable %i to create multiple stream names: livestream1, livestream2, livestream3, and so on. To use another encoder, provide your own unique stream names, for example, livestream1?adbe-live-event=liveevent, livestream2?adbe-live-event=liveevent.

    6. Deselect Save to File.

    7. Click Start.

  7. (Adobe HTTP Dynamic Streaming) Flash Media Playback does not support set-level manifest files. To play the media, use Strobe Media Playback. Strobe Media Playback is used in the sample video player that installs with Adobe Media Server.

    1. Copy the videoPlayer directory from rootinstall/samples/videoPlayer to rootinstall/webroot.

    2. Browse to the sample player in a web browser:

      http://localhost/videoPlayer/videoplayer.html

    3. In Video Source, enter the following:

      http://localhost/liveevent.f4m

  8. (Apple HTTP Live Streaming) In iOS, enter the following URL in Safari:

    http://localhost/liveevent.m3u8

    For information about where to use the URL to serve various iOS devices, QuickTime, and Safari, see HTTP Live Streaming Overview in the iOS Reference Library.

Note:

You can replace localhost with the domain name or IP address of the computer hosting Adobe Media Server. If you’re using a Adobe Media Server hosting provider, they can give you this value.

Setting the record option while publishing to livepkgr

You can define the record option by adding a query parameter string adbe-record-mode. The value of this string can be “record” or “append”. If the parameter is not specified, “append” will be used. In case of “record”, livepkgr overwrites the previous recording for the same stream and event name. In case of “append”, livepkgr application appends to the previous recording for the same stream and event name.

For example, to publish a stream in record mode, use:livestream%i?adbe-live-event=liveevent&adbe-record-mode=record

To publish a stream in append mode (default case), use:livestream%i?adbe-live-event=liveevent&adbe-record-mode=append

livestream%i?adbe-live-event=liveevent&adbe-record-mode=record
livestream%i?adbe-live-event=liveevent&adbe-record-mode=append

Packaging an audio-only stream (HLS)

To serve streams over a cellular network, one of the streams must be audio-only. For more information, see HTTP Live Streaming Overview.

AAC-encoded audio files (MP4/F4V) are packaged as .aac file. Also, the M3U8 file will list the file names as .aac instead of .ts. An audio-only stream functionality will be available only if the M3U8 URL has the following embedded tags:

Tag

Description

audio-only

Specifies whether the stream/file is audio-only. If the tag is not present, the audio-only stream will be extracted from the A/V stream.

audio-only-mp3/audio-only-aac

Specifies the audio codec of the requested stream file. If this tag is not present, the file/segment will be segmented as TS.

Here is an example of a valid M3U8 URL:http://myserver/hls-vod/audio-only-aac/sample1_1500kbps.f4v.m3u8

Here is an example M3U8 file snippet:#EXTM3U_#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000,CODECS="avc1.42001e, mp4a.40.2"http://10.40.23.222/hls-vod/sample1_1500kbps.f4v.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=150000,CODECS="avc1.42001e, mp4a.40.2"_http://10.40.23.222/hls-vod/sample1_150kbps.f4v.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,CODECS="avc1.42001e, mp4a.40.2"_http://10.40.23.222/hls-vod/sample1_1000kbps.f4v.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000,CODECS="mp4a.40.2"http://10.40.23.222/hls-vod/audio-only-aac/sample1_1000kbps.f4v.m3u8

http://myserver/hls-vod/audio-only-aac/sample1_1500kbps.f4v.m3u8

Publish an audio-only stream (HLS)

To publish an audio-only stream, enter the following in the Adobe Media Encoder Stream field:

livestream%i?adbe-live-event=liveevent&adbe-audio-stream-name=livestream1_audio_only&adbe-audio-stream-src=livestream1

If the encoder specifies individual query strings for each stream, use individual stream names instead of the variable %i:

livestream1?adbe-live-event=liveevent&adbe-audio-stream-name=livestream1_audio_only

livestream2?adbe-live-event=liveevent&adbe-audio-stream-name=livestream2_audio_only

Note:

You can use the values in italics or replace them with your own values. The default live event is called “liveevent”.

Parameter

Description

adbe-audio-stream-name

The name of the audio-only stream.

adbe-audio-stream-src

The name of the stream from which to extract the audio for the audio-only stream. If this parameter is not specified, the server uses the stream on which the adbe-audio-stream-name parameter was specified.

To generate a set-level variant playlist when using an audio-only stream, specify the audio codec of the audio-only stream. Specify the audio and the video codec of the streams that contain audio and video. For more information about using the Set-level F4M/M3U8 File Generator, see Publish and play live multi-bitrate streams.

Note:

It is highly recommended to use the "Audio-only packaging" as mentioned in previous section rather than publishing audio-only streams.

URLs for publishing and playing live streams over HTTP

Note:

The format for HDS request URLs has changed in Adobe Media Server 5. The Apache httpd.conf file redirects requests in the 4.0 format to the 4.5 format. The path /live/events/livepkgr/events redirects to the path /hds-live/livepkgr.

Use the following URL to publish a single live stream to Adobe Media Server for streaming over HTTP:

rtmp://ams-ip-or-dns/livepkgr/livestream?adbe-live-event=liveevent

Use the following URL to publish multiple live streams to Adobe Media Server for adaptive bitrate streaming:

rtmp://ams-ip-or-dns/livepkgr/livestream%i?adbe-live-event=liveevent

Note:

Publish the stream over RTMP. Clients play the stream over HTTP.

Use the following URLs to play live streams over HTTP:

Client

Single stream or Adaptive Bitrate

Request URL

Adobe HDS

Single stream

http://<ams-dns-or-ip>/hds-live/livepkgr/<instname>/<eventname>/<streamname>.f4m

Apple HLS

Single stream

http://<ams-dns-or-ip>/hls-live/livepkgr/<instname>/<eventname>/<streamname>.m3u8

Adobe HDS

Adaptive bitrate

The media player requests a set-level manifest file:

http://<webserver-dns-or-ip>/<set-level-manifest>.f4m

The set-level manifest file contains URLs for each live stream in the following format:

http://<ams-dns-or-ip>/hds-live/livepkgr/<instname>/<eventname>/<streamname>.f4m

Apple HLS

Adaptive bitrate

The media player requests a set-level variant playlist file:

http://<webserver-dns-or-ip>/<set-level-variant-playlist>.m3u8

The set-level variant playlist contains URLs for each live stream in the following format:

http://<ams-dns-or-ip>/hls-live/livepkgr/<instname>/<eventname>/<streamname>.m3u8

Note:

To play streaming media over HTTP, a media player requests a manifest file (F4M or M3U8). The server generates manifest files in real-time. The files are not written to disk; you cannot see them on the server.

The path /hds-live is a <Location> directive in the Apache httpd.conf file that tells the server to package the content for Adobe HTTP Dynamic Streaming (HDS).

The path /hls-live is a <Location> directive in the Apache httpd.conf file that tells the server to package the content for Apple HTTP Live Streaming (HLS).

For adaptive streaming, the client requests a set-level manifest. For HDS, this file is a .f4m file. For HLS, this file is a .m3u8 file. The set-level manifest can live on any web server. You can create multiple set-level manifest files for a single set of live streams.

The set-level manifest contains the paths to the F4M manifest files (HDS) and M3U8 variant playlists (HLS) of each live stream. The paths must begin with /hds-live or /hls-live to tell the server to package the streams for HTTP.

Note:

Do not include /hds-live or /hls-live in the URL that requests the set-level manifest.

You can configure the <Location> directive settings and the content location in the Apache httpd.conf file. For more information, see Content storage (HDS and HLS).

Differences in HTTP live URLs from Flash Media Server 4.0 to Adobe Media Server 5

The default URL to play a live stream over HTTP has changed in Adobe Media Server 5. In Flash Media Server 4.0, the URL to play a live stream was http://<servername>/live/events/livepkgr/events/<eventname>. The Adobe Media Server 5 Apache httpd.conf file uses a 301 redirect to redirect requests that use a 4.0 URL to the 4.5 URL.

For more differences, see Differences in HTTP Dynamic Streaming between Flash Media Server 4.0 and 4.5.

Configure DVR (HDS)

Configure DVR on the server

  1. Open the Set-level F4M/M3U8 File Generator in a browser: rootinstall/tools/f4mconfig/configurator/f4mconfig.html.

  2. In addition to entering values for Stream URI and Bitrate, enter a value for DVR Window Duration. This value sets the amount of viewable content, in minutes, before the live point.

    Use the following guidelines to set a Window Duration:

    • Set Window Duration to a value greater than 0.

      Setting the Window Duration to 0 can cause a bad user experience.

    • A value of -1 indicates that the available recorded content behind the live point is unlimited.

  3. In the Event.xml file, configure the DiskManagementDuration element to specify the amount of content the server caches. By default, the server caches 3 hours of content. Use the following formula to determine the value of the Window Duration in relation to the value of DiskManagementDuration:

    HDSWindowDuration <= (DiskManagementDuration - SegmentDuration)

    For more information about disk managment, see Limit the duration of content on the server.

Publish a DVR stream

To publish a DVR stream from Flash Media Live Encoder, do not click Record or check DVR Auto Record. Publish the stream just as you publish any live stream.

Play DVR streams

Strobe Media Playback supports DVR streams by default.

Note:

Flash Media Playback does not support set-level manifest files. To use Flash Media Playback, configure a Manifest.xml file. See Manifest.xml.

Configure a sliding window (HLS)

Configure a sliding window on the server

A sliding window is the seekable portion of the stream for Apple HTTP Live Streaming. Clients cannot seek beyond the sliding window length. HTTP Live Streaming clients use the sliding window to configure the seek bar.

Configure a sliding window at the following levels:

Level

Configuration file

Server

rootinstall/Apache2.4/conf/httpd.conf

Application

rootinstall/applications/livepkgr/Application.xml

The livepkgr application is the default application for HTTP streaming. You can duplicate and rename this application.

Event

rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml

The liveevent folder is the default live event. You can create multiple live events within an application.

Use the following parameters:

Parameter

Configuration file

Description

HLSSlidingWindowLength

httpd.conf

The number of TS files available for seeking in a sliding window.

SlidingWindowLength

Application.xml and Event.xml

The number of TS files available for seeking in a sliding window.

HLSMediaFileDuration

httpd.conf

The length of a TS file, in milliseconds.

MediaFileDuration

Application.xml and Event.xml

The length of a TS file, in milliseconds.

The time within the sliding window is:

HLSSlidingWindowLength * HLSMediaFileDuration 
SlidingWindowLength * MediaFileDuration

By default, HLSSlidingWindowLength is set to 6 and HLSMediaFileDuration is set to 8000 milliseconds. Therefore, by default, all HLS live events are seekable within a window that is 48 seconds wide.

The sliding window is relative to the current position of the live stream. For example, if sliding window is configured to have 15 minutes of data and the event starts at time 0, when the live stream is at 30, the last seek position possible is 15.

To make an entire live event seekable, set SlidingWindowLength or HLSSlidingWindowLength to 0. However, doing so may impact performance.

Configure the sliding window to be smaller than the duration of content cached on disk. In the Event.xml file, the DiskManagementDuration element specifies the amount of content the server caches. By default, the server caches 3 hours of content. The size of the HLS sliding window must be as follows:

HLSSlidingWindow <= (DiskManagementDuration - SegmentDuration)

For more information about disk managment, see Limit the duration of content on the server.

Configure a sliding window at the event level

The following Event.xml file creates a 1 hour sliding window for a single HLS live event:

<Event> 
    <EventID>liveevent</EventID> 
    <Recording> 
        <FragmentDuration>4000</FragmentDuration> 
        <SegmentDuration>400000</SegmentDuration> 
        <DiskManagementDuration>3</DiskManagementDuration> 
    </Recording> 
    <HLS> 
        <MediaFileDuration>8000</MediaFileDuration> 
        <SlidingWindowLength>450</SlidingWindowLength> 
    </HLS> 
</Event>

Configure a sliding window at the application level

The following Application.xml file creates a 1 hour sliding window for all HLS live events within the livepkgr application:

<Application> 
    <StreamManager> 
        <Live> 
            <AssumeAbsoluteTime>true</AssumeAbsoluteTime> 
        </Live> 
    </StreamManager> 
    <HLS> 
        <MediaFileDuration>8000</MediaFileDuration> 
        <SlidingWindowLength>450</SlidingWindowLength> 
    </HLS> 
</Application>

Reload the livepkgr application.

Configure a sliding window at the server level

The following Apache configuration sets HLSSlidingWindowLength to 450. This configuraiton creates a 1 hour sliding window for all HLS live events on the server:

... 
<IfModule hlshttp_module> 
<Location /hls-live> 
    HLSHttpStreamingEnabled true 
    HttpStreamingLiveEventPath "../applications" 
    HttpStreamingContentPath "../applications" 
    HLSMediaFileDuration 8000 
    HLSSlidingWindowLength 450 
    HLSFmsDirPath ".." 
    HLSM3U8MaxAge 2 
    HLSTSSegmentMaxAge -1 
    Options -Indexes FollowSymLinks 
</Location>

Restart Apache HTTP Server.

Publish streams with a sliding window

You don’t need to configure any encoder settings to publish a stream with a sliding window.

Play streams with a sliding window

Devices that support HTTP Live Streaming support the sliding window feature by default.

Duplicate the livepkgr service

The server supports an unlimited number of instances of the livepkgr service.

  1. Duplicate the rootinstall/applications/livepkgr folder in the applications folder and give it a new name, for example, livepkgr2. In this case, the new livepkgr service is located at rootinstall/applications/livepkgr2.

    You can create as many instances of the livepkgr service as you need.

Modify server-side code in the livepkgr service

Note:

You cannot modify server-side code on Adobe Media Server Standard.

  1. Remove the rootinstall/applications/livepkgr/main.far file and replace it with the rootinstall/samples/applications/livepkgr/main.asc file.

Removing all HDS segments

To remove all the existing HDS segments when the application unloads, you can use the clearOnAppStop tag as shown below:<ScriptEngine> <ApplicationObject> <config> <clearOnAppStop>true</clearOnAppStop> </config> </ApplicationObject> </ScriptEngine>

<ScriptEngine> 
    <ApplicationObject> 
        <config> 
            <clearOnAppStop>true</clearOnAppStop> 
        </config> 
    </ApplicationObject> 
</ScriptEngine>

Get help faster and easier

New user?