最近网络不稳定,网络电视剧看到一半突然网络掉线,这以后就是网络好了,发现播放器提示我视频已经播放结束,跳到下一集去播放了,其实上一集没有没有真正的看完。
经过分析后:
NetStream.Play请求到流后,如果没有数据发送过来,就会发生NetStream.Play.Stop事件,所以提示说视频播放结束。
例如在关键帧33304发生NetStream.Play.Stop
动手编写测试代码:
01 |
function NetStatusHandler(e:*): void { |
02 |
if (e.info.code== "NetStream.Play.Stop" ) { |
07 |
function onDataHandler(ee: Object ): void {} |
08 |
var nc:NetConnection= new NetConnection(); |
10 |
var ns:NetStream= new NetStream(nc); |
12 |
var myobj: Object = new Object (); |
13 |
myobj.onMetaData = onDataHandler; |
15 |
var v:Video= new Video( 640 , 440 ); |
16 |
ns.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); |
17 |
v.attachNetStream(ns); |
结果在FLASH IDE中测试 偶尔FLASH挂了,在IE中测试挂了概率也非常的高。或者就没有任何反应。
最后想起了NetStream.Seek 一个MP4(H264)文件的BUG联想到。使用延时播放。
修改最后代码:
01 |
function NetStatusHandler(e:*): void { |
02 |
if (e.info.code== "NetStream.Play.Stop" ) { |
04 |
var sleepTime:Timer = new Timer( 200 ); |
05 |
if (!sleepTime.hasEventListener(TimerEvent.TIMER)) { |
06 |
sleepTime.addEventListener(TimerEvent.TIMER,SleepHandler); |
08 |
sleepTime.running||sleepTime.start(); |
09 |
function SleepHandler(e:TimerEvent): void { |
10 |
sleepTime.running&&sleepTime.stop(); |
11 |
sleepTime.removeEventListener(TimerEvent.TIMER, SleepHandler); |
16 |
function onDataHandler(ee: Object ): void {} |
17 |
var nc:NetConnection= new NetConnection(); |
19 |
var ns:NetStream= new NetStream(nc); |
21 |
var myobj: Object = new Object (); |
22 |
myobj.onMetaData = onDataHandler; |
24 |
var v:Video= new Video( 640 , 440 ); |
25 |
ns.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); |
26 |
v.attachNetStream(ns); |