HTTP MBR with OSMF
DavidKomer Mar 28, 2012 6:25 AMI just can't get it to work... tried both via F4m and smil, versions 1 or 2 of HDS... nothing works.
Any suggestions?
Here's my code:
package
{
import flash.display.Sprite;
import flash.events.EventDispatcher;
import com.akamai.osmf.AkamaiBasicStreamingPluginInfo;
import org.osmf.containers.MediaContainer;
import org.osmf.elements.VideoElement;
import org.osmf.events.DynamicStreamEvent;
import org.osmf.events.MediaFactoryEvent;
import org.osmf.events.MediaPlayerStateChangeEvent;
import org.osmf.media.DefaultMediaFactory;
import org.osmf.media.MediaElement;
import org.osmf.media.MediaFactory;
import org.osmf.media.MediaPlayer;
import org.osmf.media.MediaResourceBase;
import org.osmf.media.PluginInfo;
import org.osmf.media.PluginInfoResource;
import org.osmf.media.URLResource;
import org.osmf.net.DynamicStreamingResource;
import org.osmf.smil.SMILPluginInfo;
import org.osmf.utils.Version;
public class VP_REGULAR extends Sprite
{
private var mediaContainer:MediaContainer = null;
private var mediaPlayer:MediaPlayer = null;
private var mediaElement:MediaElement = null;
private var mediaFactory:MediaFactory = null;
private var _src:String = null;
private var _pluginsToLoad:Array = null;
public function VP_REGULAR()
{
super();
this.src = 'PATH TO F4M OR SMIL HERE!'
}
public function set src(str:String) {
if(_src == str || str == null) {
return;
}
close();
_src = str;
mediaFactory = new DefaultMediaFactory();
loadPlugins([new AkamaiBasicStreamingPluginInfo(), new SMILPluginInfo()]);
}
public function close() {
stop();
if(mediaPlayer != null) {
mediaPlayer.removeEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, playerStateChange);
mediaPlayer.removeEventListener(DynamicStreamEvent.SWITCHING_CHANGE, dynamicStreamChange);
}
if(mediaContainer != null) {
removeChild(mediaContainer);
}
mediaPlayer = null;
mediaContainer = null;
mediaElement = null;
mediaFactory = null;
_pluginsToLoad = null;
_src = null;
}
public function stop() {
if(mediaPlayer != null) {
mediaPlayer.stop();
}
}
private function loadPlugins(__pluginsToLoad:Array = null) {
if(__pluginsToLoad != null) {
_pluginsToLoad = __pluginsToLoad;
}
if(_pluginsToLoad.length) {
loadPlugin(_pluginsToLoad.shift());
} else {
allPluginsLoaded();
}
}
private function loadPlugin(source:PluginInfo):void {
var pluginResource:MediaResourceBase;
pluginResource = new PluginInfoResource(source);
loadPluginFromResource(pluginResource);
}
private function loadPluginFromResource(pluginResource:MediaResourceBase):void {
mediaFactory.addEventListener(MediaFactoryEvent.PLUGIN_LOAD, onPluginLoaded);
mediaFactory.addEventListener(MediaFactoryEvent.PLUGIN_LOAD_ERROR, onPluginLoadFailed);
mediaFactory.loadPlugin(pluginResource);
}
private function onPluginLoaded(event:MediaFactoryEvent):void {
trace("Plugin loaded");
loadPlugins();
}
private function onPluginLoadFailed(event:MediaFactoryEvent):void {
trace("Could not load Plugin");
loadPlugins();
}
private function allPluginsLoaded():void {
trace('All plugins loaded!');
loadMedia();
}
private function loadMedia() {
var mediaResource:URLResource = new URLResource(_src);
mediaElement = mediaFactory.createMediaElement(mediaResource);
trace(mediaElement);
playMediaElement();
}
private function playMediaElement() {
if(mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
mediaPlayer.addEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, playerStateChange);
mediaPlayer.addEventListener(DynamicStreamEvent.SWITCHING_CHANGE, dynamicStreamChange);
}
if(mediaContainer == null) {
mediaContainer = new MediaContainer();
addChild(mediaContainer);
}
mediaContainer.addMediaElement(mediaElement);
mediaPlayer.media = mediaElement;
}
private function playerStateChange(evt:MediaPlayerStateChangeEvent) {
trace(evt.state);
}
private function dynamicStreamChange(evt:DynamicStreamEvent) {
var player:MediaPlayer = evt.target as MediaPlayer;
trace('switched dynamic stream to:', player.currentDynamicStreamIndex);
}
}
}
