This is a message.

Deliver On-Demand and Live Adaptive Bitrate Video with HTTP Streaming

Adobe Http Streaming is a solution for streaming video over the HTTP protocol.

Features:

  • Random seeking to any part of the timeline at any time.
  • Starting playback in the middle of the clip's timeline.
  • Support for H264 and VP6 codecs.
  • Multi-bitrate streaming support.
  • Http Dynamic Streaming support.
  • DRM content protection support.
  • Live DVR Http streaming support.

Required tools and server-side products

The F4FPackager Tool for Windows and Linux is used to package the media files. This tool generates the required file fragments and F4M Manifest files. Multi-Bitrate packaging support is also available.

For live streaming a Live HTTP Packager application is available in the Flash Media Server.

The Adobe Http Streaming solution requires an Apache HTTP Origin Module installed and configured. The HTTP Origin Module will serve the required fragment which is determined from the bootstrap information packaged into the F4M Manifest file, generated by the F4FPackager and Live Streaming Packager.

Alternatives to the Apache Module is realtime packaging from Wowza Streaming Server or CDN Services such as Highwinds CDN or CDN providers that service Wowza Media Server MaxCDN Network.

Adobe Flash Access can be used for content protection however at this time, Wowza Media cannot package Flash Access DRM, it requires a manual process using the F4FPackager tool.

The advantage of using Httpstreaming is the ability to seek in the timeline to positions that have not been downloaded yet to the player as it will seek to a new fragment and due to its small size be available instantly to the client. This solution is similar to Pseudostreaming where a position of the video is accessible instantly, however it is a video fragment streaming solution, where the smaller chunks are easily downloadable and buffered.

More Information:

Example

<!-- set up player container named "httpstreaming" -->
<a id="httpstreaming" style="display:block;width:660px;height:350px;"></a>

HTML

The httpstreaming plugin requires the F4M clip resolver plugin to resolve the streams from the F4M manifest file.

flowplayer("httpstreaming", "http://releases.flowplayer.org/swf/flowplayer-3.2.18.swf", {
plugins: {
 
f4m: { url: "flowplayer.f4m-3.2.10.swf" },
 
httpstreaming: { url: "flowplayer.httpstreaming-3.2.11.swf" },
 
// the "tube" skin
controls: { url: "flowplayer.controls-tube-3.2.16.swf"}
},
clip: {
url: "sample3_500kbps.f4m",
autoPlay: false,
urlResolvers: ['f4m'],
provider: 'httpstreaming',
 
// directory where the manifest and video fragments are stored
baseUrl: "http://stream.flowplayer.org/httpstreaming/"
}
});

JavaScript

Example with Wowza HTTP Dynamic Streaming and Live DVR

This configuration example shows the integration of DVR features with Wowza Streaming Server. The Httpstreaming plugin together with the F4M plugin will configure required settings to determine it's a Live DVR stream from the manifest playlist and provides the ability to either start at the Live stream position or the DVR position. When starting at the Live position it will be possible to seek back into the DVR position to catch up on the stream.

Client buffering to either a Live and DVR buffering length are settable via the F4M to override the default. Multi-bitrate streaming buffering options are also available.

Note: There is a limitation currently displaying between Live and DVR position in the controlbar so simply seeking to the end will catch up to the Live stream position.

Caveat: For Wowza users this system uses the functionality provided by Open Source Media Framework, there is currently an issue with Live DVR keyframes, the fragments parsed and buffering. It is required to set the F4M plugin liveBufferTime or dvrBuffertime config properties to 2-3 times the keyframe intervals for instance if the encoder is a 4 second keyframe interval it will be 12 seconds of buffer length.

When setting up DVR streams specify dvr as value of the streamType tag in the manifest.

flowplayer("httpstreaming-dvr", "http://releases.flowplayer.org/swf/flowplayer-3.2.18.swf", {
plugins: {
f4m: {
url: "flowplayer.f4m-3.2.10.swf",
dvrBufferTime: 12,
liveBufferTime: 12
},
httpstreaming: {
url: "flowplayer.httpstreaming-3.2.11.swf"
}
},
clip: {
url: "http://example.com:1935/dvr/livestream/manifest.f4m?DVR",
urlResolvers: ['f4m'],
provider: 'httpstreaming',
autoPlay: false
}
});

JavaScript

Live configuration options

PropertyDefaultDescription

startLivePosition

true

Configures to start a Live DVR stream at the Live position.

dvrSnapToLiveClockOffset

4

An offset used to determine the Live position to initially seek to in a Live DVR recording stream.

Setting up the Apache HTTP Origin Module

