Here is a quick heads up on an issue you may encounter when streaming video using Flash Media Playback and f4m files to provide dynamic streaming whereby the player will automatically pick the correct bitrate version depending on the user's connection speed.

In my case I wanted to stream my videos using Amazon's Cloudfront service. A typical RTMP URL will look something like this:

view plain
1rtmp://saaabbbccc.cloudfront.net/cfx/st/mp4:myvideo.mp4
If you go ahead and create an f4m file using this you may end up with something like the following (presuming 3 bitrates at 500, 1000 and 1500 kbps):
view plain
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns="http://ns.adobe.com/f4m/1.0">
3<id>Dynamic Streaming</id>
4<duration></duration>
5<mimeType>video/mp4</mimeType>
6<baseURL>rtmp://saaabbbccc.cloudfront.net/cfx/st</baseURL>
7<media url="mp4:myvideo_500.mp4" bitrate="500" width="640" height="480" />
8<media url="mp4:myvideo_1000.mp4" bitrate="1000" width="640" height="480" />
9<media url="mp4:myvideo_1500.mp4" bitrate="1500" width="640" height="480" />
10</manifest>
Unfortunately this file will not work when fed into Flash Media Playback. The reson (and fix) is quite simple and one some of us may remember from using the FLVPlayback component in Flash. It is a missing application instance name. In our case this is the default instance _definst_ that needs to be added to the baseURL. The correct f4m listing would therefore be as follows:
view plain
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns="http://ns.adobe.com/f4m/1.0">
3<id>Dynamic Streaming</id>
4<duration></duration>
5<mimeType>video/mp4</mimeType>
6<baseURL>rtmp://saaabbbccc.cloudfront.net/cfx/st/_definst_</baseURL>
7<media url="mp4:myvideo_500.mp4" bitrate="500" width="640" height="480" />
8<media url="mp4:myvideo_1000.mp4" bitrate="1000" width="640" height="480" />
9<media url="mp4:myvideo_1500.mp4" bitrate="1500" width="640" height="480" />
10</manifest>
I hope this helps someone. I was slightly confused by this as any one of my files would play fine using the FLVPlayback component without specifying the _definst_ in the video RTMP URL.

And one final gotcha: if you host your f4m files in an Amazon S3 bucket (but not your streaming bucket, you need to use a separate non-streaming bucket for non-video files) you may require your own crossdomain file inside it or the Adobe hosted Flash Media Playback SWF won't be able to load it.

A free tool to help you manage your S3 buckets (if you are on Windows - I run this tool in a VM) is CloudBerry Explorer. It's one of the better S3 related tools out there. Do you know an equally good one for OSX?