OOPlayer Beta更新

OOPlayer Beta更新至1.0.2了,版本改动如下:

  • 增加高清FLV、MP4、M4A格式文件支持;
  • 使用新的硬件加速全屏模式;
  • 增加多语言切换;
  • 增加按钮提示(ToolTips)功能;
  • 增加自动播放功能设置;
  • 修改播放控制栏自动隐藏动画效果;
  • 修改OOPlayer.js,添加language参数
  • 去掉控制栏缩放功能,保持大小不变;

继续征集多语言版本中……需要翻译的东西如下:

中文(Chinese)、播放(playing)、暂停(Paused)、停止(Stopped)、缓冲(Buffering)、未找到(Not Found)、不支持(Invalid File)、停止(Stop)、播放(Play)、暂停(Pause)、静音(Mute On)、恢复音量(Mute Off)、全屏(FullScreen)、普通模式(Normal Mode)、关于OOPlayer(About OOPlayer)、音量(Volume)、时间(Time)、语言(Language)

AS3:新的全屏模式下保持其他MC清晰

在Flash Player 9.0.115.0以后的版本中,可以使用新的全屏模式,并启用硬件加速进行全屏渲染。在测试的过程中,发现当以视频原始大小为矩形进行全屏硬件加速时,播放控制栏会变得很模糊。后来分别使用了几个高清的FLV进行测试,使用1080P的FLV文件(1920×1080)时,播放控制栏会相对变小;使用720P的FLV文件(1280×720)时,播放控制栏大小不变,此时的屏幕宽度我我的显示器分辨率相同;使用480P的FLV文件时,播放控制栏会放大。依据此现象,发现可能要求加速矩形宽高与屏幕分辨率一致,于是把加速矩形改为屏幕分辨率,分别使用不同的FLV文件测试,果然好了。

代码如下:

var scalingRect:Rectangle = new Rectangle(0,0,Capabilities.screenResolutionX,Capabilities.screenResolutionY);

OOPlayer Beta,欢迎测试

把上次的OOPlayer Alpha稍微休整了一下,发个Beta版吧,适合在blog中使用,支持HTML插入方式和JavaScript代码插入方式,代码非常简单!具体方法请看这里:关于OOPlayer.

基本功能如下:

支持FLV播放、暂停、回放、静音及音量调整、全屏播放;
单击暂停或者播放;
双击全屏或者退出全屏;
支持右键菜单控制播放,包括全屏模式/普通模式切换、播放/暂停切换、静音/恢复音量切换、关于信息等;
可任意改变播放器大小,播放控制栏自动缩放;

欢迎提意见!…

FLV播放器——OOPlayer Alpha测试

用AS3写了一个FLV播放器,花了我一天半时间,功能几本上都全了,不过还有许多细节没有做,慢慢改,先拿一个试试~
梁静茹的《可惜不是你》,来自酷六网^_^

AS3:onLastSecond or onPlayStatus?

检测FLV是否播放完成,在Flash CS3的帮助文档中有onPlayStatus的说明,其返回的信息对象可能的值有两个,一个是 NetStream.Play.Switch,还一个是NetStream.Play.Complete。结果在client的事件中写上onPlayStatus,发现在编辑器中这个事件名称居然还是黑色,而不是和onMetaData一样的蓝色!如果此时加上trace(info.code),在FLV播放完成后还会报错,错误信息中冒出来一个onLastSecond。在帮助文档中查了一下这个事件,居然没有任何介绍。

既然onPlayStatus不管用,不妨试试onLastSecond,这个事件名称还是黑色,写上trace(info.code),结果FLV播放完成之后trace出来一个undefined,看来NetStream中还真有这个事件,但是为什么文档中没有任何介绍呢?

不管怎样,总算还能用onLastSecond检测FLV播放完成,不过这应该不是什么好方法………

AS3控制FLV的音量方法(不用组件)

在AS3中,NetStream类有这样一个属性:soundTransform,可以用来控制FLV的声音,其实现为:

实现
public function get soundTransform():SoundTransform
public function set soundTransform(value:SoundTransform):void

SoundTransform类又有个volume属性,于是想是不是直接这样写就行了:

var volumeSize:Number = 0.2;
ns.soundTransform.volume = volumeSize;

结果丫的没任何反应……莫非必须重新为ns指定一个soundTransform对象?于是改成这样:

var volumeSize:Number = 0.2;
var st:SoundTransform = new SoundTransform(volumeSize,0);
ns.soundTransform

搞定FLV的拖动下载(HTTP)

发现56Youtube的视频都可以拖动,正好项目初步完成,本周工作任务很轻,于是偷了将近两天时间来玩这个FLV的拖动。

首先观察了一下这两个网站拖动功能:感觉56的拖动有问题,每次拖到那里以后就给一帧画面,然后就一直处于下载数据的状态,也不知道是下载的什么数据。最后好不容易下载完了,刚播几个画面就结束了……更正:56的新播放器没有问题,拖动很正常。Youtube的拖动做得不错,每次拖到新的地方,也会发出一个请求,但是在播放的进度条上可以清晰地看到当前下载的数据段属于哪一段,播放正常。

从观察结果可以推断:每次拖动都向服务器请求数据,并给上标识,然后服务器按照需求来给数据。数据怎么给?NetStream有一个seek()方法,搜索时是搜索到距seek的点最近的关键帧开始播放,因此相应地,服务器给数据时也应该是这样。剩下的就是分析FLV文件格式和服务器程序方面的事情了,FLV文件格式的分析网上很多,随便搜一下就找得到了。…

基于P2P的FLV

工作完成了,看了一下土豆网,发现有土豆有一个FLV视频加速插件,应该是传说中的P2P加速了,会是怎么做的呢?不如看看再说。

于是下载了一个飞速Tudou,下载的时候顺便看了一下帮助说明,发现有个地方也重要——就是要给浏览器设置代理,装完飞速土豆后,IE浏览器已被设置自动代理脚本,如图所示:


再打开代理脚本看看:

function FindProxyForURL(url, host) {
if (shExpMatch(url, “*/flv/*.flv*”) || shExpMatch(url, “*crossdomain.xml*”) )
return “PROXY 127.0.0.1:9415”;
else return “DIRECT”;
}

应该是只针对土豆网本站的FLV文件做了代理,为什么要做代理呢?莫非会代理到本地?如果是这样的话再看flv的时候应该会把flv下载到本地,不出意外的话应该在飞速土豆的安装文件夹里。打开飞速土豆的安装文件夹,里面果然有个download文件夹,带开一看,里面果然有我刚才看过的flv文件!…