簡體   English   中英

AS3 NetStream不指示視頻結束

[英]AS3 NetStream not indicating end of video

我正在嵌入一個FLV文件,並通過NetStream.appendBytes()函數進行播放。 該視頻可以正常播放,但是我無法確定視頻何時結束播放。

根據此頁面 ,我應該從下面的statusHandler函數中打印出狀態為NetStream.Play.StartNetStream.Buffer.EmptyNetStream.Buffer.FullNetStream.Buffer.FlushNetStream.Play.Stop事件。

根據對頁面的理解,應該從附加到ns.client.onPlayStatus匿名函數中打印出NetStream.Play.Complete

我的輸出完全包含以下內容:

[trace] NetStatus: NetStream.Buffer.Full
[trace] NetStatus: NetStream.Buffer.Empty

視頻開始播放時為“ Full ,播放完畢時為“ Empty

我想啟動NetStream.Play.StopNetStream.Play.Complete 這是我的代碼,我做錯了什么?

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

}
}

創建一個名為Client ..的內部類。

 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屬性...

    ns.client = new Client;

希望能奏效。 在原則上應該如此。 NetStream類是一個密封的類,因此不能在運行時向其添加屬性或方法...如果需要,請對其進行子類化並在該類中定義實例級別的方法/屬性。

根據我的理解,嵌入FLV文件並使用NetStream.appendBytes與所謂的“ HTTP流”相同。

我是從“ 監視NetStream活動 ”頁面獲得的,其中說:

  1. 這樣,NetStream無需了解許多回放事件,例如NetStream.Play.Start或NetStream.Play.Complete。
  2. 玩家應該合成並分發事件。

我還從其他論壇上學習到有人將NetStream.Buffer.Empty用作完整事件。 但是我認為這還意味着可能需要低帶寬的隱式暫停。 我找不到區分的好方法。

希望這可以幫助。 如有任何更新,將非常高興。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM