- 浏览: 1451235 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (564)
- 算法 (7)
- 流金岁月 (1)
- Javascript (30)
- actionscript (108)
- as3.0 game (14)
- flex (84)
- fms2 (27)
- 正则表达式 (7)
- 开源组件代码(as3.0) (1)
- Pv3d (13)
- Cairngorm (4)
- vbs (54)
- VB程序设计 (26)
- 计算机应用与维护 (4)
- 职场实用穿衣技巧 (3)
- 历史风云 (15)
- 淡泊明志,宁静致远 (12)
- 情感 (26)
- 杂谈 (41)
- 越南风 (14)
- DirectX (9)
- Dev-cpp (11)
- 回望百年 (2)
- 建站经验 (2)
- Python (24)
- 网络赚钱 (4)
- php (2)
- html (1)
- ob0短址网 (1)
- ob0.cn (1)
- wordpress (1)
- pandas logistic (1)
- haxe (1)
- opencv (1)
- 微信小程序 (3)
- vue (3)
- Flutter (1)
最新评论
-
GGGGeek:
第一个函数滚动监听不起作用,onPageScroll可以
微信小程序--搜索框滚动到顶部时悬浮 -
naomibyron:
解决办法:工具 -> 编译选项 -> 编译器 ...
dev-c++中编译含WINSOCK的代码出现错误的解决方法 -
haichuan11:
这个…… 代码不全真的是让人很憋屈的感觉啊
actionScript 3.0 图片裁剪及旋转 -
chenyw101:
老兄能留个QQ号吗?具体的我有些东西想请教下你
用VB制作网站登陆器 -
yantao1943:
貌似有点问题,只派发一次事件啊
使用ActionScript 2.0或ActionScript 3.0处理音频文件的提示点(cue
Flash Player作为流媒体的表现形式之一,视频编码是其最大的特色。.flv文件是Flash Player基本的视频文件格式,可以在Flash Player运行时加载,不被编译到虚拟机中,这就大大减小了Flash Player文件的体积,增加了Flash Player视频文件在网络上传输的速度。
21.1 视频类
在ActionScript 3.0中,提供了一个Video类,用来处理视频。使用Video类可以控制基本的视频文件功能比如编码、滤镜等。
通过使用Video类的属性和方法,可以在程序中直接显示实时的视频流,而不用把视频文件编译到Flash Player视频文件中。其常用的属性如表21.1所示,常用的方法如表21.2所示。
表21.1 Video类常用的属性
属 性 |
说 明 |
deblocking |
指示作为后处理的一部分应用于已解码视频的滤镜的类型 |
smoothing |
指定在缩放视频时是否应进行平滑处理(插补数据) |
videoHeight |
以像素为单位指定视频流的高度 |
videoWidth |
以像素为单位指定视频流的宽度 |
表21.2 Video类常用的方法
方 法 |
说 明 |
attachCamera |
指定在应用程序窗口中Video对象的边界内显示来自摄像头的视频流 |
attachNetStream |
指定在应用程序窗口中Video对象的边界内显示视频流 |
clear |
清除该Video对象中当前显示的图像 |
21.2 加载视频文件
.flv格式是Flash Player网络传输的视频文件的基本格式。可以通过一些工具把其他的视频文件格式转换为.flv格式,比如Flash CS3自带的工具Flash Video Encode。
加载一个视频文件,通常可以分为三步实现。其步骤如下所示。
创建一个NetConnection对象。NetConnection类作用是连接到远程服务器中,调用命令,播放视频。其代码如下所示:
// 建立连接
var nc:NetConnection = new NetConnection();
nc.connect(null);
创建一个NetStream对象。NetStream类作用是通过NetConnection对象提供的连接,打开Flash Player与服务器或Flash Player与本地文件系统之间的单向流连接。其代码如下所示:
// 创建视频流
var ns:NetStream = new NetStream(nc);
// 开始播放
ns.play("lake.flv");
创建一个Video对象。调用Video类的attachNetStream事件,可以直接显示视频流。其代码如下所示:
// 视频传输到本地
// 创建Video对象
var vid:Video = new Video();
vid.attachNetStream(ns);
通过这三个步骤的操作,视频文件就被加载并播放。
下面示例说明如何播放一个本地的视频文件lake.flv。其完整的代码如下所示:
package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.events.AsyncErrorEvent;
public class VideoExample extends Sprite
{
/*************************************
* 构造函数
* */
public function VideoExample()
{
// 建立连接
var nc:NetConnection = new NetConnection();
nc.connect(null);
// 创建视频流
var ns:NetStream = new NetStream(nc);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
// 指定视频名
ns.play("lake.flv");
// 视频传输到本地
var vid:Video = new Video();
vid.attachNetStream(ns);
// 添加到舞台上
addChild(vid);
}
/*************************************
* 捕获连接异常
* */
function asyncErrorHandler(event:AsyncErrorEvent):void
{
// 错误处理
}
}
}
编译代码,运行效果如图21.1所示。
图21.1 加载视频文件
21.3 视频文件的控制
视频文件的控制是指在视频在播放过程中,用户通过一些交互式的按钮或者其他组件触发事件,精确的控制视频的播放,包括停止播放、暂停播放、视频回放等。
21.3.1 从指定的位置播放
通过NetStream对象的play()方法可以回放视频文件,但是play()方法是从视频文件的开始播放的。有时候,我们需要从指定的位置或者时间开始播放,那么什么方法可以满足这个要求呢?在NetStream类中提供了seek()方法,可以搜索指定位置开始播放。其参数有一个,表示从流的开始位置算起的偏移量,以秒为单位。其语法格式如下所示:
seek(offset:Number):void
比如下面的示例作用是从第5秒开始播放一个视频文件,代码如下所示:
package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
public class VideoExample extends Sprite
{
/*************************************
* 构造函数
* */
public function VideoExample()
{
// 建立连接
var nc:NetConnection = new NetConnection();
nc.connect(null);
// 创建视频流
var ns:NetStream = new NetStream(nc);
// 指定视频名
ns.play("lake.flv");
// 从第5秒开始播放
ns.seek(5);
// 视频传输到本地
var vid:Video = new Video();
vid.attachNetStream(ns);
// 添加到舞台上
addChild(vid);
}
}
}
编译代码,运行的效果如图21.2所示。
图21.2 从指定的位置播放
21.3.2 停止
需要停止一个正在播放的视频的时候,要使用NetStream对象的close()方法。close()方法同时也停止了从服务器中下载视频。其语法格式如下所示:
close():void
如果要继续播放和从服务器中下载视频,需要再次调用NetStream对象的play()方法。下面的示例使用close()方法停止正在播放的视频,代码如下所示:
package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.events.MouseEvent;
import flash.events.AsyncErrorEvent;
import fl.controls.Button;
public class VideoExample extends Sprite
{
var ns:NetStream;
var nc:NetConnection;
var vid:Video;
/*************************************
* 构造函数
* */
public function VideoExample()
{
LoadVideo();
LoadStopButton();
}
/*************************************
* 加载视频文件
* */
private function LoadVideo():void
{
// 建立连接
nc = new NetConnection();
nc.connect(null);
// 创建视频流
ns = new NetStream(nc);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
// 指定视频名
ns.play("lake.flv");
// 视频传输到本地
vid = new Video();
vid.attachNetStream(ns);
// 添加到舞台上
addChild(vid);
}
/*************************************
* 创建一个停止的按钮
* */
private function LoadStopButton():void
{
// 增加停止按钮
var stop_btn:Button = new Button();
stop_btn.label = "停止";
stop_btn.move(10, 250);
stop_btn.addEventListener(MouseEvent.CLICK, StopBtn_Click);
addChild(stop_btn);
}
/*************************************
* 创建一个停止按钮的单击事件
* */
private function StopBtn_Click(e:MouseEvent):void
{
// 停止播放
ns.close();
}
/*************************************
* 捕获连接异常
* */
function asyncErrorHandler(event:AsyncErrorEvent):void
{
// 错误处理
}
}
}
编译代码,运行效果如图21.3所示。
图21.3 停止正在播放的视频
21.3.3 暂停与回放
暂停正在播放的视频,需要使用NetStream对象的pause()方法。如果暂停之后,需要从暂停的地方播放,就需要用到resume()方法了。resume()方法作用是恢复播放暂停的视频流。其语法格式如下所示:
resume():void
下面的示例使用pause()方法和resume()方法控制正在播放的视频,示例代码如下所示:
package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.events.MouseEvent;
import flash.events.AsyncErrorEvent;
import fl.controls.Button;
public class VideoExample extends Sprite
{
var ns:NetStream;
var nc:NetConnection;
var vid:Video;
var pause_btn:Button;
/*************************************
* 构造函数
* */
public function VideoExample()
{
LoadVideo();
LoadPauseButton();
}
/*************************************
* 加载视频文件
* */
private function LoadVideo():void
{
// 建立连接
nc = new NetConnection();
nc.connect(null);
// 创建视频流
ns = new NetStream(nc);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
// 指定视频名
ns.play("lake.flv");
// 视频传输到本地
vid = new Video();
vid.attachNetStream(ns);
// 添加到舞台上
addChild(vid);
}
/*************************************
* 创建一个暂停/回放按钮
* */
private function LoadPauseButton():void
{
// 增加暂停/回放按钮
pause_btn = new Button();
pause_btn.label = "暂停";
pause_btn.move(10, 250);
pause_btn.addEventListener(MouseEvent.CLICK, PauseBtn_Click);
addChild(pause_btn);
}
/*************************************
* 创建一个暂停按钮的单击事件
* */
private function PauseBtn_Click(e:MouseEvent):void
{
if(e.target.label == "暂停")
{
// 停止播放
ns.pause();
pause_btn.label = "回放";
}
else
{
// 回放
ns.resume();
pause_btn.label = "暂停";
}
}
/*************************************
* 捕获连接异常
* */
function asyncErrorHandler(event:AsyncErrorEvent):void
{
// 错误处理
}
}
}
编译代码,运行效果如图21.4所示。
图21.4 暂停和回放视频
21.3.4 控制视频的音量
控制视频中的声音,需要使用NetStream对象中的soundTransform属性,soundTransform属性返回的是一个SoundTransform对象,SoundTransform对象中的volume属性可以控制声音。
下面的示例使用Slider控件控制视频中声音的大小,代码如下所示:
package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.media.SoundTransform;
import fl.events.SliderEvent;
import flash.events.AsyncErrorEvent;
import fl.controls.Slider;
public class VideoSoundExample extends Sprite
{
var ns:NetStream;
var nc:NetConnection;
var vid:Video;
var sound_slider:Slider;
var sound:SoundTransform;
/*************************************
* 构造函数
* */
public function VideoSoundExample()
{
LoadVideo();
LoadSlider();
}
/*************************************
* 加载视频文件
* */
private function LoadVideo():void
{
// 建立连接
nc = new NetConnection();
nc.connect(null);
// 创建视频流
ns = new NetStream(nc);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
// 创建声音
sound = ns.soundTransform;
// 指定视频名
ns.play("lake.flv");
// 视频传输到本地
vid = new Video();
vid.attachNetStream(ns);
// 添加到舞台上
addChild(vid);
}
/*************************************
* 创建Slider控件
* */
private function LoadSlider():void
{
sound_slider = new Slider();
sound_slider.move(10, 250);
// 声音默认值
sound_slider.value = sound.volume;
sound_slider.addEventListener(SliderEvent.CHANGE, volumeChange
Handler);
addChild(sound_slider);
}
/*************************************
* 控制声音
* */
private function volumeChangeHandler(event:SliderEvent):void
{
// 获取Slider控件的值
sound.volume = event.value;
ns.soundTransform = sound;
}
/*************************************
* 捕获连接异常
* */
function asyncErrorHandler(event:AsyncErrorEvent):void
{
// 错误处理
}
}
}
编译代码,运行效果如图21.5所示。
图21.5 视频中的音量控制
21.4 获取视频文件的信息
可以使用onMetaData回调处理函数获取视频文件的信息。视频文件的信息包括持续时间、宽度、高度及帧速等。
21.4.1 onMetaData回调方法
onMetaData是一个回调函数,使用这个回调函数,可以获取元数据的信息,也就是视频文件的信息,包括持续时间、高度、宽度、帧速、视频编码器及音频编码器等。
回调方法有很多参数,通过不同的参数,可以获取元数据不同的信息。回调方法的常用的参数如表21.3所示。
表21.3 onMetaData回调函数的常用的参数
参 数 |
说 明 |
audiocodecid |
指示已使用的音频编解码器(编码/ 解码技术) |
audiodatarate |
指示音频的编码速率,以每秒千字节为单位 |
audiodelay |
指示原始FLV文件的“time 0”在FLV文件中保持多长时间。为了正确同步音频,视频内容需要有少量的延迟 |
canSeekToEnd |
如果FLV文件是用最后一帧(它允许定位到渐进式下载影片剪辑的末尾)上的关键帧编码的,则该值为true。如果FLV文件不是用最后一帧上的关键帧编码的,则该值为false |
cuePoints |
嵌入在FLV文件中的提示点对象组成的数组,每个提示点对应一个对象。如果FLV文件不包含任何提示点,则值是未定义的 |
duration |
以秒为单位指定FLV文件的持续时间 |
framerate |
表示FLV文件的帧速率 |
height |
以像素为单位表示FLV文件的高度 |
videocodecid |
表示用于对视频进行编码的编解码器的版本 |
videodatarate |
表示FLV文件的视频数据速率 |
width |
以像素为单位表示FLV文件的宽度 |
onMetaData回调方法的关联对象是赋值给NetStream对象的client()方法的,下面的示例说明onMetaData回调方法如何使用,代码如下所示:
// 创建回调函数的对象
var customClient:Object = new Object();
customClient.onMetaData = metaDataHandler;
// 创建视频流
var ns:NetStream = new NetStream(nc);
// 回调函数的对象customClient
// 赋值给NetStream对象的属性client
ns.client = customClient;
// 指定视频名
ns.play("Bear.flv");
/*************************************
* onMetaData回调函数的事件
* */
function metaDataHandler(metadata:Object):void
{
// 处理数据
}
21.4.2 获取视频文件的基本信息
使用回调函数onMetaData可以获取视频文件的基本信息。下面的示例通过onMetaData回调函数获取视频文件的持续时间、帧速、高度和宽度,代码如下所示:
package
{
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
import flash.events.AsyncErrorEvent;
public class CuoPointExample extends Sprite
{
var ns:NetStream;
var nc:NetConnection;
var vid:Video;
public function CuoPointExample()
{
LoadVideo();
发表评论
-
控制连接数量和密码保护-flashcom教程 密码保护
2008-10-30 14:03 1235学习flashcom+学习英语(烂到死),无任何目的,本篇仅 ... -
AMF3 + AS 3.0 + ASP.NET 完整配置过程及源文件
2008-09-11 16:04 3578AMF3 + AS 3.0 + ASP.NET 完整配置过程及 ... -
FLEX结合FMS制作在线视频认证
2008-09-09 14:24 3827很多交友网站都具体在线视频认证能,如51.com。参考它的认 ... -
flex 3 + .net开发flash Remoting四[完整代码
2008-08-28 16:11 2210一. 相关说明: 本篇将呈现完整的Flash Remot ... -
FMS Client AS 自訂類別物件傳遞
2008-08-27 15:04 1056透過與 FMS 連線,可以共享 SharedObject 物件 ... -
FMS 常常会用到 3个Call 和3个Send
2008-08-27 14:51 2197FMS 常常会用到 3个Call 和3个Send 关于Flas ... -
flex as3 fms相关的资料(转)
2008-08-27 14:36 1698FMS.rar FMS系列教程http://www.fs2 ... -
一步一步学Flash Media Server
2008-08-26 18:03 4354从今天起,我们来学习一下 Flash Media Server ... -
再说说onSync,SharedObject
2008-08-26 16:44 1604* 最多人不懂的就是:那个list参数看代码: my_rso ... -
视频监控软件(2)---异步录像
2008-08-26 16:10 1381不好意思,让大家久等了!今天我要实现的一个功能是异步录像!先讲 ... -
视频监控软件(1)---FMS视频流共享
2008-08-26 16:07 2716呵呵!临近毕业了,本人选择的毕业设计题目是(基于B/S模式的 ... -
flash fms WebService 交互过程
2008-08-26 16:01 1727//flash客户端call服务器端的方法,服务器端调用WS的 ... -
游戏开发常用FMS类
2008-08-26 15:51 1453游戏开发常用FMS类 ... -
FLEX提高篇--------ShareObject对象详解
2008-08-26 14:23 1126ShareObject,顾名思义共享对象,而通常意义上的共享, ... -
客户端呼叫Flash Medis Server3服务端入门
2008-08-26 14:02 1468当你不仅仅只想用FLEX来做纯业务数据的管理时,或者当你的项目 ... -
FMS两种方式实现简易聊天室
2008-08-26 14:01 1684原理和代码都很简单,没什么好说的. 一:利用ShareOb ... -
FLEX提高篇---------FMS简易聊天室加强版
2008-08-26 13:37 1832今天写了下简易聊天室的加强版 , 其实功能也十分有很 , 不过 ... -
Flex连接FMS实现用户列表(使用SharedObject)
2008-08-26 13:33 39871.先在FMS的安装目录中添加自己的应用(例如我的目录D:\M ... -
FMS 教程(SharedObject)用户列表
2008-08-26 13:32 2931FMS实现用户列表,一般都是利用List组件,和SharedO ... -
Fms教程7 理解共享对象
2008-08-26 13:13 1921理解共享对象 共享对象 ...
相关推荐
基于Kotlin +MVP+Retrofit+RxJava+Glide等架构实现短视频类小项目基于Kotlin +MVP+Retrofit+RxJava+Glide等架构实现短视频类小项目基于Kotlin +MVP+Retrofit+RxJava+Glide等架构实现短视频类小项目基于Kotlin +MVP+...
总之,"video-tpl-master"提供的视频类H5模板是一个完整的Web项目框架,通过JavaScript脚手架工具,开发者可以快速构建一个具有专业视频展示功能的网页,无论是在桌面端还是移动端,都能提供优秀的用户体验。...
【标题】:“模仿视频类客户端的APP” 在移动应用开发领域,模仿视频类客户端的APP是一种常见的实践方式,尤其对于初学者来说,这样的项目可以帮助他们理解如何构建一个功能丰富的多媒体应用。这类APP通常包括视频...
"AD封装库 常用音视频类封装"是一个专门针对这一领域的工具集,它提供了一套完整的音视频处理解决方案,帮助开发者更便捷地实现相关功能。 首先,我们要理解“封装”的概念。在编程中,封装是面向对象编程的一个...
视频类收录Excel表格
【标题】"基于PHP的A17CMS php视频类网站源码",表明这是一个使用PHP编程语言开发的视频类网站的源代码。A17CMS可能是一个内容管理系统(CMS),专为搭建视频分享或在线视频流媒体平台设计。在深入讨论相关知识点...
源码的提供旨在为开发者提供一个快速搭建短视频类应用的基础框架。 【描述】中提到的关键信息包括: 1. **Thinkphp框架**:Thinkphp是基于PHP的轻量级开发框架,它具有MVC(模型-视图-控制器)结构,提供了丰富的...
该压缩包文件“黑色纹理电影视频类html网站模板-黑色 纹理 电影 视频 html 简洁 读书 grad.rar”包含了用于构建一个专门针对电影视频类的HTML网站模板。这个模板的设计风格以黑色为主,融入了纹理元素,给人一种高端...
A17CMS是基于光线CMS1.5二次开发的视频类网站源码。 后台一键采集上万条资源,修改了模板利于优化。 改进功能: 1、修改采集系统(原程序采集已经失效); 2、优化内容生成内核,提升系统性能与稳定性; 3、详情页...
基于Kotlin+MVP+Retrofit+RxJava+Glide 等架构实现短视频类小项目 模块说明: 每日精选: 首页采用下拉刷新+RecyclerView 实现,Banner展示每日精选推荐的视频,监听 RecyclerView 的滑动事件,实现 TitleBar 的...
该项目为基于Kotlin语言的短视频类APP设计源码,采用MVP+Retrofit+RxJava+Glide架构,包含262个文件,其中Kotlin文件99个,XML文件80个,PNG图片文件54个,Gradle文件5个,YAML文件3个,Git忽略文件3个,Markdown...
thinkphp仿众图网图片素材下载站源码可用于图片类素材站,音频类资源站,视频类资源站,自媒体素材站等资源类下载站源码。 修改数据库文件data/conf/database.php为你的数据库 导入数据库 sucai.sql 后台地址:你...
Android 简单视频类娱乐类应用本项目中使用到 Recyclerview 、Toolbar、 TabLayout、SwipeRefreshLayout、NavigationView、CoordinatorLayout、CardView等技术知识 ,主要依赖vitamio播放视频,vitamio也是一个不错...
影牛源码社区短视频APP源码最火短视频类APP源码下载
图片视频类主题模板JustMediaV2.7.3主题
视频类App竞品分析与交互体验.pdf
主题图片视频类主题最新版JustMedia主题源码下载
帝国CMS7.2响应式美女图片视频类网站模板92Game源码.txt
这是一套适合图片视频类模板,本模板基于WordPress二次开发,高端大气,效果酷炫;交互性很强。整站代码精简,加速响应,优化很多细节,对搜索引擎(SEO)友好,使该模板更实用而美观。 页面简洁,容易管理,附带整...