我已经设置了NetConnection和NetStream,并且流式mp3播放正常。唯一的问题是即使已经设置了NetStream的客户端,也不会收到元数据。知道是什么导致了这个吗?
代码段:
// set up NetConnection ... private function netStatusHandler(e:NetStatusEvent):void { if (e.info.code == "NetConnection.Connect.Success") { // NetConnection's connection established successfully netStream = new NetStream(nc); netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); netStream.client = new NetStreamClient(); netStream.play("mp3:music/123456"); } } class NetStreamClient { public function onMetaData(info:Object):void { trace("onMetaData"); } public function onPlayStatus(info:Object):void { trace("onPlayStatus"); } }
答案 0 :(得分:1)
添加:
netStream.onMetaData = function(infoObject:Object) {
trace('on metadata:');
for (var propName:String in infoObject) {
trace(propName + " = " + infoObject[propName]);
}
};
这有用吗?
答案 1 :(得分:1)
我认为安全限制可能存在问题 - 闪存不同“内容”和“数据”,内容(音频,视频,图像)甚至可以从其他域播放,但来自此域的数据无法访问。音频或视频是内容,但元数据是数据。它与图像的情况类似:您可以从另一个域加载和显示图像,但无法读取其bitmapData。 Crossdomain应该解决它
答案 2 :(得分: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);
}
答案 3 :(得分:0)
var client:Object = new Object( );
client.onMetaData = function(metadata:Object):void {
trace(metadata.duration);
};
videoStream.client = client;
答案 4 :(得分:0)
问题是
- 在调用
之后触发元数据事件侦听器 NetStream.play()方法,但在之前 视频播放头已经发展。- 不应将类嵌套And you cannot have multiple classes in the same file。
- 您可以在播放后立即调用暂停方法 触发元数据事件的目的。
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?
答案 5 :(得分:0)
你的代码看起来很好,有时候flash无法读取文件的元数据。它发生在我的flv视频上。只是从更好的程序获得输出,后效解决我的视频问题。最后一件事,如果你认为你做错了,你可以检查loadermax。