3

我已经设置了 NetConnection 和 NetStream,并且流媒体 mp3 播放正常。唯一的问题是即使设置了 NetStream 的客户端,也没有收到元数据。知道是什么原因造成的吗?

代码片段:

// 设置网络连接
...

私有函数 netStatusHandler(e:NetStatusEvent):void
{
  if (e.info.code == "NetConnection.Connect.Success")
  {
    // NetConnection 的连接建立成功
    网络流 = 新网络流(NC);
    netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
    netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    netStream.client = new NetStreamClient();

    netStream.play("mp3:music/123456");
  }
}

类 NetStreamClient
{   
  公共函数 onMetaData(info:Object):void
  {
    跟踪(“onMetaData”);
  }

  公共函数 onPlayStatus(info:Object):void
  {
    跟踪(“onPlayStatus”);
  }
}
4

6 回答 6

1

I think there could be problem with security restrictions - flash differs "content" and "data", content (audio, video, image) is played even from another domain but data from this domain are unaccesible. Audio or video are contents but metaData are data. It is similiar to the situation with images: you can load and display image from another domain but you can't read its bitmapData. Crossdomain should solve it

于 2012-01-18T17:08:42.090 回答
1

在 netStream.play() 调用之前添加:

netStream.onMetaData = function(infoObject:Object) {
    trace('on metadata:');
    for (var propName:String in infoObject) {
        trace(propName + " = " + infoObject[propName]);
    }
};

这行得通吗?

于 2009-08-05T06:57:06.797 回答
1

我有同样的问题,但这段代码会有所帮助。

private var videoURL:String="video.flv";
private function connectStream():void 
    {

        var objClient:Object=new Object();
        objClient.onMetaData=objFunction;

        stream = new NetStream(connection);
        stream.client=function objClient():void{};
        stream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
        stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandler);
        var video:Video = new Video();
        video.attachNetStream(stream);
        video.y=50;
        video.x=50;
        stream.play(videoURL);
}
于 2014-03-03T07:25:50.297 回答
0
var client:Object = new Object( );
client.onMetaData = function(metadata:Object):void {
    trace(metadata.duration);
};
videoStream.client = client;
于 2010-01-20T02:51:22.683 回答
0

您的代码看起来不错,问题是 Flash 有时无法读取文件的元数据。它发生在我的flv视频上。只需从更好的程序中获取输出,后效就可以解决我的视频问题。最后一件事,如果你做错了什么,你可以检查 loadermax。

http://www.greensock.com/loadermax/

于 2011-09-21T21:11:30.867 回答
0

问题是

  • 元数据事件侦听器在调用
    NetStream.play() 方法之后触发,但在
    视频播放头前进之前。
  • 类不应该嵌套而且你不能在同一个文件中有多个类
  • 您可以在播放后立即调用暂停方法,以触发元数据事件。

onMetaData 使用示例

var video:Video = new Video();
addChild(video);    
var nc:NetConnection = new NetConnection();
nc.connect(null);

var ns:NetStream = new NetStream(nc);
ns.client = {};
ns.client.onMetaData = ns_onMetaData;
ns.client.onCuePoint = ns_onCuePoint;
ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");

video.attachNetStream(ns);

function ns_onMetaData(item:Object):void {
    trace("metaData");
    // Resize video instance.
    video.width = item.width;
    video.height = item.height;
    // Center video instance on Stage.
    video.x = (stage.stageWidth - video.width) / 2;
    video.y = (stage.stageHeight - video.height) / 2;
}

function ns_onCuePoint(item:Object):void {
    trace("cuePoint");
    trace(item.name + "\t" + item.time);
}

我是否正确假设您使用的是 flex?

于 2011-04-06T12:33:02.880 回答