Flex (SDK 4.5) 中直接使用 H.264 编码视频

最近用到 Flex+FMS 实现一个视频通信,而且需要用 H.264 编码,但 Flash 本身只能采用 VP6(H.263)编码,要想编码为 H.264,必须要利用第三方工具(Flash Media Live Encoder),这也是我不愿意的,于是查阅了大量资料,发现除了使用 Flash Player 11,似乎别无他法,于是到 Adobe Labs 下载了 FP11 的 Preview 版本(官方称之为:Flash Player Incubator,除了增加了 H.264 编码外,还有很多开发者期待了很久的东西),然后,在相同的页面下载 playerglobal.swc(如果没有 Flex SDK 4.5,则还需要下载该 SDK)。

 

准备就绪后,开始搭建开发环境。

启动 Flash Builder,在首选项的“已安装的 Flex SDK”中加入 SDK 4.5,然后进入该SDK的目录(一般是在Flash Builder的安装目录下/sdks 当中),找到 SDK 4.5,进入/frameworks/libs/player,新建一个文件夹“11.0”,然后将下载的playerglobal.swc拷贝进去(如果下载好的这个组件不叫这个名字,则更改为此文件名)。

 

回到 Flash Builder,新建一个 Flex 项目,然后右键点击项目,选属性,在 Flex 编译器当中,将 Adobe Flash Player 选项的使用特定版本改为“11.0.0”,在编译参数中加入“-swf-version=13”,保存更改。

 

视频的发布还是使用 NetConnection 和 NetStream,NetStream 增加了几个属性,例如:videoStreamSettings,就是在这里设置编码方式,如果要用到H.264,则需要 H264VideoStreamSettings 这个类,具体用法如下:

 

 

var h264Settings:H264VideoStreamSettings=new H264VideoStreamSettings(); h264Settings.setProfileLevel(H264Profile.MAIN, H264Level.LEVEL_5_1); h264Settings.setMode(1280, 720, 24); h264Settings.setQuality(0, 80); var publishStream:NetStream=new NetStream(connection); publishStream.videoStreamSettings=h264Settings; publishStream.publish("mp4:myvideo.mp4","record"); 

 

其他的使用方式和以前的一样。

 

经过实际测试,确实是真正的 H.264 编码(摄像头不行,看不出来画质提升),但是 FMS 所 record 下的文件,采用 f4v post proccessor 处理(Adobe 的 H.264 编码视频必须用此工具处理后,才能在常见播放器,包括 Adobe Media Player 中播放,即便是使用 Flash Media Live Encoder 录制的视频也是如此)以后,可以直接利用 Windows Media Player 等常见播放器播放(FP11 以前的版本,如果在发布时,加入 mp4 前缀,它还是采用的 VP6,记录下的文件无论如何处理,也是无法播放的)。

 

但是有个很关键的一点,目前的 FP11 非常的不稳定,我很多正常的 Flash 程序使用起来出现了问题,例如,无法全屏(IE 报错),有些地方点击右键也要导致 IE 报错(APPCRASH)。

 

小小的期待下 FP11 的 Final Release(Adobe 也真够慢的,本来早应该支持 H.264 标准了,也早应该利用 GPU 加速了,怪不得被别人说耗电耗功率呢,如果不是考虑到 Flash 的普及率,也许我也就转向 SilverLight 了,想在 HTML5 也蓄势待发了,希望 Flash 再给力一点吧!)。

 

你可能感兴趣的:(Flex,(AS3.0))