onMetaData从未调用过MP3流媒体

时间:2015-05-22 04:09:09

标签: actionscript-3 flash

我正在使用Flash中的NetStream来传输MP3资源。

要显示歌曲的进度,我需要歌曲的持续时间

但永远不会为NetStream对象调用 onMetaData

这是代码http://pastebin.com/VZvdqTF5

更新:似乎MP3资源没有为MP3资源提供必要的MetaData。所以这不是代码的问题,它与我在应用程序中使用的流媒体服务器有关。

2 个答案:

答案 0 :(得分:0)

请确保您设置client班级NetStream的适当性。

  

客户端属性:指定调用回调方法来处理的对象   流式传输或F4V / FLV文件数据。默认对象是这个,   正在创建NetStream对象。如果将client属性设置为   另一个对象,在另一个对象上调用回调方法。该   NetStream.client对象可以调用以下函数并接收   关联的数据对象:onCuePoint(),onImageData(),onMetaData(),   onPlayStatus(),onSeekPoint(),onTextData()和onXMPData()。

yourNetStreamInstance.client = {onMetaData:onMetaData}; 

function onMetaData(metaData:Object):void
{
    trace(metaData.duration); // duration
}

答案 1 :(得分:0)

ns.client = new ConnectionClient(this);

在底部的NetStream类中定义该类

class ConnectionClient {
    private var _owner:YourNSStreamObjectClass;

    public function ConnectionClient(owner:YourNSStreamObjectClass) : void {
        _owner = owner;
    }

    public function onMetaData(info : Object) : void {
        //_owner.setMetaData(info);

    }

    public function onCuePoint(info : Object) : void {
        //trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type);
    }

    public function onXMPData(info : Object) : void {
        //trace("xmp data = " + info);
    }

    public function onPlayStatus(info : Object) : void {
        //trace("onPlayStatus data = " + info);
    }
}