[as3]as3实现mp4视频无缝循环播放的源代码范例
一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,
[as3]as3实现mp4视频无缝循环播放的源代码范例
一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,下面有一个范例
- 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;
- }
- }
[as3]as3实现mp4视频无缝循环播放的源代码范例
http://www.cnblogs.com/frost-yen/p/5817985.html
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...