Amazon Cloudfront から RTMP 経由でストリーミングする小さな OSMF プレーヤーを作成しました。既知の問題があります。mp3 の長さがメタデータから正しく読み取られないため、シーク機能が機能しません。NetConnection の getStreamLength 関数の使用を暗示する回避策があることは知っていますが、これは以前の非 OSMF プレーヤーで正常に実装されましたが、OSMF イベントと特性に関して、それを呼び出す方法とタイミングがわかりません。このコードは機能していません:
protected function initApp():void
{
//the pointer to the media
var resource:URLResource = new URLResource( STREAMING_PATH );
// Create a mediafactory instance
mediaFactory = new DefaultMediaFactory();
//creates and sets the MediaElement (generic) with a resource and path
element = mediaFactory.createMediaElement( resource );
var loadTrait:NetStreamLoadTrait = element.getTrait(MediaTraitType.LOAD) as NetStreamLoadTrait;
loadTrait.addEventListener(LoaderEvent.LOAD_STATE_CHANGE, _onLoaded);
player = new MediaPlayer( element );
//Marker 5: Add MediaPlayer listeners for media size and current time change
player.addEventListener( DisplayObjectEvent.MEDIA_SIZE_CHANGE, _onSizeChange );
player.addEventListener( TimeEvent.CURRENT_TIME_CHANGE, _onProgress );
initControlBar();
}
private function onGetStreamLength(result:Object):void {
Alert.show("The stream length is " + result + " seconds");
duration = Number(result);
}
private function _onLoaded(e:LoaderEvent):void
{
if (e.newState == LoadState.READY)
{
var loadTrait:NetStreamLoadTrait = player.media.getTrait(MediaTraitType.LOAD) as NetStreamLoadTrait;
if (loadTrait && loadTrait.netStream)
{
var responder:Responder = new Responder(onGetStreamLength);
loadTrait.connection.call("getStreamLength", responder, STREAMING_PATH);
}
}
}