2009-08-05 17 views
2

我已經得到了一個N​​etConnection和NetStream設置和流媒體MP3播放罰款。唯一的問題是即使設置了NetStream的客戶端,也不會收到元數據。任何想法可能造成這種情況?flash.net.NetStream沒有收到onMetaData

代碼片段:

 

// 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

有趣的我不知道,你可以通過NetStream的播放mp3 ... – jayarjo 2011-01-16 11:26:43

回答

0

的netStream.play()調用之前補充一點:

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

工作的呢?

+0

這種方法是確定的AS2,但你不能做到這一點的AS3除非類是動態的。這就是爲什麼要使用NetStream的客戶端屬性。 – Boon 2009-08-05 15:23:08

0
var client:Object = new Object(); 
client.onMetaData = function(metadata:Object):void { 
    trace(metadata.duration); 
}; 
videoStream.client = client; 
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); 
} 

我說的對中假設你使用柔性的例子嗎?

0

你的代碼看起來很好,有時候flash不能讀取文件的元數據。它發生在我的FLV視頻。只需從更好的節目中獲得輸出,後期解決我的視頻問題。而最後一件事情,如果你做錯了,你可以檢查loadermax。

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

1

我覺得有可能是具有安全限制的問題 - 閃存不同的「內容」和「數據」,內容(音頻,視頻,圖像),從另一個域名,但此域中的數據連演是unaccesible 。音頻或視頻是內容,但元數據是數據。它類似於圖像的情況:您可以加載和顯示來自其他域的圖像,但無法讀取其bitmapData。跨域應該解決它

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); 
}