Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7789379
  • 博文数量: 701
  • 博客积分: 2150
  • 博客等级: 上尉
  • 技术积分: 13233
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-29 16:28
个人简介

天行健,君子以自强不息!

文章分类

全部博文(701)

文章存档

2019年(2)

2018年(12)

2017年(76)

2016年(120)

2015年(178)

2014年(129)

2013年(123)

2012年(61)

分类: IT业界

2014-12-05 16:25:51

一、javasctipt能实现的效果 actionscript也能实现吗

不完全能。
Javascript可以做到增删改页面上的元素,更改网页标题、更改网页元素、将页面保存为书签等动作,这些Actionscript做不到。
原因是应用范围不同,Javascript的运行环境是浏览器,因此可以对浏览器进行一些操作,
但Actionscript的运行环境是Flashplayer中的AVM虚拟机,无法对浏览器进行操作。
同样,Actionscript在AVM中强悍的图形处理能力和相对与JS异常丰富的多媒体功能也是Javascript望尘莫及的。

二、网上找的Flex/Flash开发工程师的JD

1.1 JD1
1、本科以上学历,计算机或相关专业毕业; 
2、一年以上Flash/Flex编程经验,1年以上Webgame前端 Flash AS3 开发经验; 
3、熟悉flash游戏开发流程,精通AS3开发,熟悉oop,能熟练使用AS3进行Flash/Flex程序设计; 
4、熟练应用面向对象思想构建程序,对应用中UI表现和逻辑控制的代码分离有比较高的认识; 
5、对flash的显示对象体系, 事件体系, 性能效率有一定认识; 
6、了解客户端及服务器端的通讯方式, 包括http、socket; 
7、具有良好的沟通能力和团队合作精神,有高度的责任心,能承担较强的工作压力。

1.2 JD2
1.精通Flash的开发流程和框架,精通ActionScript 3.0编程设计,具备良好的编程习惯,有一定的可维护性的编程思想;
2.精通FLASHCOM、XMLSOCKET等网络连接协议或程序,AS中视频流处理和各种网络接口处理有较丰富经验。了解各种后台数据交换机制;
3.具备良好的架构分析能力与设计能力,能够积极参与前期设计,具备优秀的编程能力,对常见动画效果算法有一定地了解;
4.熟悉互动效果实现,配合设计师图形、动画和动态程序做到完美结合;
5.对互联网web产品有灵敏的触觉和领悟力,对互联网用户交互体验有较为深入的理解;
6.有良好的学习能力,关注行业的最新发展和动向,有开发过flash游戏、sns互动组件经验者优先;
7.有Flash视频播放器开发经验者优先,了解Adobe技术产品体系者优先;
8.有大型互联网公司或视频网站任职经历为佳;
9.思路清晰,具备良好的沟通能力和理解能力,对技术有钻研和爱好。

总的技术要求点:
1. ActionScript 3.0编程设计
2. FLASHCOM、XMLSOCKET等网络连接协议
3. AS中视频流处理和各种网络接口

三、ActionScript 3.0编程设计

1. 学习ActionScript 3.0比较重要的6个好处

市场需求很大
我觉得,这是人们选择学习新语言最主要的原因,不管他/她现在正在从事,或者打算以后进行Flash开发。
目前许多主流的Flash都使用ActionScript3.0。现在学习ActionScript2.0已经没有太大市场了。
所以,如果你打算从事Flash相关工作,学习ActionScript3.0很重要。

运行速度更快
Flash设计师,以前如果有了新鲜,超棒的创意,可能会受Flash Player的性能局限,无法完全展现出来。
ActionScript3.0与以前版本的语言相比,性能提升了10倍。
某些情况下,提升的程度还会更大。这就可以让你在舞台上同时控制更多的物体。
如果你想获得最佳性能和外观,ActionScript3.0是最棒的方案。

API非常丰富
身为Flash开发者,我们最喜欢的事情,莫过于把新玩意儿整合到项目来。
ActionScript3.0包括成百上千个新API接口函数,来处理XML,正则表达式,以及二进制sockets等。
更爽的是,全部语言经过包和命名空间的重组,查找特性变得更加轻松。
使用ActionScript3.0的时候,你的Flash工具包不仅更满了,而且更有条理了。

