flash.net.NetStream не получает onMetaData - PullRequest
3 голосов
/ 05 августа 2009

Я установил 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");
  }
}

Ответы [ 6 ]

1 голос
/ 03 марта 2014

У меня была такая же проблема, но этот код поможет.

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);
}
1 голос
/ 18 января 2012

Я думаю, что могут быть проблемы с ограничениями безопасности - флэш-память отличается «контентом» и «данными», контент (аудио, видео, изображение) воспроизводится даже из другого домена, но данные из этого домена недоступны. Аудио или видео - это содержимое, а метаданные - это данные. Это похоже на ситуацию с изображениями: вы можете загружать и отображать изображение из другого домена, но не можете прочитать его bitmapData. Crossdomain должен решить это

1 голос
/ 05 августа 2009

до вызова netStream.play () добавьте:

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

это работает?

0 голосов
/ 22 сентября 2011

Ваш код выглядит хорошо, дело в том, что флэш не может иногда читать метаданные файлов. Это случилось со мной на FLV видео. Просто получите вывод из более качественной программы, последствие решит мои проблемы с видео. И последнее, если вы что-то делаете неправильно, вы можете проверить loadermax.

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

0 голосов
/ 06 апреля 2011

Проблема

  • Прослушиватель метаданных запускается после вызова
    Метод 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?

0 голосов
/ 20 января 2010
var client:Object = new Object( );
client.onMetaData = function(metadata:Object):void {
    trace(metadata.duration);
};
videoStream.client = client;
...