首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3 NetStream未指示视频结束

AS3 NetStream未指示视频结束
EN

Stack Overflow用户
提问于 2014-08-15 01:40:36
回答 2查看 998关注 0票数 1

我嵌入了一个FLV文件,并通过NetStream.appendBytes()函数播放它。视频播放得很好,但我搞不清视频什么时候播放完。

根据this page的说法,我应该会从下面的statusHandler函数中得到NetStream.Play.StartNetStream.Buffer.EmptyNetStream.Buffer.FullNetStream.Buffer.FlushNetStream.Play.Stop等状态的事件输出。

根据我对this page的理解,我应该从附加到ns.client.onPlayStatus的匿名函数中打印出NetStream.Play.Complete

我的输出完全由以下内容组成:

代码语言:javascript
复制
[trace] NetStatus: NetStream.Buffer.Full
[trace] NetStatus: NetStream.Buffer.Empty

视频开始播放时会出现Full,视频播放结束时会出现Empty

我希望解雇NetStream.Play.StopNetStream.Play.Complete。这是我的代码,我做错了什么?

代码语言:javascript
复制
package {

import flash.display.Sprite;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.utils.ByteArray;

public class Movie extends Sprite {

    [Embed(source="video.flv", mimeType="application/octet-stream")]
    private static const testFLV:Class;

    public function Movie():void {
        var video:Video = new Video(400, 300);
        addChildAt(video, 0);

        var nc:NetConnection = new NetConnection();
        nc.connect(null);

        var ns:NetStream = new NetStream(nc);

        var myClient:Object = new Object();
        ns.client = myClient;

        ns.client.onPlayStatus = function(info:Object):void {
            trace("onPlayStatus: " + info.code);
        };

        ns.client.onStatus = function(info:Object):void {
            trace("onStatus: " + info.code);
        };

        video.attachNetStream(ns);

        var vidBytes:ByteArray = new testFLV();
        ns.play(null);
        ns.appendBytes(vidBytes);

        ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);

    }

    private function statusHandler(event:NetStatusEvent):void {
        trace("NetStatus: " + event.info.code);
    }

}
}
EN

回答 2

Stack Overflow用户

发布于 2014-08-16 03:40:03

创建一个名为Client的内部类。像这样..。

代码语言:javascript
复制
 internal class Client
{
   public function onPlayStatus(info:Object):void
   {
    trace(info.code) // you should be able to catch the ( NetStream.Play.Complete)
   }

   public function onMetaData(info:Object):void
   {

   }
}

然后像这样分配netstream对象的client属性...

代码语言:javascript
复制
    ns.client = new Client;

希望能行得通。原则上应该是这样的。NetStream类是一个密封的类,因此不能在运行时向其添加属性或方法...如果需要,则将其子类化,并在该类中定义实例级方法/属性。

票数 0
EN

Stack Overflow用户

发布于 2015-03-10 14:55:02

根据我的理解,嵌入FLV文件和使用NetStream.appendBytes与所谓的"HTTP流“是相同的方式。

我从Monitoring NetStream Activity页面上得到了这个,上面写着:

  1. 通过这种方式,NetStream不知道回放的许多事件,例如NetStream.Play.Start或NetStream.Play.Complete。
  2. 播放器应该合成,以调度我学习的事件。

我还从其他论坛了解到,有人将使用NetStream.Buffer.Empty作为完整的事件。但我认为这也意味着隐含的缓冲暂停,可能是因为低带宽。我找不到一种好的方法来区分。

希望这能有所帮助。如果你有更新的话,那就太好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25314262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档