显示列表十分健壮
ActionScript3.0一个最明显的改变就是Flash处理可视对象的方法。
在以前版本的语言中,管理Flash影片物体的显示次序(叠加深度)简直就跟使用魔法(black arts)一样麻烦。
大量的技巧和变通方法,让初学者犯晕。
比如,为了让一个物体显示在其他物体之上,常见的做法是把它放在一个特别高的深度。
在比较大的项目,这将导致许多问题,而且需要大量的编码,来操控物体深度。
ActionScript3.0新的显示列表提供了一个简单明了的机制,解决了影片可视对象的渲染问题。
你用过它之后,肯定会佩服自己:没有它,以前的项目竟然也能熬过来!

面向对象结构更好
开发人员特别喜欢ActionScript3.0改进的面向对象结构。
它包括了很多东西,比如运行时类型检测,封装类,包,命名空间,以及一个全新改版的事件模型。
使用ActionScript3.0编码和使用其他高级语言,比如Java和C#,是一个档次的。
ActionScript3.0让代码更加模块化,可读性更好,扩展性更强。
互动设计师可能不太使用这些特性---但如果某一天你想深入学习更高级语言时,好的语言框架可以让你更轻松。

学习ActionScript3.0更有乐趣
这个听上去比较主观,但是我相信这绝对是真的。不信可以问问任何用过ActionScript3.0的人,
然后让他返回去开发ActionScript2.0项目,他/她肯定会不会同意。
以前版本的语言有太多的bugs,技巧和变通方法,这些东西在ActionScript3.0里简直是小菜一碟。
的确,ActionScript3.0需要去适应,但是确实很值。

2. AS3简介

ActionScript 是针对 Adobe Flash Player 运行时环境的编程语言,
它在 Flash 内容和应用程序中实现了交互性、数据处理以及其它许多功能。   

ActionScript 是由 Flash Player 中的 ActionScript 虚拟机 (AVM) 来执行的。
ActionScript 代码通常被编译器编译成"字节码格式"(一种由计算机编写且能够为计算机所理解的编程语言),
如 Adobe Flash CS3 Professional 或 Adobe Flash Builder 的内置编译器或 Adobe Flex SDK 和 Flex Data Services 中提供的编译器。
字节码嵌入SWF 文件中,
SWF 文件由运行时环境 Flash Player 执行。   

ActionScript 3.0 提供了可靠的编程模型,具备面向对象编程的基本知识的开发人员对此模型会感到似曾相识。
ActionScript 3.0 中的一些主要功能包括:  
  一个新增的 ActionScript 虚拟机,称为 AVM2,它使用全新的字节码指令集,可使性能显著提高   
  一个更为先进的编译器代码库,它更为严格地遵循 ECMAScript (ECMA 262) 标准,并且相对于早期的编译器版本,可执行更深入的优化
  一个扩展并改进的应用程序编程接口 (API),拥有对对象的低级控制和真正意义上的面向对象的模型   
  一种基于即将发布的 ECMAScript (ECMA-262) 第 4 版草案语言规范的核心语言   
  一个基于 ECMAScript for XML (E4X) 规范(ECMA-357 第 2 版)的 XML API。
      E4X 是 ECMAScript 的一种语言扩展,它将 XML 添加为语言的本机数据类型。   
  一个基于文档对象模型 (DOM) 第 3 级事件规范的事件模型

ActionScript 3.0 的优点
ActionScript 3.0 的脚本编写功能超越了 ActionScript 的早期版本。
它旨在方便创建拥有大型数据集和面向对象的可重用代码库的高度复杂应用程序。
虽然 ActionScript 3.0 对于在 Adobe Flash Player 9 中运行的内容并不是必需的,而且要达到相同的目的,
ActionScript 3.0的代码长度要比2.0&1.0长,但它使用新型的虚拟机 AVM2 实现了性能的改善。
ActionScript 3.0 代码的执行速度可以比旧式 ActionScript 代码快 10 倍。   
旧版本的 ActionScript 虚拟机 AVM1 执行 ActionScript 1.0 和 ActionScript 2.0 代码。
为了向后兼容现有内容和旧内容,Flash Player 9 &10支持 AVM1。