The Apache HTTP Origin Module is needed.

  • You can download the module here.
  • Install the module and the required libraries into the specified path where Apache modules are installed ie "/usr/lib/apache2/modules" or a custom path like "/opt/adobe/f4fmodule"
  • Configure the apache server config to load the module like so:
LoadModule f4fhttp_module /opt/adobe/f4fmodule/mod_f4fhttp.so

Bash
  • In the specified Apache virtualhost config, configure a Location path to enable the module when requesting the custom path like so:
<Location /videos/vod>
HttpStreamingEnabled true
HttpStreamingContentPath "/path/to/packaged/videos/"
Options -Indexes FollowSymLinks
</Location>

Bash
  • For configuring Live Http Streaming, the paths are needed to be configured to the Flash Media Server application path like so:
<Location /live>
HttpStreamingEnabled true
HttpStreamingLiveEventPath "/opt/adobe/fms/applications"
HttpStreamingContentPath "/opt/adobe/fms/applications"
Options -Indexes FollowSymLinks
</Location>

Bash

Packaging Media

The F4FPackager tool is required to package vod streams ready for http streaming playback.

  • First download and install the tool
  • Setup the environment path for the tool like so:
export PATH=/opt/adobe/f4fpackager:$PATH

Bash
  • Provide a Flash compatible H264 and VP6 encoded video.

Packaging for a single bitrate

A basic example of packaging a single bitrate file.

f4fpackager --input-file=sample.f4v --output-path=/path/to/out

Bash

This will produce set of files including the fragement F4F files and the F4M manifest file used for the plugin clip url.

/path/to/out/sample.f4m

Bash

Packaging for multi-bitrate

To deliver at multiple bitrates via HTTP streaming in conjunction with the Bwcheck HTTP Streaming and/or the Bitrate selection plugins you need to batch pack the multi-rate videos.

Here's a basic example of packaging for multiple bitrates. For each video bitrate the previously generated manifest file is used and the generated manifest file for the largest bitrate is used for the plugin clip url.

f4fpackager --input-file=sample1_150kbps.f4v --bitrate=150
--output-path=/path/to/out
f4fpackager --input-file=sample1_500kbps.f4v --bitrate=500
--manifest-file=/path/to/out/sample1_150kbps.f4m --output-path=/path/to/out
f4fpackager --input-file=sample1_700kbps.f4v --bitrate=700
--manifest-file=/path/to/out/sample1_500kbps.f4m --output-path=/path/to/out
f4fpackager --input-file=sample1_1000kbps.f4v --bitrate=1000
--manifest-file=/path/to/out/sample1_700kbps.f4m --output-path=/path/to/out
f4fpackager --input-file=sample1_1500kbps.f4v --bitrate=1500
--manifest-file=/path/to/out/sample1_1000kbps.f4m --output-path=/path/to/out

Bash

This will produce the fragment F4F files and provide the F4M manifest file containing all the available bitrates.

/path/to/out/sample1_1500kbps.f4m

Bash

F4FMbrPackager Java Tool

A command line Java application is available designed to simplify packaging multi bitrate streams by specifying an input directory of files or a given list of bitrates and specifying one of the input files.

There are windows and unix shell scripts available to launch the application, the environment variable "F4FPACKAGER" is used to tell the program where the f4fpackager tool is installed.

Note: When processing the files, the application assumes a seperator prefix of "_" or "-" is being used.

A basic example of running the application with a given list of bitrates and a source file.

f4fmbrpackager.sh --input-file=sample1_150kbps.f4v --bitrates=150,500,700,1000,1500
--output-path=/path/to/out

Bash

Another example of running the application by giving it an input path of files to process, this will process many different videos at once. Each set of videos have the specified bitrates in the filenames given by the required seperator.

f4fmbrpackager.sh --input-path=/path/to/source/files --output-path=/path/to/out

Bash

Download

F4FPackager and Apache Http Origin Module Download

http://www.adobe.com/go/httpdynamicstreaming_bits

F4F MBR Packager Java Application

http://static.electroteque.org/downloads/f4fmbrpackager-1.0.0.zip

flowplayer.httpstreaming-3.2.11.swf

just the working flash file to get you going

flowplayer.httpstreaming-3.2.11.zip

working flash file (swf) + README.txt and LICENSE.txt

flowplayer.httpstreaming-3.2.11-src.zip

source code

Please right-click and choose "Save link as..." (or similar)

Note: For XSS security reasons Flash plugins must be located at and loaded from the same domain as the core player flowplayer-3.2.18.swf.

This is a Flash plugin, and its features are therefore not available on iOS. For iOS please consult the ipad plugin.

See the version history for this tool.

Found a bug?

If you encounter problems with this script, please turn to the Flowplayer Flash plugin forum with a link to a minimal sample page (no extra html, css, javascript) demonstrating the issue.