title: Displaying duration of FLV with AS3
body: <p>I am trying to show the duration of an FLV movie with AS3. I keep getting a Metadata error. Code below. Thanks.</p>
  
  <pre><code>    stop();
  
  
  // Video setup -----------------------------------------------/
  var nc:NetConnection = new NetConnection();
  nc.connect(null);
  
  var ns:NetStream = new NetStream(nc);
  ns.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
  ns.client = this;
  video.attachNetStream(ns);
  
  function onStatus(e:Object):void
  {
      if(e.info.code == "NetStream.Play.Start" ||
         e.info.code == "NetStream.Buffer.Full") empty.visible = false;   
  
      else if(e.info.code == "NetStream.Buffer.Empty") empty.visible = true;
  
      else if(e.info.code == "NetStream.Play.Stop") ns.seek(0);   
  }
  
  // Get duration ---------------------------------------------/
  
  var dur:Number;
  var duration:Number;
  
  function onMetaData(meta:Object)
  {
      dur = meta.duration;
  }
  
  // Play the video -------------------------------------------/
  ns.play("http://adobe.edgeboss.net/download/adobe/adobetv/flasher_magazine/issue_1/issue1.mp4");
  
  // Progress bar ---------------------------------------------/
  addEventListener(Event.ENTER_FRAME, loop);
  
  thebar.progress.scaleX = 0;
  
  function loop(e:Event):void
  {
      thebar.loaded.scaleX = ns.bytesLoaded / ns.bytesTotal;
      if(dur)
      {
          thebar.progress.scaleX = ns.time / dur;
      }
  
  }
  
  thebar.loaded.addEventListener(MouseEvent.CLICK, seekTo);
  
  
  thebar.loaded.buttonMode = true;
  thebar.progress.mouseEnabled = false;
  
  function seekTo(e:Event):void
  {
      ns.seek((thebar.track.mouseX/thebar.track.width) * dur);
  }
  
  
  // play/pause control ---------------------------------------------/
  playPause.buttonMode = true;
  playPause.addEventListener(MouseEvent.CLICK, playPauseClick);
  playPause.addEventListener(MouseEvent.ROLL_OVER, playPauseOver);
  playPause.addEventListener(MouseEvent.ROLL_OUT, playPauseOut);
  
  function playPauseClick(e:MouseEvent):void
  {
      var c:MovieClip = playPause;
      if(c.currentFrame == 10)
      {
          c.gotoAndStop(30);
          ns.pause();
      }
      else if(c.currentFrame == 30)
      {
          c.gotoAndStop(10);
          ns.resume();
      }
  }
  
  function playPauseOver(e:MouseEvent):void
  {
      var c:MovieClip = playPause;
      if(c.currentFrame == 1)
      {
          c.gotoAndStop(10);
      }
      else if(c.currentFrame == 20)
      {
          c.gotoAndStop(30);
      }
  }
  
  function playPauseOut(e:MouseEvent):void
  {
      var c:MovieClip = playPause;
      if(c.currentFrame == 10)
      {
          c.gotoAndStop(1);
      }
      else if(c.currentFrame == 30)
      {
          c.gotoAndStop(20);
      }
  }
  
  // Timer -----------------------------------------------/
  
  var time_interval:Number = setInterval(checkTime, 500, ns);
  function checkTime(myVideo_ns:NetStream) {
  var ns_seconds:Number = myVideo_ns.time;
  var minutes:Number = Math.floor(ns_seconds/60);
  var seconds = Math.floor(ns_seconds%60)
  if (seconds&lt;10) {
  seconds = ("0"+seconds);
  }
  time_txt.text = minutes+":"+seconds;
  }; 
  
  //non working duration code
  ns.onMetaData = function(metadata) {
      duration = metadata.duration;
      var dur_seconds:Number = duration;
      var minutes_dspl = Math.floor(dur_seconds/60);
      var seconds_dspl = Math.floor(dur_seconds%60);
      if (minutes_dspl&lt;10) {
          minutes_dspl = ("0"+minutes_dspl);
      }
      if (seconds_dspl&lt;10) {
          seconds_dspl = ("0"+seconds_dspl);
      }
      duration_txt.text = minutes_dspl+":"+seconds_dspl;
  };
  </code></pre>