ActionScript 3.0 中的新增功能
虽然 ActionScript 3.0 包含 ActionScript 编程人员所熟悉的许多类和功能,
但 ActionScript 3.0 在架构和概念上是区别于早期的 ActionScript 版本的。
ActionScript 3.0 中的改进部分包括新增的核心语言功能,以及能够更好地控制低级对象的改进 Flash Player API。

四、FLASHCOM和XMLSOCKET

1. flashcom

FlashCom是Flash Communication Server技术的统称,最新版本为flash media server 2,
可以说是FLASH的流媒体服务器,用于流式交互媒体应用的可扩展媒体服务器,
是macromedia开发的以Flash Player为客户端的网络视音频交互应用的服务器端软件,简称FCS或者Flashcom,
可以基于FCS和Flash Player开发诸如流媒体视影音频点播、直播, 视频聊天还有在线录制视频播客,FLASH联机游戏等等,
以及一些实时协作应用,比如交互白板等。更具体功能和技术讨论请访问

FlashCom中主要的内置对象有:
1 Camera (摄像机)对象:获取摄像机的影像和设定影像的品质。
2 Video(视讯)对象:显示从摄像机获取或者flashcom服务器播放的影像。
3 Microphone(麦克风)对象:取得麦克风的声音来源和相关设定。
4 SharedObject(共享对象)对象:记录用户的资料,或者把讯息实时传递给所有联机用户。
5 NetConnection(联机)对象:建立于FlashCom服务器的联机,并且采用rtmp(实时讯息通讯协议)交换资料。
6 NetStream(串流)对象:在所有联机用户之间,传送影音串流。

常用的组件有:
1 SimpleConnect 负责链接FlashCom服务器的应用程序
2 userColor 设定聊天文字的颜色
3 SetBandwidth 选择联机的带宽,并由此自动设定摄影机和麦克风的取样品质
4 ConnectionLight 显示联机的状态
5 Chat 文字聊天组件
6 VideoConference 视频会议组件
7 AVPresence 用来接收客户端的视频和声音的组件

一个Flashcom的开发笔记
http://www.blogjava.net/sl2cj/articles/50326.html
像“美女秀场”这样的直播就可以用这个做开发。
不过它不支持H.264和AAC的高效率编码,如果要做的话,就得自己写采集+编码器+流推送的插件实现。

2. XMLSocket简介

xmlsocket是被封装过的socket,主要用来处理XML数据的通讯。

XMLSocket 类实现了客户端套接字,这使得运行 Flash Player 的计算机可以与由 IP 地址或域名标识的服务器计算机进行通信。
对于要求滞后时间较短的客户端/服务器应用程序,如实时聊天系统,XMLSocket 类非常有用。 
传统的基于 HTTP 的聊天解决方案频繁轮询服务器,并使用 HTTP 请求来下载新的消息。 
与此相对照,XMLSocket 聊天解决方案保持与服务器的开放连接,这一连接允许服务器即时发送传入的消息,而无需客户端发出请求。 
若要使用 XMLSocket 类,服务器计算机必须运行可识别 XMLSocket 类使用的协议的守护程序。 实现XMLSocket需要遵守协议:

XML 消息通过全双工 TCP/IP 流套接字连接发送。
每个 XML 消息都是一个完整的 XML 文档,以一个零 (0) 字节结束。
通过 XMLSocket 连接发送和接收的 XML 消息的数量没有限制。
XMLSocket.connect() 方法只能连接到端口号大于等于 1024 的 TCP 端口。 
这种限制的一个后果是,向与 XMLSocket 对象通信的服务器守护程序分配的端口号也必须大于等于 1024。 
端口号小于 1024 的端口通常用于系统服务(如 FTP、Telnet 和 HTTP),
因此,出于安全方面的考虑,禁止 XMLSocket 对象使用这些端口。 
这种端口号方面的限制可以减少不恰当地访问和滥用这些资源的可能性。

使用XMLSocket的实现需要考虑Flash的安全问题:
如果执行调用的 SWF 文件在只能与本地文件系统内容交互的沙箱中,而目标资源来自网络沙箱,则不允许发送或接收数据。
如果执行调用的 SWF 文件来自网络沙箱而目标资源在本地,也不允许发送或接收数据。
进行调用的 SWF 文件和被访问的网络资源必须在同一个域里。 
例如,位于 www.cnblogs.com 的 SWF 文件只能向同样位于 www.cnblogs.com 的源发送(或从中接收)数据。
网站可通过跨域策略文件允许对资源进行跨域访问

