Thursday, December 27, 2007

What is FLV

FLV (Flash Video) "is a proprietary file format used to deliver video over the Internet using Adobe Flash Player (formerly known as Macromedia Flash Player) version 6, 7, 8, or 9. FLV content may also be embedded within SWF files. Notable users of the FLV format include YouTube, Google Video,, Yahoo! Video and MySpace.

Flash Video is viewable on most operating systems, via the widely available Adobe Flash Player and web browser plugin, or one of several third-party programs such as Media Player Classic (with the ffdshow codecs installed), MPlayer, or VLC media player.

The Adobe Flash Player is a multimedia and application player created and distributed by Adobe. It plays SWF files which can be created by the Adobe Flash Authoring tool, Adobe Flex or a number of other Adobe and third party tools. It has support for a programming language called ActionScript, which can be used to display Flash Video from an SWF file. Because the Flash Player runs as a browser plug-in, it is possible to embed Flash Video in web pages and view the video within a web browser.

Commonly FLV files contain video bit streams which are a variant of the H.263 video standard, under the name of Sorenson Spark. Flash Player 8 and newer revisions support the playback of On2 TrueMotion VP6 video bit streams. On2 VP6 can provide a higher visual quality than Sorenson Spark, especially when using lower bit rates. On the other hand it is computationally more complex and therefore will not run as well on certain older system configurations.

An optional alpha channel which represents per pixel transparency is supported by including a second simultaneous video stream which encodes the alpha channel only, dropping any chromatic information. The implementation makes the assumption that the YUV data of the main On2 VP6 video stream is always converted to RGB by the client before compositing occurs as the resulting RGB values are alpha premultiplied and clamped accordingly. This option is only available for On2 VP6 encoded video streams.

The FLV file format supports two versions of a so called 'screenshare' Codec which is an encoding format designed for screencasts. Both these formats are bitmap tile based, can be lossy by reducing color depths and are compressed using zlib. The second version is only playable in Flash Player 8 and newer.

Support for encoding FLV files is provided by an encoding tool included with Adobe's Macromedia Flash Professional 8 product, On2's Flix encoding tools, Sorenson Squeeze, FFmpeg and other third party tools.

Audio in FLV files is usually encoded as MP3. However, FLV files recorded from the user's microphone use the proprietary Nellymoser codec. There is currently no open source product available that can Decode the nellymoser codec. FLV files also support uncompressed audio or ADPCM format audio.

There are currently few players able to play the FLV format. Some available players include:
* GOM Player
* VLC media player
* MPlayer
* Perian

FLV files can be delivered in several different ways:
* As a standalone .FLV file. Although FLV files are normally delivered using a Flash player for control, the .FLV file itself is fully-functional on its own and can be played or converted to other formats from local storage such as a hard disk or a CD.

* Embedded in an SWF file using the Flash authoring tool (supported in Flash Player 6 and later). The entire file must be transferred before playback can begin. Changing the video requires rebuilding the SWF file.

* Progressive download via HTTP (supported in Flash Player 7 and later). This method uses Action Script to include an externally hosted FLV file client-side for playback. Progressive download has several advantages, including buffering, use of generic HTTP servers, and the ability to reuse a single SWF player for multiple FLV sources. Flash Player 8 includes support for random access within video files using the partial download functionality of HTTP, sometimes this is referred to as Streaming. However, unlike streaming using RTMP, HTTP "streaming" does not support real-time broadcasting. Streaming via HTTP requires a custom player and the injection of specific FLV metadata containing the exact starting position in bytes and timecode of each keyframe. Using this specific information, a custom FLV player can request any part of the FLV file starting at a specified keyframe. For example, Google Video supports progressive download and can seek to any part of the video before buffering is complete, whereas YouTube cannot.

* Streamed via RTMP to the Flash Player using the Flash Media Server (formerly called Flash Communication Server), VCS or the open source Red5 server. As of February 2007, there's only one general purpose stream recorder available for this protocol, re-encoding screencast software excluded."


No comments: