When I create "Action Script Mobile Project" I don't have any problem.
But when I create "Flex Mobile project" with same code - It works fine on PC, but I don't have any sound when I copy and install apk file on Android devices (no problems with video)
Notes:
"Microsoft Smooth Streaming Plugin for OSMF" needs osmf2.0 so osmf.swc ver2.0 have to be added to references.
Some test page:
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="Actus" xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import com.microsoft.azure.media.AdaptiveStreamingPluginInfo;
import org.osmf.containers.MediaContainer;
import org.osmf.events.MediaErrorEvent;
import org.osmf.events.MediaFactoryEvent;
import org.osmf.events.MediaPlayerStateChangeEvent;
import org.osmf.layout.ScaleMode;
import org.osmf.media.DefaultMediaFactory;
import org.osmf.media.MediaElement;
import org.osmf.media.MediaPlayerSprite;
import org.osmf.media.MediaPlayerState;
import org.osmf.media.MediaResourceBase;
import org.osmf.media.PluginInfoResource;
import org.osmf.media.URLResource;
import org.osmf.traits.AudioTrait;
import org.osmf.traits.MediaTraitType;
public var _container:MediaContainer;
public var _mediaFactory:DefaultMediaFactory;
private var _mediaPlayerSprite:MediaPlayerSprite;
public function TestPlayer():void
{
stage.quality = StageQuality.HIGH;
initMediaPlayer();
}
private function initMediaPlayer():void
{
// Create the container (sprite) for managing display and layout
_mediaPlayerSprite = new MediaPlayerSprite();
_mediaPlayerSprite.addEventListener(MediaErrorEve nt.MEDIA_ERROR,
onPlayerFailed);
_mediaPlayerSprite.addEventListener(MediaPlayerSt ateChangeEvent.MEDIA_PLAYER_STATE_CHANGE
, onPlayerStateChange);
_mediaPlayerSprite.scaleMode = ScaleMode.STRETCH;//ScaleMode.NONE;
_mediaPlayerSprite.width = 400;//stage.stageWidth;
_mediaPlayerSprite.height = 200//stage.stageHeight;
//Adds the container to the stage
videoContainer.addChild(_mediaPlayerSprite);
// Create a mediafactory instance
_mediaFactory = new DefaultMediaFactory();
// Add the listeners for PLUGIN_LOADING
_mediaFactory.addEventListener(MediaFactoryEvent. PLUGIN_LOAD,onPluginLoaded);
_mediaFactory.addEventListener(MediaFactoryEvent. PLUGIN_LOAD_ERROR,
onPluginLoadFailed );
//_mediaPlayerSprite.buttonMode=false;
//_mediaPlayerSprite.mediaPlayer.muted=false;
//_mediaPlayerSprite.mediaPlayer.volume=1;
// Load the plugin class
loadAdaptiveStreamingPlugin( );
}
private function loadAdaptiveStreamingPlugin( ):void
{
var pluginResource:MediaResourceBase;
pluginResource = new PluginInfoResource(new AdaptiveStreamingPluginInfo(
));
_mediaFactory.loadPlugin( pluginResource );
}
private function onPluginLoaded( event:MediaFactoryEvent ):void
{
// The plugin is loaded successfully.
// Your web server needs to host a valid crossdomain.xml file to allow plugin to
//download Smooth Streaming files.
loadMediaSource(urlBak/*fileURL.text*//*"http://devplatem.vo.msecnd.net/Sintel/Sintel_H264.ism/manifest"*/)
}
private function onPluginLoadFailed( event:MediaFactoryEvent ):void
{
// The plugin is failed to load ...
}
private function onPlayerStateChange(event:MediaPlayerStateChangeEvent) : void
{
var state:String;
state = event.state;
switch (state)
{
case MediaPlayerState.LOADING:
// A new source is started to load.
break;
case MediaPlayerState.READY :
// Add code to deal with Player Ready when it is hit the
//first load after a source is loaded.
break;
case MediaPlayerState.BUFFERING :
break;
case MediaPlayerState.PAUSED :
break;
// other states ...
}
}
private function onPlayerFailed(event:MediaErrorEvent) : void
{
// Media Player is failed .
}
private function loadMediaSource(sourceURL : String):void
{
// Take an URL of SmoothStreamingSource’s manifest and add it to the page.
var resource:URLResource= new URLResource(sourceURL);
var element:MediaElement = _mediaFactory.createMediaElement( resource );
_mediaPlayerSprite.scaleMode = ScaleMode.STRETCH;//ScaleMode.LETTERBOX;
_mediaPlayerSprite.width = 400;//stage.stageWidth;
_mediaPlayerSprite.height = 200;//stage.stageHeight;
// Add the media element
_mediaPlayerSprite.media = element;
//_mediaPlayerSprite.buttonMode=false;
//_mediaPlayerSprite.mediaPlayer.muted=false;
//_mediaPlayerSprite.mediaPlayer.volume=5;
test.text=_mediaPlayerSprite.mediaPlayer.volume.t oString()+_mediaPlayerSprite.mediaPlayer.muted.toString();
}
public var urlBak:String;
//---------------------------------------------------- --
protected function goToFileViewerFile(event:MouseEvent):void
{
//var pluginResource:MediaResourceBase;
//pluginResource = new PluginInfoResource(new AdaptiveStreamingPluginInfo());
urlBak=fileURLfile.text;
TestPlayer();
//navigator.pushView(views.FileViewer);
}
//---------------------------------------------------- -------
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Group>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:Group>
<s:layout>
<s:HorizontalLayout/>
</s:layout>
<s:Button label="File" click="goToFileViewerFile(event)" />
<s:TextInput id="fileURLfile" text="http://devplatem.vo.msecnd.net/Sintel/Sintel_H264.ism/Manifest" />
</s:Group>
<s:TextInput id="test" />
<mx:UIComponent id="videoContainer" height="200" width="400" />
</s:Group>
</s:View>