最近领导安排我研究视频邮件的实现,想加到我们的手机邮箱项目当中!由于时间紧迫,视频的录制暂不考虑,用户提供视频文件上传,我们提供播放页面就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
分享到:
- 2009-09-26 09:52
- 浏览 2866
- 评论(2)
- 论坛回复 / 浏览 (2 / 11637)
- 查看更多
相关推荐
在Flex视频播放器开发初级阶段,我们主要关注的是如何创建一个基本的用户界面,包括视频播放、控制功能以及一些简单的交互。在这个过程中,Flash Builder 4.5 是首选的开发工具,因为它提供了一个友好的环境来构建...
根据提供的文档信息,我们可以归纳出一系列与Web前端开发相关的知识点,包括HTML标签使用、CSS样式控制、HTML5新特性等。接下来将详细解释这些知识点。 ### 特殊字符表示 在HTML中,特殊字符需要使用特定的编码来...
标题中的"FLEX开发入门"指的是学习Adobe Flex框架的初级阶段,Flex是一种用于构建富互联网应用程序(RIA)的开源开发工具,主要使用ActionScript语言和MXML进行编程。它允许开发者创建交互性强、功能丰富的Web应用,...
Flex事件机制是Adobe Flex应用程序开发中的核心组成部分,它允许组件之间进行有效的通信和交互。对于初级Flex程序员或爱好者来说,理解这一机制至关重要。在本文中,我们将深入探讨Flex事件的各个方面,包括事件流、...
Flex是一种基于ActionScript 3.0的开发框架,主要用于构建富互联网应用(RIA),而ArcGIS Server则是一个强大的GIS服务平台,能够托管地图服务、地理处理服务等。 **初级篇** 1. **环境搭建** - **概述**:在开始...
1. **Java语言**:分为初级、中级和高级三个阶段,涵盖了基本语法、面向对象编程、异常处理、多线程、集合框架、I/O流、反射等核心概念。 2. **网络**:讲解网络基础,特别是TCP/IP协议,这是理解互联网通信的基础...
在学习源码的同时,小黑可能接触了一些用于AS3开发的工具,如Flash Professional、Flash Builder或者Flex SDK等。这些工具提供了代码编辑、调试、预览和发布等功能,极大地提高了开发效率。特别是对于“DisplayObj....
这个数据库系统可能还处于初级阶段,因为它缺少了语法分析和语义分析这两个关键的数据库管理系统(DBMS)组件。在数据库领域,语法分析是将用户输入的SQL查询转化为结构化查询树的过程,而语义分析则是检查查询的...
本文将围绕 Java EE 的技术栈展开,深入探讨 Java 开发的不同阶段所需掌握的技术及知识点。 #### Java 入门 - **开发环境**:介绍如何设置 Java 开发环境,包括 JDK(Java Development Kit)的安装与配置。 - **...
这个作业可能并不包含过于复杂或炫酷的效果...这个"HTML+CSS期末大作业"是网页设计学习的一个初级阶段,它涵盖了基础的HTML和CSS应用,对于初学者来说是一个宝贵的实践经验,为未来深入学习前端开发打下了坚实的基础。
"layout-designer-project-lvl1"这个项目标题暗示着这是一个初级级别的布局设计练习或课程,可能由教育平台如Hexlet提供,用于帮助初学者掌握基本的界面设计概念和技巧。 Hexlet是一个知名的在线学习平台,专注于...