·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3播放器判断视频缓冲状态是否完成(seek触发事件)

时间:2016-09-19 17:21酷播
flash视频中netStream.seek(timePoint) 会播放这个流的 timePoint 这个时间点的视频,但如果timePoint这个时间点为缓冲好的话

flash视频中netStream.seek(timePoint) 会播放这个流的 timePoint 这个时间点的视频,但如果timePoint这个时间点为缓冲好的话,视频会停住不动,

并且seek不到的时候,不管是NetStream.Pause.Notify事件还是NetStream.Seek.InvalidTime事件都不会触发(NetStream.Seek.InvalidTime只有seek的时间超出全部视频完整时间的范围时才会触发),请问各位 seek一个未缓冲好的时间点到底会触发什么事件或检测到什么错误,我们怎么才能在程序中知道自己 现在seek的是一个为缓冲好的时间点?

例1:

  1. //CuPlayer.com定义一个Time 检测缓冲比 
  2. var buffer_percent:Number=stream.bufferLength/stream.bufferTime; 
  3.                         if (int(buffer_percent)==1) { 
  4.                                 Time.stop(); 
  5.                                 trace('CuPlayer.com提示:可以播放') 
  6.                         } else { 
  7.                                 trace('CuPlayer.com提示:还在缓冲') 
  8.                         } 

seek到了也会抛出 NetStream.Seek.Notify ,
这个事件没法用的。
stream.bufferLength/stream.bufferTime 只能检测出当前缓冲区还差多少百分比才能播放,与seek到seek不到没啥关系。
有没更好的办法啊?

Math.floor(int(duration) * stream.bytesLoaded / stream.bytesTotal)
//duration 总时间  * 加载的百分比,如果想用户每次拖动都回到能看的位置就 - 5 到10 秒 应该可以行。我做过测试!不知道是不是你想要的效果.
粗略计算就是这样

  1. /** 
  2.                  * 设置播放的位置 
  3.                  * @param value 播放的时间位置 毫秒 
  4.                  * 
  5.                  */ 
  6.                 public function set position(value:Number):void { 
  7.                         if (value == int(duration)) { 
  8.                                 
  9.                                 stream.seek(0); 
  10.                         } else { 
  11.                                 if(value>Math.floor(int(duration) * stream.bytesLoaded / stream.bytesTotal)) 
  12.                                 { 
  13.                                         stream.seek(Math.floor(int(duration) * stream.bytesLoaded / stream.bytesTotal)-5); 
  14.                                 }else{ 
  15.                                         stream.seek(value); 
  16.                                 } 
  17.                         } 
  18.                         trace(value,int(duration)); 
  19.                         _bufferTime.start(); 
  20.                 } 

通过查找视频里面的关键帧数组,没有的话,就用下载量的百分比做吧。不过一般都会有的。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器