我正在嵌入一个FLV文件,并通过NetStream.appendBytes()
函数播放它。视频播放效果很好,但我无法弄清楚视频播放完毕的时间。
根据this page,我应该收到包含NetStream.Play.Start
,NetStream.Buffer.Empty
,NetStream.Buffer.Full
,NetStream.Buffer.Flush
和&等状态的活动。 NetStream.Play.Stop
打印出我statusHandler
以下的功能。
根据我对this page的理解,我应该从NetStream.Play.Complete
附带的匿名函数中打印ns.client.onPlayStatus
。
我的输出完全由以下内容组成:
[trace] NetStatus: NetStream.Buffer.Full
[trace] NetStatus: NetStream.Buffer.Empty
我的视频开始播放时出现Full
,完成时出现Empty
。
我希望NetStream.Play.Stop
或NetStream.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);
}
}
}
答案 0 :(得分:0)
创建一个名为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对象的客户端属性......
ns.client = new Client;
希望有效。原则上它应该。 NetStream类是一个密封的类,因此无法在运行时向其添加属性或方法...如果需要,则将其子类化并在该类中定义实例级方法/属性。
答案 1 :(得分:0)
根据我的理解,嵌入FLV文件并使用NetStream.appendBytes与所谓的" HTTP流式传输"。
相同。我从页面Monitoring NetStream Activity获得了这一点,其中说:
我还在其他论坛上学习,有人会使用NetStream.Buffer.Empty作为完整的事件。但我认为这也意味着缓冲的隐含暂停,可能是低带宽。我没有找到一个很好的区分方法。
希望这会有所帮助。如果有任何更新,那将很高兴。