3

NetConnection と NetStream をセットアップしましたが、ストリーミング mp3 は正常に再生されています。唯一の問題は、NetStream のクライアントが設定されているにもかかわらず、メタデータが受信されないことです。何がこれを引き起こしたのでしょうか?

コードスニペット:

// NetConnection を設定します
...

プライベート関数 netStatusHandler(e:NetStatusEvent):void
{
  if (e.info.code == "NetConnection.Connect.Success")
  {
    // NetConnection の接続が正常に確立されました
    netStream = 新しい NetStream(nc);
    netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
    netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    netStream.client = 新しい NetStreamClient();

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

クラス NetStreamClient
{   
  パブリック関数 onMetaData(info:Object):void
  {
    trace("onMetaData");
  }

  パブリック関数 onPlayStatus(info:Object):void
  {
    trace("onPlayStatus");
  }
}
4

6 に答える 6

1

フラッシュは「コンテンツ」と「データ」が異なり、コンテンツ (オーディオ、ビデオ、画像) は別のドメインからでも再生されますが、このドメインのデータにはアクセスできません。オーディオやビデオはコンテンツですが、メタデータはデータです。画像の場合と似ています。別のドメインから画像を読み込んで表示することはできますが、その bitmapData を読み取ることはできません。クロスドメインはそれを解決する必要があります

于 2012-01-18T17:08:42.090 に答える
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 に答える
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 に答える
0

問題は

  • メタデータイベントリスナーは、
    NetStream.play()メソッドの呼び出し後
    、ビデオ再生ヘッドが進む前にトリガーされます。
  • クラスはネストしないでください。また、同じファイルに複数のクラスを含めることはできません
  • メタデータイベントをトリガーする目的で、再生直後にpauseメソッドを呼び出すことができます。

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

私はあなたがフレックスを使用していると仮定して正しいですか?

于 2011-04-06T12:33:02.880 に答える
0

あなたのコードは問題ないように見えますが、フラッシュがファイルのメタデータを読み取れないことがあります。flvビデオで私に起こります。より良いプログラムから出力を取得するだけで、aftereffects がビデオの問題を解決してくれます。最後に、何か間違ったことをしている場合は、loadermax を確認できます。

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

于 2011-09-21T21:11:30.867 に答える
0
var client:Object = new Object( );
client.onMetaData = function(metadata:Object):void {
    trace(metadata.duration);
};
videoStream.client = client;
于 2010-01-20T02:51:22.683 に答える