|
Prerequisites for live streaming over HTTPTo 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 Flash 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:
For more information, see Supported clients, encoders, codecs, and file formats and Pre-built media players.
Publish and play a single live stream over HTTPInstall Flash Media Server 4.5 and choose to install
Apache HTTP Server.
Install Flash Media Live Encoder and configure it to use
absolute time.
Close Flash Media Live Encoder.
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.
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>
Save the file.
To publish a live stream to Flash Media Server, start Flash
Media Live Encoder and do the following:
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.
Click the wrench next to Format to open Advanced Encoder
Settings and do the following:
In the FMS URL text box enter the following:
rtmp://localhost/livepkgrNote: Use
the RTMP protocol to stream the content to the livepkgr application on
Flash Media Server. You can substitute an IP address or a domain
name for “localhost”.
In the Stream text box enter the following:
livestream?adbe-live-event=liveeventNote: The
applications/livepkgr/main.asc file expects this value.
Deselect Save to File.
Click Start.
(Adobe HTTP Dynamic Streaming) To play the media in Flash
Media Playback, do the following:
Open Flash Media
Playback in a web browser:
http://www.osmf.org/configurator/fmp/
Note: Flash Media Playback requires Flash Player 10.1 to
support HTTP Dynamic Streaming.
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.
Select Yes under the question “Are you using HTTP Streaming
or Flash Access 2.0?”.
Click Preview. Click Play.
(Adobe HTTP Dynamic Streaming) To play the media in Strobe
Media Playback, do the following:
Open the Flash Media
Server sample video player in a web browser. Browse to rootinstall/samples/videoPlayer/videoplayer.html
In STREAM URL, 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.
Select LIVE and Click PLAY STREAM.
(Apple HTTP Live Streaming) Use the following URL:
http://10.0.1.11/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” or “10.0.1.11” with the domain name or
IP address of the computer hosting Flash Media Server. If you’re
using a Flash Media Server hosting provider, they can give you this
value.
Publish and play live multi-bitrate streams over HTTPInstall Flash Media Server 4.5 and choose to install
Apache HTTP Server.
Install Flash Media Live Encoder and configure it to use
absolute time.
Close Flash Media Live Encoder.
Open the Flash Media Live Encoder rootinstall\Conf\config.xml
file in a text editor.
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>
Save the file.
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.
(Adobe HTTP Dyanmic 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:
Open rootinstall/tools/f4mconfig/configurator/f4mconfig.html
in a browser.
Select the f4m file type.
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
Enter the following for each stream and click Add:
Stream URI
|
Bitrate
|
livestream1.f4m
|
150
|
livestream2.f4m
|
500
|
livestream3.f4m
|
700
|
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>
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 Flash Media Server. This file can also have any name.
(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:
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.
Select m3u8.
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
|
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).
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
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 Flash Media Server.
To publish a live stream to Flash Media Server, start Flash
Media Live Encoder and do the following:
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.
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.
For Bit Rate, choose 150, 500, and 700.
In the FMS URL text box, enter the following:
rtmp://localhost/livepkgrNote: This
application is installed with Flash Media Server and contains a main.asc
file and configuration files for live HTTP Dynamic Streaming.
In the Stream text box, enter the following:
livestream%i?adbe-live-event=liveeventNote: 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.
Deselect Save to File.
Click Start.
(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 Flash Media Server.
Copy
the videoPlayer directory from rootinstall/samples/videoPlayer
to rootinstall/webroot.
Browse to the sample player in a web browser:
http://localhost/videoPlayer/videoplayer.html
In Video Source, enter the following:
http://localhost/liveevent.f4m
(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 Flash Media Server. If you’re using a Flash
Media Server hosting provider, they can give you this value.
Publish 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.
To publish an audio-only stream, enter the following in the Flash
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 over HTTP.
URLs for publishing and playing live streams over HTTPImportant: The format for HDS request URLs has
changed in Flash Media Server 4.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 Flash
Media Server for streaming over HTTP:
rtmp://fms-ip-or-dns/livepkgr/livestream?adbe-live-event=liveevent
Use the following URL to publish multiple live streams to Flash
Media Server for adaptive bitrate streaming:
rtmp://fms-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://<fms-dns-or-ip>/hds-live/livepkgr/<instname>/<eventname>/<streamname>.f4m
|
Apple HLS
|
Single stream
|
http://<fms-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://<fms-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://<fms-dns-or-ip>/hls-live/livepkgr/<instname>/<eventname>/<streamname>.m3u8
|
Important: 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 Flash Media Server 4.5The default URL to play a live stream over HTTP has changed
in Flash Media Server 4.5. In Flash Media Server 4.0, the URL to
play a live stream was http://<servername>/live/events/livepkgr/events/<eventname>.
The Flash Media Server 4.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
Open the Set-level F4M/M3U8 File Generator in a browser: rootinstall/tools/f4mconfig/configurator/f4mconfig.html.
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.
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 Disk management.
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.2/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 seconds 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 Disk management.
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 serviceThe server supports an unlimited number of instances of
the livepkgr service.
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 serviceNote: You cannot modify server-side code on Flash Media Streaming
Server.
Remove the rootinstall/applications/livepkgr/main.far
file and replace it with the rootinstall/samples/applications/livepkgr/main.asc
file.
|
|
|