In recent years Flash video has taken over the web
and the latest beta release of the player opens up a whole new set of
features. Tinic Uro from the Flash Player engineering team has a must read post for anyone deploying video on the web
The latest Flash Player allows you to load and play .mp4,.m4v,.m4a,.mov
and .3gp files using the same NetStream API that only played a much
smaller subset of files before.
Since the debut of Flash 6 video has been available in the Flash Player. It has taken quite a while to catch on but if you are browsing around these days it is impossible not to stumble across a site that uses Flash Video. Sites like YouTube, Google Video, and MySpace have embraced flash video as their standard for delivering video to millions of users per day.
I am a common visitor to digg.com and I usually find most of the comments bashing Flash. Advertisers and ugly "skip intro" home pages have been the reason behind most of the bad blood. For video though Flash is hands down the best option. Flash is ubiquitous, universal and works across every common operating systems. It also is integrated with most of the gaming consoles that enable browsing. I can't say that I always agree with John C. Dvorak but I definetily agree with a recent quote in PC Magazine. Unless you're streaming hi-def content to the TV over the network so that you can watch IPTV shows, anything you plan on your computer should be Flash and only Flash. One of my favorite websites chicagobears.com has driven this point home for me. They have interviews and audio available on the site, if you attempt to click on the player UI you just get a broken image with no explanation. Most users wouldn't have a clue why it is not working. The video requires real player but without it you don't have a clue what is wrong. With Flash Player there are well-documented detection techniques that can provide alternate content and messaging to users that do not have the correct player installed. You just can't beat the experience you can provide as a developer. There are other options (Windows Media Player, Quicktime, and Realplayer) each of them have the positive and negative points but if you compare all of the options across all OS's and browsers Flash definitely comes out the winner.
One of the common complaints with Flash video is full screen mode. With WMV content you can double click on the content and push it out to full screen. With a recent beta release of Flash 9 on labs.adobe.com 9,0,18,60 introduces full screen mode. This allows sites to deliver on the full immersive experience many people posting video to the web would like to provide for their viewers.
There is a lot of great content over at the Flash Video Devcenter that can help you get started with Flash Video.
There is a new feature in Flash Player 8 that allows auto discovery of an Edge server on your local network without actually having knowledge of the server. When the connection is created a broadcast is sent on port 67 (DHCP port) and the Edge server answers the request and the Flash Player reconnects through the edge server. The following explanation was provided by Woojin Choi.
The feature in Flash Player 8 is called FPAD if you do not want to use it you need to set NetConnection.fpadZone = -1, to avoid any side effect.
Player 8 introduced UDP broadcasting capability with FMS2 release. This UDP broadcasting happens when NetConnection is trying RTMP connection. Player sends UDP packet to the network which is called FPAD (named to differentiate from WPAD). If there is FMS on the network listening, it will respond to the request with proxy information. Player will receive the response, open it, reconstruct rtmp url with proxy information and try to connect fms through this proxy server(FMS Edge server). This feature is supposed to work with FMS AutoDiscovery function in Server.xml. This AutoDiscovery allows server to listen on FPAD UDP packets in the network and respond to it.
[FPAD config in client side]
There are several configurations. They can be configured through ActionScript NetConnection object. Here is a code snippet with default value.
var nc:NetConnection = new NetConnection();
nc.fpadZone = 0; // default is 0.
nc.fpadWait = 250; // in milliseconds
nc.fpadOnly = false; // boolean. true/false
nc.fpadPort = 67; // Target port to broadcast
nc.fpadInfo.ip = edgeip; // only available if proxy is detected
nc.fpadInfo.port = edgeport; // only available if proxy is detected.
Default behavior is that player broadcasts FPAD to port 67 in the network with fpadZone=0 value. These can be modified and should be modified before NetConnection.connect() is called.
fpadZone = -1 disables this broadcasting mechanism. So if this isn't required, it must be set to '-1' before call connection.
fpadOnly=true will only detect proxy in the network and won't connect to the server.
fpadInfo object is available only when player detect the proxy in the network. You can trace it out in onStatus if proxy is available. Player reconstruct url based on this value fpadInfo.ip and fpadInfo.port. If there is a misconfigured FMS for example, this information can possibly tell you why connection is not working.
fpadPort can be changed to some other port if target FMS proxies are listening on different port other than 67.
fpadWait is timeout for detection. If player doesn't get response back within this timeout from any FMS in the network, it will connect to FMS directly in nc.connect() information. For example, even if there is a FMS to listen on and it is slow to respond, player will still have a chance to connect directly FMS Origin.
[FPAD in server side]
FMS need to be configured to work with FPAD packet. It is called AutoDiscovery function. This only makes sense for FMS Edge server because FMS Edge can redirect the call, but Origin won't redirect it. If this is turned on in Origin server, client won't be able to establish connection.
Server.xml -> AutoDiscovery -> Enable : true // enable autodiscovery
Server.xml -> AutoDiscovery -> ProxyInfo : edgeserverip:port // ip:port for player will use to connect through. It is ip of Edge server and port edge server is listening for RTMP connection, which is 1935 as usual.
Vhost.xml -> Proxy -> Mode : remote // enable server as Edge server
Server.xml -> AutoDiscovery -> AllowZone : 0 // default allowZone is 0
Server.xml -> AutoDiscovery -> MyZone : 0 // default MyZone is 0
Server.xml -> AutoDiscovery -> BindInfo : :67 // 67 is default port FMS is listening, which is a well known port for DHCP
This Zone information is very important for Edge server clustering. For now, it can be tweaked for client UDP broadcasting. It can be changed to any number for MyZone. For example, if MyZone is 8 and AllowZone is 8, it would allow only flash clients to broadcast to fpadZone=8. Default flash clients(fpadZone=0) won't be able to go through this FMS Edge server.
FMS Edge server config has many benefits. One is to get better performance by distributing load from origin to edge servers. Second is to save bw for internet from intranet by caching data in Edge server. Third can help an organization to get around web proxy config when they can deploy FMS Edge in the network. FPAD is useful when FMS Edge is launched in the network and clients can work seamlessly without knowing it.
Thanks Woojin for this posting.