五、AS中视频流处理和各种网络接口

1. as3发布视频流NetStream.publish()用法

可用性
Flash Player 6
Flash Communication Server MX

用法
public publish(name : String [, howToPublish : String] ) : Void

参数
name 一个字符串,用来识别这个流。如果你传递false,则发布操作会停止。这个流的订阅者在其调用
NetStream.play()时必须传递同样的名字。你不需要为流名包含一个文件扩展名。
howToPublish 一个可选的字符串,用来指定如何发布流。有效值是"record"、"append",以及"live"。默认值是"live"。
如果你为howToPublish传递"record",则Flash会发布和记录实况数据,把记录的数据保存到一个名为whatToPublish.flv
的新文件中。这个文件被保存在服务器上包含这个服务器应用程序的目录的子目录中。如果这个文件已经存在了,它将被覆盖。
如果你为howToPublish传递"append",则Flash会发布和记录实况数据,把记录的数据追加到一个名为name.flv的文件
中,这个文件被存储在服务器上包含这个服务器应用程序的目录中的子目录中。如果没有名为name.flv的文件被发现,
则这个文件会被创建。如果你省略了这个参数或是传递了"live",则Flash会发布实况数据但不记录它。
如果name.flv存在的话,它将被删除。返回无

描述方法。
把流音频、视频,以及来自客户机的文本消息发送到Flash Media Server,可选的在传输期间记录这个流。
这个方法只对指定的流的发布者可用。
当你想要让一个订阅者播放一个已经被发布或记录的流时,不是使用这个方法。
例如,假定你有一个名为"allAboutMe"的流,要使别人能够回放它,你只需为要使用的这个订阅者打开一个流:
var publish_ns:NetStream = new NetStream(my_nc);
var subscribe_ns:NetStream = new NetStream(my_nc);

当你记录一个流时,Flash创建一个FLV文件并把它存储在服务器上Flash Media Server applications目录的一个子目录中。
每一个流都被存储在一个目录中,这个目录的名字与传递给当你记录一个流时,
Flash创建一个FLVNetConnection.connect()的instanceName值一样。
Flash会自动地创建这些目录,你不需要为每个实例名创建一个目录。例如:
//连接到一个应用程序的一个特定的实例,
//这个应用程序被存储在你的应用程序目录的一个名为"lectureSeries"的目录中。
//一个名为"lecture.flv"的文件被存储在一个名为
//"...\yourAppsFolder\lectureSeries\streams\Monday"的子目录中。
var my_nc:NetConnection = new NetConnection();
var my_nc:NetConnection = new NetConnection();
my_nc.connect("rtmp://server.domain.com/lectureSeries/Monday");
var my_ns:NetStream = new NetStream(my_nc);
my_ns.publish("lecture", "record");
//连接到同一应用程序的一个不同的实例
//但发出一个同样的命令
//一个名为"lecture.flv"的文件被存储在一个名为
//"...\yourAppsFolder\lectureSeries\streams\Tuesday"的子目录中。
var my_nc:NetConnection = new NetConnection();
my_nc.connect("rtmp://server.domain.com/lectureSeries/Tuesday");
var my_ns:NetStream = new NetStream(my_nc);
my_ns.publish("lecture", "record");
如果你没有为instanceName传递一个值的话,则name.flv会被存储在一个名为
"...\yourAppsFolder\appName\streams
\_definst_"的子目录中。
这个方法可以用许多不同的信息对象调用NetStream.onStatus。例如,如果有人已经在指定名的流上进行了发布,
则NetStream.onStatus会被用一个"NetStream.Publish.BadName"的code属性调用。

例子
下面的范例展示了如何发布和记录一个视频,然后再回放它。
var my_nc:NetConnection = new NetConnection();
my_nc.connect("rtmp://myServer.myDomain.com/appName/appInstance");
var src_ns:NetStream = new NetStream(my_nc);
src_ns.publish("stephen", "record");
src_ns.attachVideo(Camera.get());
//要停止发布和记录
src_ns.publish(false);
//要播放记录的流
src_ns.play("stephen");
阅读(1916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~