我编写了一个小的 OSMF 播放器,它通过来自 Amazon Cloudfront 的 RTMP 流式传输。有一个已知问题,未从元数据中正确读取 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);
}
}
}