一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,说个偏方吧!

package com.views
{
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.utils.setTimeout; /**
* @author Frost.Yen
* @email 871979853@qq.com
* @build 2016-8-9 上午10:53:13
*/
public class VideoView extends Sprite
{
private var _video1:VideoDisplay;
private var _video2:VideoDisplay;
private var _currVideo:VideoDisplay;
private var _duration:Number;
private var _b:Boolean;
public function VideoView(url:String)
{
_video1 = new VideoDisplay(url,true);
_video2 = new VideoDisplay(url);
_video1.onMetaData = onMetaData;
_video2.visible = false;
_currVideo = _video1;
this.addChild(_video1);
this.addChild(_video2);
this.addEventListener(Event.ENTER_FRAME,onCheck);
}
private function onMetaData():void
{
_duration = _video1.duration;
}
private function onCheck(e:Event):void
{
//trace("vs.time= " + _currVideo.time+ " duration= " + _duration );
if (_currVideo.time > 0 && _duration > 0)
{ if (_duration-_currVideo.time <=0.1 )
{ this.removeEventListener(Event.ENTER_FRAME,onCheck);
setTimeout(add,2000);
if(_video1.visible){
_video1.visible = false;
_video2.visible = true;
_video1.seek(0);
_video1.pause();
_video2.play();
_currVideo = _video2;
}else{
_video2.visible = false;
_video1.visible = true;
_video2.seek(0);
_video2.pause();
_video1.play();
_currVideo = _video1;
} //_ns.seek(0);//跳转到0秒处播放。
}
}
}
private function add():void
{
this.addEventListener(Event.ENTER_FRAME,onCheck);
}
}
}
import flash.display.Sprite;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream; class VideoDisplay extends Sprite
{
private var _video:Video;
private var _ns:NetStream;
private var _duration:Number;
public var onMetaData:Function;
public function VideoDisplay(url:String,auto:Boolean=false)
{
var nc:NetConnection = new NetConnection();
nc.connect(null);
_ns = new NetStream(nc);
var client:Object = new Object( );
client.onMetaData = function(data:Object):void {
//trace(data.duration);
_duration = data.duration;
if(onMetaData!=null){
onMetaData();
} };
_ns.client = client;
_video = new Video(1920,1080);
_video.attachNetStream(_ns);
_ns.play(url);
if(!auto){
_ns.seek(0);
_ns.pause();
}
this.addChild(_video);
}
public function play():void
{
_ns.resume();
}
public function pause():void
{
_ns.pause();
}
public function seek(offset:Number):void
{
_ns.seek(offset);
}
public function get duration():Number
{
return _duration;
}
public function get time():Number
{
return _ns.time;
}
}

[ActionScript 3.0] AS3.0 让一个视频无缝循环播放的一个偏方的更多相关文章

  1. [ActionScript 3.0] AS3.0和AS2.0的相互通信

    AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...

  2. [ActionScript 3.0] AS3.0 下雨及涟漪效果

    帧代码: stage.frameRate = 80; function init(x1:Number,y1:Number) { var mc:MovieClip=new MovieClip(); ad ...

  3. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  4. [ActionScript 3.0] AS3.0 本机鼠标指针

    Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...

  5. [ActionScript 3.0] AS3.0 涂鸦及擦除功能,撤销重做步骤记录实例

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMo ...

  6. [ActionScript 3.0] AS3.0 简单封装Socket的通信

    Socket服务器 package com.controls.socket { import com.models.events.AppEvent; import com.models.events. ...

  7. [ActionScript 3.0] AS3.0 Socket通信实例

    以下类是充当Socket服务器的例子 package { import flash.display.Sprite; import flash.events.Event; import flash.ev ...

  8. [ActionScript 3.0] AS3.0 对象在矩形范围随机运动

    package com.views { import flash.display.Bitmap; import flash.display.MovieClip; import flash.displa ...

  9. [ActionScript 3.0] AS3.0 将图像的Alpha通道转换为黑白图像(分离ARGB方式)

    import flash.display.BitmapData; import flash.display.Bitmap; /** * 将图像的Alpha通道转换为黑白图像(分离ARGB方式) */ ...

随机推荐

  1. iOS 通讯录操作

    转载至:http://superuna.blog.51cto.com/4192682/982938 //新增联系人 -(void)AddPeople {         //取得本地通信录名柄     ...

  2. JavaWeb chapter 2 Servlet

    1.  什么是Servlet: Servlet是运行于Web容器中,按照其自身规范编写的Java应用程序. Servlet是用Java语言编写的,它是一个Java类,因而Servlet遵守所有Java ...

  3. shell使用随笔

    001 对文件某一列求和 awk '{sum += $collum};END {print sum}' /path/to/your/file 2 3 3 5 假设文件内容如上所示: # awk '{s ...

  4. hadoop运行原理之shuffle

    hadoop的核心思想是MapReduce,但shuffle又是MapReduce的核心.shuffle的主要工作是从Map结束到Reduce开始之间的过程.首先看下这张图,就能了解shuffle所处 ...

  5. asp.net mvc处理css和js版本问题

    当服务的修改了js和css内容后,发布到IIS服务器上,总是导致客户端内容显示不正确,原因是客户端存在缓存,还是加载的原来的js和css问题. 在css或js后面添加版本号,例如: <scrip ...

  6. js里function的apply vs. bind vs. call

    js里除了直接调用obj.func()之外,还提供了另外3种调用方式:apply.bind.call,都在function的原型里.这3种方法的异同在stackoverflow的这个答案里说的最清楚, ...

  7. 删除IE 下输入后的清除小叉叉

    input::-ms-clear { display: none; } css去掉ie10,11中input[type="text"]后面的X图标 input[type=" ...

  8. STL 库中的陷阱----一个难以察觉的 bug

    请找出下面程序的 bug? int maxProfit2(vector<int> &prices) { int local[3] = {0}; int global[3] = {0 ...

  9. UE4 异步资源加载

    http://blog.csdn.net/pizi0475/article/details/48178861 http://blog.sina.com.cn/s/blog_710ea1400102vl ...

  10. rpm软件包管理

    RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证. 下面我们就来逐一的讲解吧. 一. 安装RPM包 RPM 软件包通常具有类似foo-1.0-1.i386.rp ...