使用NetStream.Play诡异

最近网络不稳定,网络电视剧看到一半突然网络掉线,这以后就是网络好了,发现播放器提示我视频已经播放结束,跳到下一集去播放了,其实上一集没有没有真正的看完。

经过分析后:

NetStream.Play请求到流后,如果没有数据发送过来,就会发生NetStream.Play.Stop事件,所以提示说视频播放结束。

 

例如在关键帧33304发生NetStream.Play.Stop

动手编写测试代码:

function NetStatusHandler(e:*):void {
	if (e.info.code=="NetStream.Play.Stop") {
		ns.close();
		ns.play("http://222.73.110.88/ce72bc24d64a3afbffc91691881afcd5/vodflv/%E7%94%B5%E5%BD%B1/091229-350k-%E6%9A%AE%E5%85%89%E4%B9%8B%E5%9F%8E-2.flv?start=33304&end=12604683");
	}
}
function onDataHandler(ee:Object):void {}
var nc:NetConnection=new NetConnection();
nc.connect(null);
var ns:NetStream=new NetStream(nc);
ns.play("http://222.73.110.88/ce72bc24d64a3afbffc91691881afcd5/vodflv/%E7%94%B5%E5%BD%B1/091229-350k-%E6%9A%AE%E5%85%89%E4%B9%8B%E5%9F%8E-2.flv?start=0&end=12604683");
var myobj:Object = new Object();
myobj.onMetaData = onDataHandler;
ns.client = myobj;
var v:Video=new Video(640,440);
ns.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler);
v.attachNetStream(ns);
addChild(v);

结果在FLASH IDE中测试 偶尔FLASH挂了,在IE中测试挂了概率也非常的高。或者就没有任何反应。

 

最后想起了NetStream.Seek 一个MP4(H264)文件的BUG联想到。使用延时播放。

修改最后代码:

 

 

function NetStatusHandler(e:*):void {
	if (e.info.code=="NetStream.Play.Stop") {
		ns.close();
		var sleepTime:Timer = new Timer(200);
		if (!sleepTime.hasEventListener(TimerEvent.TIMER)) {
			sleepTime.addEventListener(TimerEvent.TIMER,SleepHandler);
		}
		sleepTime.running||sleepTime.start();
		function SleepHandler(e:TimerEvent):void {
			sleepTime.running&&sleepTime.stop();
			sleepTime.removeEventListener(TimerEvent.TIMER, SleepHandler);
			ns.play("http://222.73.110.88/ce72bc24d64a3afbffc91691881afcd5/vodflv/%E7%94%B5%E5%BD%B1/091229-350k-%E6%9A%AE%E5%85%89%E4%B9%8B%E5%9F%8E-2.flv?start=33304&end=12604683");
		}
	}
}
function onDataHandler(ee:Object):void {}
var nc:NetConnection=new NetConnection();
nc.connect(null);
var ns:NetStream=new NetStream(nc);
ns.play("http://222.73.110.88/ce72bc24d64a3afbffc91691881afcd5/vodflv/%E7%94%B5%E5%BD%B1/091229-350k-%E6%9A%AE%E5%85%89%E4%B9%8B%E5%9F%8E-2.flv?start=0&end=12604683");
var myobj:Object = new Object();
myobj.onMetaData = onDataHandler;
ns.client = myobj;
var v:Video=new Video(640,440);
ns.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler);
v.attachNetStream(ns);
addChild(v);

 

转载于:https://www.cnblogs.com/ahui4367/archive/2010/03/11/1683700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值