Adaptive streaming is not a new technology, but it is pretty awesome. It's what every modern video and audio streaming playback solution uses. Adaptive streaming switches available streams on the fly as bandwidth conditions change. The adaptive solutions I personally have experience with from Apple and Adobe I will highlight below. Keep in mind the most mature contender in this arena is surprisingly Microsoft.
The basis for adaptive solutions are centered around a continual flow of manifest files that describe the video packets to be downloaded and quality of streams available. Implementations continually download these manifest files, then shift what they are displaying based on what they are provided by the manifests. I don't think that I need to explain how difficult it is to implement these protocols on your own while maintaining the kind of experience users are accustom to.
Using Adobe's Adaptive Streaming Solution in Flash
Adobe's solution is underpinned by the F4M manifest; Flowplayer has a
good example of that manifest format. Unless you feel like rolling your own solution inside the
Netstream classes using the newish appendBytes methodology, you need to look in the Flex classes around the OSMF area. The
F4M element is your starting point. This provides an already implemented solution to parsing and implementing the continual manifests that come with adaptive solutions. Oops there's a catch here! Different media servers output manifests differently depending on how they are configured. As of the most recent OSMF classes from Adobe, everything needs to be configured just right, or too bad for you. The problems I have encountered mainly have to do with manifests with relative or absolute paths.
Using Apple's Adaptive Streaming Solution in Flash
Apple and Adobe hate each other so it's no surprise there is no open, standard implementation for the m3u8 manifest format and streaming solution on the Flash platform. The only working m3u8 implementation that I have used is the
Jwplayers adaptive branch; but those buggers stripped the adaptive branch out of their public code repo four weeks ago. As of the Jwplayer adaptive branch 2440, there are still many issues with it. It uses the Netstream appendBytes method in concert with complex manifest loading operations and careful timing. From first hand experience, there are bugs in the timing and implementation of this solution, but it provides an out of the box start.
I came across the
apple-http-osmf project, to try and get m3u8 support into the OSMF framework but it's abandoned. Great. That leaves everyone working in Flash with nothing that I know of right now to handle m3u8 manifests.
United States Streaming Manifest Outlook
In terms of the United States anyway, if you think about the pressure from mobile that Apple is able to exert on the industry, the clear manifest format that developers are going to have to support in 2012 going on 2013 across all technologies is the m3u8 manifest format. Do you ever think Apple will kindly support a F4M and smooth streaming implementation? I doubt it. Android also supports the m3u8 manifest out of the box in newer versions. The only big implementation of smooth streaming I have ever personally used is Netflix. It's honestly the only reason I have the Silverlight framework installed, and I develop
Kinect applications for gosh sake!
United States Streaming Server Outlook
As far as the media servers go, I grew up on and became a Flash developer
because of Red5. I've deployed Red5 for its multilayer and recording capabilities on quite a few occasions. Red5 in the 1 version (which just had a major release!) has support for H264 playback but not adaptive manifest formats yet. Recently I have been really lucky to spend a lot of time doing recording and streaming with
Flash Media Server in the Amazon cloud (The CentOS 4.5 Version). Flash Media Server supports the m3u8 manifest format via Apache plug-ins as well as the F4M format, but no smooth streaming. Flash Media Server is pretty expensive to use no matter how you use it. I have never had the pleasure of doing a Wowza implementation, but it supports every format. I'm hesitant to recommend it because I have never used it for recording in particular (which is really difficult), but if I were doing playback I would probably choose Wowza because it supports all three of the major adaptive protocols.
Bringing it back to Flash
Well, for now; ironically I don't believe Adobe has a well implemented Flash client adaptive solution. The OSMF classes may work flawlessly with Flash Media Server, but they don't play well with anything else. Big CDN's like
Kit Video and
Kaltura all support m3u8's. We don't live in a homogenous technology environment when it comes to streaming. I wish Adobe, Microsoft, and Apple would be forced to come to a consensus around adaptive streaming; but with organizations that big there is no chance. I bet the m3u8 manifest format may end up dominating, but it isn't the best technical solution from my understanding.