2016-10-13 00:16:48 点击量:201 标签: 收藏本文
flash视频中netStream.seek(timePoint) 会播放这个流的 timePoint 这个时间点的视频,但如果timePoint这个时间点为缓冲好的话,视频会停住不动,
并且seek不到的时候,不管是NetStream.Pause.Notify事件还是NetStream.Seek.InvalidTime事件都不会触发(NetStream.Seek.InvalidTime只有seek的时间超出全部视频完整时间的范围时才会触发),请问各位 seek一个未缓冲好的时间点到底会触发什么事件或检测到什么错误,我们怎么才能在程序中知道自己 现在seek的是一个为缓冲好的时间点?
例1:
- //CuPlayer.com定义一个Time 检测缓冲比
- var buffer_percent:Number=stream.bufferLength/stream.bufferTime;
- if (int(buffer_percent)==1) {
- Time.stop();
- trace('CuPlayer.com提示:可以播放')
- } else {
- trace('CuPlayer.com提示:还在缓冲')
- }
seek到了也会抛出 NetStream.Seek.Notify ,
这个事件没法用的。
stream.bufferLength/stream.bufferTime 只能检测出当前缓冲区还差多少百分比才能播放,与seek到seek不到没啥关系。
有没更好的办法啊?
Math.floor(int(duration) * stream.bytesLoaded / stream.bytesTotal)
//duration 总时间 * 加载的百分比,如果想用户每次拖动都回到能看的位置就 - 5 到10 秒 应该可以行。我做过测试!不知道是不是你想要的效果.
粗略计算就是这样
- /**
- * 设置播放的位置
- * @param value 播放的时间位置 毫秒
- *
- */
- public function set position(value:Number):void {
- if (value == int(duration)) {
- stream.seek(0);
- } else {
- if(value>Math.floor(int(duration) * stream.bytesLoaded / stream.bytesTotal))
- {
- stream.seek(Math.floor(int(duration) * stream.bytesLoaded / stream.bytesTotal)-5);
- }else{
- stream.seek(value);
- }
- }
- trace(value,int(duration));
- _bufferTime.start();
- }
通过查找视频里面的关键帧数组,没有的话,就用下载量的百分比做吧。不过一般都会有的。
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室