`
杰然不同
  • 浏览: 26272 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Flex视频播放器开发(初级阶段)

    博客分类:
  • RIA
阅读更多

      最近领导安排我研究视频邮件的实现,想加到我们的手机邮箱项目当中!由于时间紧迫,视频的录制暂不考虑,用户提供视频文件上传,我们提供播放页面就ok了。于是任务的重点就放到视频播放器的开发。

 

      开发工具Flex Builder3.0

 

      (一)构建页面:

      VideoDisplay播放视频、HSlider进度条、开始、暂停、停止、声音大小、全屏、当前时间/总时间,一个基本的页面在Flex Builder3.0下很快就能构建完成。在这里说明一下,“开始”,“停止”等这些按钮,我是用Image来实现的,而不是Button,因为如果使用Button,其自带有个边框和背景样式,编辑CSS去掉也可以,但是比较麻烦。用Image直接指定一个图片,然后把buttonMode设为true,就和按钮差不多了,当然这个也需要细化,比如鼠标按下和弹起的样式,我这只是初级阶段,就不考虑那么多了!

 

<mx:Image source="{playClass}" click="playButton();" id="playBtn" buttonMode="true"/>

 

      (二)增加基本功能:

      我直接粘贴代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="440" width="500" fontSize="12" initialize="init();">
	
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.events.SliderEvent;
			import mx.events.VideoEvent;
			
			[Embed(source="assets/videoIco/play_small.png")]
			[Bindable]
			private var playClass:Class;				//播放图标样式
			
			[Embed(source="assets/videoIco/pause.png")]
			[Bindable]
			private var pauseClass:Class;				//暂停图标样式
			
			[Embed(source="assets/videoIco/sound1.png")]
			[Bindable]
			private var sound1:Class;				//声音样式1
			
			[Embed(source="assets/videoIco/sound.png")]
			[Bindable]
			private var sound:Class;				//声音样式2(静音)
			
			[Bindable]
			private var videoSource:String;			//媒体路径
			
			private var isPause:Boolean = false;		//暂停状态
			private var isSound:Boolean = true;			//声音状态
			private var isFullScreen:Boolean = false;	//是否是全屏
			private var tmpSound:Number = 0;			//临时声音大小
			[Bindable]
			private var playPosition:Number;			//播放進度 
			
			private function init():void{
				videoSource = parameters.videosource;
			}
			
			private function playingMove(event:VideoEvent):void{
				my_hs.value = myVid.playheadTime;
			}
			
			//进度条改变
			private function hs_onchange(event:SliderEvent):void{
				if(myVid.playheadTime == -1){
					my_hs.value = 0;
		      		return;
				}
				playPosition = my_hs.value;				//保正播放进度統一
				myVid.playheadTime = playPosition;
			}
			
			//进度条鼠标按下
			private function thumbPress():void{
				myVid.pause();
			}
			//进度条鼠标弹起
			private function thumbRelease():void{
				myVid.playheadTime = playPosition;
				myVid.play();
			}
			
			
			//播放,暂停
			private function playButton():void{
				if(!isPause){
					myVid.play();
					playBtn.source = pauseClass;
					isPause = true;
				}else{
					myVid.pause();
					playBtn.source = playClass;
					isPause = false;
				}
			}
			
			//播放完成
			private function vidComplete():void{
				playBtn.source = playClass;
				isPause = false;
			}
			
			//停止播放
			private function stopButton():void{
				myVid.stop();
				playBtn.source = playClass;
				isPause = false;
			}
			
			//切換全屏顯示
        	private function display():void{
        		if(!isFullScreen){
        			stage.fullScreenSourceRect =new Rectangle(myVid.x,myVid.y,myVid.width,myVid.height);             
					stage.displayState =StageDisplayState.FULL_SCREEN;
					isFullScreen = true;
        		}else{
        			stage.displayState = StageDisplayState.NORMAL;
        			isFullScreen = false;
        		}
        	}
        	
        	//调整声音
			private function sound_thumbChanges(event:SliderEvent):void{
				myVid.volume = hs_sound.value;
			}
			
			//静音
			private function closeSound():void{
				if(isSound){
					closeImg.source = sound;
					tmpSound = myVid.volume;
					myVid.volume = 0;
					isSound = false;
				}else{
					closeImg.source = sound1;
					myVid.volume = tmpSound;
					isSound = true;
				}
			}
			
			//格式化时间
			private function formatTime(time:Number):String{
				var min:Number = Math.floor(time/60);
				var sec:Number = Math.floor(time%60);
				
				var timeResult:String = (min < 10 ? "0"+min.toString() : min.toString()) + ":" + (sec < 10 ? "0"+sec.toString() : sec.toString());
				
				return timeResult;
			}
			
			//slider格式化
			private function dataTipFormat(data:Number):String{
				return formatTime(data);
			}
		]]>
	</mx:Script>
	
	<mx:VideoDisplay id="myVid" x="10" y="10" height="360" width="480" 
			source="{videoSource}" 
			autoPlay="false" 
			playheadUpdate="playingMove(event)" 
			complete="vidComplete();" 
			doubleClickEnabled="true"
			doubleClick="display();"/>

	<mx:HBox width="473" verticalAlign="middle" x="17" y="395">
		<mx:Image source="{playClass}" click="playButton();" id="playBtn" buttonMode="true"/>
		<mx:Image source="@Embed('assets/videoIco/stop.png')" click="stopButton();" buttonMode="true"/>
		<mx:Label text="{formatTime(myVid.playheadTime)}/{formatTime(myVid.totalTime)}" width="112"/>
	    <mx:HRule height="0" width="80"/>
	    <mx:Image source="{sound1}" click="closeSound();" id="closeImg" buttonMode="true"/>
	    <mx:HSlider width="96" id="hs_sound" minimum="0" maximum="1" 
	    	change="sound_thumbChanges(event)"
	    	value="{myVid.volume}" 
	    	fillAlphas="[0.6, 1.0, 1.0, 1.0]"/>
	    <mx:Button label="全屏" click="display();"  cornerRadius="20"/>
	</mx:HBox>
	<mx:HSlider width="478" id="my_hs" minimum="0" maximum="{myVid.totalTime}" height="9" x="12" y="378"
		horizontalCenter="0"
		showTrackHighlight="true"
		change="hs_onchange(event)"
		thumbPress="thumbPress();"
	    thumbRelease="thumbRelease();"
	    dataTipFormatFunction="dataTipFormat"/>
</mx:Application>

 

    videoSource = parameters.videosource; 这个是获取从html文件传进来的flv播放源,在html中使用FlashVars进行参数传递

 

    这个简易的播放器有以下几个问题还没解决:

    1.进度条按下滑块拖动,拖到新的时间点释放鼠标后,进度条会向后跳动一段距离开始播放,而不是你鼠标放开的那个位置。

    2.在进度条上直接点新的播放点,滑块会先回到原来的播放点,然后才到新的播放点,中间有个这种效果没有去掉

    3.视频的缓冲机制没有处理

 

这3个问题将是我下个阶段处理的重点!

 

ps:附件图片是播放器效果图

  • 大小: 66.2 KB
分享到:
评论
2 楼 lastlucifier 2010-08-09  
LZ的第一个问题偶也遇到了,不知道LZ解决了没。。。。坐等
1 楼 ganky 2010-06-12  
这个不能在一般手机上播放吧……

相关推荐

    Flex视频播放器开发初级代码

    在Flex视频播放器开发初级阶段,我们主要关注的是如何创建一个基本的用户界面,包括视频播放、控制功能以及一些简单的交互。在这个过程中,Flash Builder 4.5 是首选的开发工具,因为它提供了一个友好的环境来构建...

    1+X认证Web前端开发初级模拟试题及答案6套.docx

    根据提供的文档信息,我们可以归纳出一系列与Web前端开发相关的知识点,包括HTML标签使用、CSS样式控制、HTML5新特性等。接下来将详细解释这些知识点。 ### 特殊字符表示 在HTML中,特殊字符需要使用特定的编码来...

    FLEX开发入门

    标题中的"FLEX开发入门"指的是学习Adobe Flex框架的初级阶段,Flex是一种用于构建富互联网应用程序(RIA)的开源开发工具,主要使用ActionScript语言和MXML进行编程。它允许开发者创建交互性强、功能丰富的Web应用,...

    Flex的事件机制笔记

    Flex事件机制是Adobe Flex应用程序开发中的核心组成部分,它允许组件之间进行有效的通信和交互。对于初级Flex程序员或爱好者来说,理解这一机制至关重要。在本文中,我们将深入探讨Flex事件的各个方面,包括事件流、...

    use ArcGIS API for Flex control ArcGIS Server

    Flex是一种基于ActionScript 3.0的开发框架,主要用于构建富互联网应用(RIA),而ArcGIS Server则是一个强大的GIS服务平台,能够托管地图服务、地理处理服务等。 **初级篇** 1. **环境搭建** - **概述**:在开始...

    刘树全的J2EE培训教程

    1. **Java语言**:分为初级、中级和高级三个阶段,涵盖了基本语法、面向对象编程、异常处理、多线程、集合框架、I/O流、反射等核心概念。 2. **网络**:讲解网络基础,特别是TCP/IP协议,这是理解互联网通信的基础...

    [转]小黑之天地培训学习手记——第三、四周

    在学习源码的同时,小黑可能接触了一些用于AS3开发的工具,如Flash Professional、Flash Builder或者Flex SDK等。这些工具提供了代码编辑、调试、预览和发布等功能,极大地提高了开发效率。特别是对于“DisplayObj....

    C++ 实现的一个简单数据库

    这个数据库系统可能还处于初级阶段,因为它缺少了语法分析和语义分析这两个关键的数据库管理系统(DBMS)组件。在数据库领域,语法分析是将用户输入的SQL查询转化为结构化查询树的过程,而语义分析则是检查查询的...

    JAVA技术体系

    本文将围绕 Java EE 的技术栈展开,深入探讨 Java 开发的不同阶段所需掌握的技术及知识点。 #### Java 入门 - **开发环境**:介绍如何设置 Java 开发环境,包括 JDK(Java Development Kit)的安装与配置。 - **...

    HTML+CSS期末大作业

    这个作业可能并不包含过于复杂或炫酷的效果...这个"HTML+CSS期末大作业"是网页设计学习的一个初级阶段,它涵盖了基础的HTML和CSS应用,对于初学者来说是一个宝贵的实践经验,为未来深入学习前端开发打下了坚实的基础。

    layout-designer-project-lvl1

    "layout-designer-project-lvl1"这个项目标题暗示着这是一个初级级别的布局设计练习或课程,可能由教育平台如Hexlet提供,用于帮助初学者掌握基本的界面设计概念和技巧。 Hexlet是一个知名的在线学习平台,专注于...

Global site tag (gtag.js) - Google Analytics