视频开发docWord文档下载推荐.docx
- 文档编号:17305997
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:21
- 大小:109.31KB
视频开发docWord文档下载推荐.docx
《视频开发docWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《视频开发docWord文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
流媒体视频应用
由于流媒体格式的数据传输速度快,因此被广泛应用于互联网上的大型视频点播网站,比较典型的视频点播网站又56视频网,优酷视频网、土豆视频网等。
同时这种技术也可以用于在线视频教学系统进行点播学习或公司内部会议视频在线提供观看等。
补充说明下那个高清格式的.f4v,因为测试的时候从土豆上拉了个高清格式的视频文件下来,发现后缀是.f4v的,利用开发的这个播放器播放不了,后缀名改成flv是可以播放的,觉得奇怪,都是流格式应该是可以播放的才对,原来忘了在网站的http头文件的MIME类型添加扩展名,添加下.f4v的扩展名就OK了,可以正常播放了,后来也看了下XX百科对这种高清格式是这么说的:
作为一种更小更清晰,更利于在网络传播的格式,F4V已经逐渐取代了传统FLV,也已经被大多数主流播放器兼容播放,而不需要通过转换等复杂的方式。
F4V是Adobe公司为了迎接高清时代而推出继FLV格式后的支持H.264的F4V流媒体格式。
它和FLV主要的区别在于,FLV格式采用的是H263编码,而F4V则支持H.264编码的高清晰视频,码率最高可达50Mbps。
2功能概述
2.1设计目的
作为系统平台功能的扩充,开发此模块,现实一个功能相对全面的流媒体播放器,主要用于播放流媒体格式的视频,提供给特殊要求的客户用于外网在线播放新闻视频。
2.2功能说明
1)
视频的暂停、播放
2)
视频拖动播放和定点播放
3)
音量的禁音和开启
4)
拖动滑块控制音量
5)
视频缓冲进度高亮显示
6)
视频全屏处理,点击按钮或点击视频画面实现全屏
2.3运行环境
此模块采用Flex4.0开发,要求客户端安装flash10.0.0
(含以上版本)
3
功能设计
3.1相关变量属性
private
var
isPause:
Boolean=
false;
//暂停状态
isSound:
true;
//声音状态(是否禁音)
_volume:
Number=0.6;
//默认音量大小(最大值为1)
isFullScreen:
//是否是全屏
totalTime:
Number;
//播放总时间
playPosition:
//剪辑位置
videoUrl:
String;
//视频文件地址
videoWidth:
//视频宽度
videoHeight:
//视频高度
isAutoPlay:
//是否自动播放
3.2
初始化视频画布
点开视频播放页面后首先初始化视频播放的画面,根据接收的用户参数初始化视频画面的大小。
对象定义:
import
mx.events.SliderEvent;
//滑块事件命名空间引用
nc:
NetConnection;
//媒体连接对象
ns:
NetStream;
//网络流对象
metaDataObj:
Object={};
//媒体的元数据信息
video:
Video;
//视频对象
初始化方法如下:
function
init():
void
{
videoUrl=parameters.videoUrl;
videoWidth=parameters.videoWidth;
videoHeight=parameters.videoHeight
video=
new
Video(videoWidth,videoHeight);
video.smoothing=
//画面平滑处理,去掉全屏后的水纹以提高画面清晰度
uic.addChild(video);
//将视频对象添加到页面
}
3.3
加载视频流并播放
当视频初始化完成后调用视频播放方法,将方法置于应用程序事件头里面。
<
s:
Application
xmlns:
fx="
s="
library:
//
mx="
//minWidth="
955"
minHeight="
600"
initialize="
init()"
creationComplete="
startVideo()"
>
startVideo():
{
nc=
NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
//添加播放连接监听事件
nc.connect(null);
当连接对象成功连接后,播放视频,上面的nc.connect(null);
表示如果未使用
FlashMediaServer,可使用null作为参数以便从本地文件系统或
Web
服务器中播放视频和
MP3
文件。
netStatusHandler(e:
NetStatusEvent):
ns=
NetStream(nc);
metaDataObj.onMetaData=
this.onMetaData;
ns.client=metaDataObj;
video.attachNetStream(ns);
//ns.bufferTime=5;
ns.play(videoUrl);
soundProcess.value=_volume;
soundTrans.volume=_volume
ns.soundTransform=soundTrans;
this.addEventListener(Event.ENTER_FRAME,EnterFrameHandler);
//添加播放过程中的监听事件
ns.addEventListener(NetStatusEvent.NET_STATUS,NetStreamStatusHandler);
//添加播放完毕(或其它状态)后的监听事件
if(!
isAutoPlay)//客户端没有设置为自动播放时的处理
ns.pause();
btnPlay.source=playClass;
isPause=
else
btnPlay.source=pauseClass;
//获取视频的元数据信息,这里的元数据信息包括视频编码,视频码率,音频编码,音频码率,音视频文件大小,流文件总大小,播放总时间等
onMetaData(obj:
Object):
totalTime=obj.duration;
fileSize=(obj.filesize/(1024*1024)).toFixed
(2).toString()+"
MB"
;
//换算成兆字节并保留两位小数
说明:
用于监听播放过程中的事件处理,由于在播放过程中,播放进度和缓冲进度要实时显示以及播放到哪一个时间点了也都需要动态实时呈现给用户,因此视频进入加载画面时就需要实时不断监控该事件。
用于监听在视频流播放完毕后的事件处理。
onMetaData是一个回调方法,当客户端加载到视频流时,通过异步获取该媒体的元数据信息,如媒体总大小、总的播放时间、采样率等等。
3.4
播放进度及缓冲进度高亮显示
//播放进度和缓冲进度处理
EnterFrameHandler(e:
Event):
if
(totalTime>
0)
playTime=ns.time;
//ns.time为流媒体实时播放的时间
(ns.bytesLoaded>
bufferRect.width=ns.bytesLoaded/ns.bytesTotal*(playProcess.width-10);
//计算缓冲方框的宽度(滑块本身也有一定的宽度,减去约10个像素宽度)
}
playTime作为播放进度条当前实时播放的时间点,视频的总时间作为播放显示进度条的最大值。
mx:
HSlider
id="
playProcess"
minimum="
0"
value="
{playTime}"
maximum="
{totalTime}"
ns.bytesLoaded为已缓冲好的流媒体字节大小(单位为byte),ns.bytesTotal为流媒体的总大小,通过比例计算(如上)可以得出缓冲进度在播放进度条上的位置,缓冲进度条其实是一个长方形框,以层的形式位于播放进度条下放,初始宽度为0,当缓冲达到100%时,即缓冲完毕时,缓冲条的长度和播放进度条等长(除去滑块宽度)。
缓冲方框可以是一个BorderContainer,如下:
BorderContainer
x="
14"
y="
411"
width="
height="
4"
id="
bufferRect"
buttonMode="
true"
borderColor="
#70b2ee"
backgroundColor="
/s:
BorderContainer>
页面所有的控件和标签如下:
代码
3.5
视频的播放与暂停
视频的暂停与播放调用视频流的pause()方法和resume()方法,通过是否暂停的状态变量判断控制,代码片段如下:
//播放、暂停设置
play():
if(isPause)
ns.resume();
//设置按钮图标为点击暂停图标
//设置按钮图标为点击播放图标
3.6
拖动滑块播放视频
拖动滑块播放视频文件,主要是判断和记录流的剪辑位置,找到最终的剪辑位置后可以调用视频流的seek(参数)方法,参数为当前的剪辑位置,如果不拖动直接点击任意剪辑位置定点播放,那么最终的剪辑位置应该是鼠标弹起的位置,这里定点点击实际上还是相当于触发了滑块移动的事件,只不过是滑块快速移动到你点击的位置而已,相关代码片段如下:
//拖动进度条时改变播放位置
play_onchange(event:
SliderEvent):
if(ns.time==0)
playProcess.value=0;
return;
playPosition=playProcess.value;
//保正播放进度統一
ns.seek(playPosition);
//进度条鼠标按下
thumbPress():
//进度条鼠标弹起,指拖动时滑块时鼠标弹起
thumbRelease():
//ns.seek(playPosition);
3.7
播放结束处理
一般视频播放完毕后,播放的指针头归零,即播放进度条上的滑块指向起始位置,同时播放按钮状态为准备就绪状态,视频流处于暂停状态。
可以通过视频流的当前状态信息进行判断,如下面e.info.code状态值可以获得各种不同的状态,这里只取播放完毕停止后的状态值,代码片段如下:
//播放完毕处理
NetStreamStatusHandler(e:
if(e.info.code==
"
NetStream.Play.Stop"
)
ns.seek(0);
3.8
音量大小控制
视频声音控制通过SoundTransform
类操作,该类包含音量和平移的属性。
如果禁音后运行调节滑块的话,需要再定义一个临时变量tmpSound,以便开启声音时为最终设置的音量。
//静音、开音控制
closeSound():
if(isSound)
soundImg.source=sound;
tmpSound=ns.soundTransform;
soundTrans.volume=0;
//
这里禁音直接ns.soundTransform.volume=0
这样不行,需要用对象赋值
isSound=
}else
soundImg.source=sound1;
ns.soundTransform=tmpSound;
//通过滑块调整声音
sound_thumbChanges(event:
tmpSound.volume=soundProcess.value;
3.9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 视频 开发 doc