是时候来好好总结一下2010和展望2011了,看了一下自己去年的总结,总得来说2010年的收获还是不少的。记录下来,对自己今后肯定颇有用处。
参与一个创业团队半年,随后跳到一家中等规模的软件公司半年。在两种完全不一样的团队氛围中各工作了半年,感受则是完全不一样的。
Section 1:
在之前的队伍中,作为核心开发人员,基本上需求,规划,实现,测试,上线都是一人负责,有了新的想法,想用新的技术和框架,只需和身边的人稍稍商量一下,大家感觉不错就可以马上开始动手,在效率方面自然是十分快速的。比如对视频解码的实现,引入tiles, spring mvc都在几天之内完成。但是问题在于,由于所有的东西都是崭新的,需要自己去摸索,于是很多时间都花费在了Hello World的Tutorial上。加上团队中采用的技术一直被要求使用最新最潮的,导致参考资料可搜索数量极其有限。十分记得当初最开始在Google App Engine上操作的过程,怎一个痛苦了得。不过这样的学习的强度和密度的确给人了很多的锻炼。比如在后期一个人只花了3周不到的工作时间,完成了web层的所有实现,而这对于一个对javascript, css很不熟悉,看到firebug就头痛的人是多么不容易。好在这一切都挺下来,感觉十分幸运也很满意。
同时,由于所参与的方向是在云计算方面,于是对于各大云存储平台都有了或多或少的接触,Amazon S3, Amazon CloudFront, Azure, Rackspace, Nirvanix, Google Storage等等,每一个不同的云存储平台都需要本地实现来封装调用的API,在这个过程中对各个不同的平台也有了较为深刻的理解。因为我们坚持走RESTful的调用模式,于是很多跨语言跨平台的问题都得到解决。同时,在合作伙伴方面,和许多其他的创业团队也有不少交流,可以免费使用或者试用他们的服务,这对于我们的产品也是一个极大的帮助。
第三个点就是对于html5的应用,大概自己有一个月的时间一直在鼓捣各种和html5的相关应用,特别是内嵌的<video>的支持以及各种格式的解码器之间的兼容性。这对于我对视频音频方面的理解有了巨大的帮助。同时对于html5这个buzzword也不再是门外户。总的来说,我感觉html5并不是一个多么玄乎的东西,我们最开始的愿望是将所有的播放器默认使用html5,可是由于各种浏览器的兼容性和转码器之间的关系,加上自带的html5播放器的简陋,最终还是选择了使用成熟的flash技术,同时兼容html5来方便其在移动设备上如iphone和ipad上播放。目前来看效果还是很不错的,在facebook和twitter上也进行了测试。
的确对于技术方面的提升,这半年,加上2009年的一年是起着无比重要的作用的。但是不得不说,在小团队中最缺乏的就是项目管理的规范性,而这对于软件开发,特别是大规模团体开发是至关重要的。虽然从一开始就使用了subversion,但是功能仅限于最基本的commit和check out,基本上就是一个存储空间了,而bug tracker的软件直到我退出团队之后的建议下才开始使用,在其他的协同工作方面就基本没有了。这些在我后来的找工作面试过程中,发现是面试官们都很看重的一方面。第二个问题是在代码的管理规范性方面做的还不够,这一点是我自己也需要继续加强的,很多都是一些很琐碎的点,比如if else的括号,比如javadoc的使用,比如svn中提交代码的comment等等等等。在一个小团队里,很少有机会会有人给你做code review,除非有人需要使用到或者修改你的代码,不然你的代码可能会一直在那里恶心下去。但是在大团队中,这个问题将会称为致命的问题而严重影响整个团队的效率。
Section 2:
下半年,我加入了一家local软件公司,我们所在的项目组主要的对口项目方向是汽车保险业,于是我的脑袋里便装下了各种各样的和汽车相关的专有名词。在这半年的时间里,我最大的收获就是真正跨入了Enterprise开发的大门,相比以前的任何项目,这里的是真正的大型项目,是需要供很多人同时使用的,于是有着严格的项目管理机制。
对于Spring, Struts, EJB有了更为深刻的理解,每天都在和这些技术打交道,即使以前并不是特别的熟悉的东西,现在反复使用也逐渐悟出一些门道。而因为在这里,每个程序员需要负责从界面到后台的所有操作,于是和界面如jQuery, Tiles, Velocity,后台的Oracle, Sql等等都都需要掌握使用。这对于我也是一个很大的挑战。
其次,对于项目管理方面的学习则是有了更多切身的体会。严格采用SCRUM的AGILE开发机制,使用Subversion, JIRA, Hudson, Maven等各种流行的工具,至少使得自己在简历上好看了许多,也有了更多的吹牛的资本。
对于在新公司的理解,上一篇博客里面谈了很多,这里就不重复了。总之这半年将我从一个独立作战的程序员入门称为了一个真正的团队开发人员。
Section 3:
对2011的希望,我写下以下一些想法,希望明年年底的时候能够一一对应:
1。 继续加强的Java EE及和工作相关方面的学习和理解,包括
1。1 Spring 3.0.X, Hibernate 3.5的继续深入理解,如果有可能的话,最好能各挑选一段源代码来学习
1。2 对于Oracle数据库的操作,包括更多高级SQL和PL/SQL的操作
1。3 设计模式理论的学习,并且能够将其使用到具体的code中去
1。4 有时间的话,接触以下Seam框架和JBoss的学习
2。 继续目前在进行的iPhone程序的开发,希望能够有几个程序能够在App Store上卖到钱。
最近购买了一些新的域名,可能会慢慢的使用,目前只是随便搭了一个框框。算是在这里增加一下PageRank的值吧。
www.yudongli.com
www.yudongli.info
都是在GoDaddy上买的,基本上经常会有不同的优惠抛出。比如现在竟然只卖1 dollar。
原本考虑继续使用WordPress,但是又不想添置新的服务器,于是决定尝试着做一个Static的网站,就基于Google App Engine,无论是使用Java还是使用Python也好,反正免费,玩玩也罢。主要还是做做技术交流使用。
很久没有在博客上写东西了。其实新工作是一个很舒服的工作,上下班时间自己定,一天干够八个小时就好,不用打卡,也没人盯着你,感觉自由无比。特别是因为刚开始,所以任务不算多,也不难。此外,公司还添置了一个乒乓球室,于是更是让我们这些从小打乒乓球打大的人如鱼得水。不过更多的晚上和周末的时间,我都贡献给了MetaCDN的项目,于是乎其实工作时间大大超乎了前半年时间,某种程度上比我在高考之前还要累。
无论是之前和James做,还是现在在新公司,最大的感受就是轻松随便。每天带上耳机,就可以自己静下心来做自己想做的事,项目都有清晰的时间规划,人员的配置。规范的运行使人能够很容易找到自己的位置,并且慢慢开始发挥自己的能力。
有几点感触比较深的,首先就是每个人都是全能的。没有人是只会做css/js,也没有人是只会做ejb的,从最前端到最后端,从网络到硬件,从Win到Linux到Mac,几乎人人都是全才。对于我们这些国内“科班”毕业的人来说,这些往往是很致命的。在国内的 教育,我们很少接触很全面的东西,往往课程设计也是局限于很小的方向,特别是对于Linux的普及更是一般。大多数人都是自己在平时的应用中,慢慢的自己一边看,一边总结。这样的差距很容易在现实的工作中表现出来,对于各种命令的不熟悉,对于各种操作的不熟悉等等。
其次,语言限制了个人很多的发展。其实,相比较而言,澳人算是很好交流的了,性格大都简单直率,什么都能说。但是自己个人的语言能力,却无法将自己很多想表达的东西表达出来,于是距离感慢慢产生。当然这是个对于个人的考验,如果你是一个很容易交流的人,你可以用其他的办法来弥补语言上的不足,但是如果你自己比较害羞内向的话,结果恐怕会越来越糟。三年在澳洲的磨练,能够让我目前在听力上基本上没有更多障碍了,但是对于表达能力,还必须继续加强。
虽然一直在墨大工作,但是找工作的压力也是一直伴随着。真正的找工生涯,可以说从一月份回国之前就开始了。在六个月的时间里,投的简历次数并不多,印象比较深刻的可能也就五次左右,平均每次投一到两个企业。然后其中有三次获得了进一步交流的机会,而最终拿到了今天的OFFER。
第一次是早在今年年初回国之前,看到一家企业在招Graduate Programmer,要求并不是特别详细,属于那种很含糊型的招人,于是简历投上去,第二周有个电话就打过来了。一个女的,进行的第一轮电话面试,基本上都是素质方面的问题,诸如自己的优点缺点啊,最想干的事情啊,觉得最成功的事情啊。这也是我第一次用英语在电话上和人如此正式的交流,但发现自己说的还不错,自我感觉也还良好。本来是希望自己有能够继续面试的机会的,可惜的是后来因为我要回国,耽误了面试的时间,于是不了了之。
从二月到四月之间,并没有特别的投过简历。那段时间工作比较忙,还加上PR申请的事情,于是这个慢慢缓了下来。三月中应该投过一两家,不过也是杳无音信。直到四月份的一个星期三晚上,那天可是想好了要投简历的,于是一晚上投了大概3家,还是4家。其中最感兴趣的一家,在第二周就给我打了电话,要求面试。这家公司的优势在于位置好,在Box Hill,离我住的Doncaster简直就是隔壁。不好的地方在于,他们招的人,希望做更多的客户端产品,也就是说要有很多基于Swing的开发,而我个人更倾向于J2EE的方向,不过在当时钱大于一切的心理下,还是去了Box Hill的办公室。面试的是个伊朗人,很概念性的问了我很多问题,关于Swing,Hibernate, GWT, JavaScript等等,他还特别强调最好要有网路方面的经验,问我如何路由,如何防火墙,瞬间我就晕倒了。最后他还问我,会不会C#。对于这个几乎五年没碰过.NET的人来说,想糊弄人也没办法。之后这位伊朗老兄把他的上司请来又和我聊了聊,一个长的流里流气的LOCAL,问我如果遇到不会做,搜索又找不到的东西怎么办。总之,随着面试的继续,我对这份工作的兴趣也愈发下降。当然对方,也更加不满意我了,结果显然就是以失败告终。
接下来的五月,我给自己心里做了一个小小的安排,暂时放一下找工作,花一个月的时间,把Hibernate, Struts 2,Spring 3以及jQuery的书各借了一本,在一个月之内啃完。和大多数人一样,这个目标显然是不切实际的,但是不得不说对后面是很有帮助的。虽然以前都写过,但是很久不碰的东西,非要过一下脑子,才能从新活跃起来。就这样到了六月。六月初的时候,应该又是大规模的撒了一次网,有几个广告真的是很吸引人,还有一个甚至完全就是照着我的模子写的广告,云计算、RESTful Web Service,Amazon,我觉得在目前看来,这几项每一个我都可以称之极为熟悉了。本来觉得这份工作至少可以多混几轮面试的,哪知道石沉大海,辛酸啊。
6月28日的时候,下午偷了个懒,跟老板说明天我想休息一下,其实是自己想做做 iPad的开发,刚买的iPad,怎么也想摆弄摆弄。于是第二天一大早,就跑了ICT一楼的实验室,开始做ObjectiveC。中间的时候,觉得有点累,就上SEEK转了转,发现一个头一天下午的招聘,要J2EE Developer,没多想,随便改了一封用了好多次的简历和Cover Letter,就投了过去,继续开始做我的iPad。刚投了没五分钟,一个电话打来,一下惊醒,这也太神速了吧。是个印度人,不过声音还是很清晰的,说当天下午就要和我面试。我看了看自己,心想,到底是继续做我的iPad还是准备面试呢,结果就这样晃到了12点。左顾右盼的找了点Struts和Spring的面试题准备准备就去了。这家公司至少是十分规范的,每一个面试的环节都有详细的Email通知,第一轮技术面试就派了三个人轮番轰炸我。一个印度人,一个南亚另外地方的人,一个华人。华人算是对我很客气的了,不过很可惜的是自己由于没怎么准备,几个弱智题被我更加弱智化了,大家一起来嘲笑我吧,比如overloading和overwriting的区别,比如list, set, map的区别,比如如何在struts中实现validation,比如什么是left join和right join等等。现在想起自己的答案简直就要哭,不过还好,还是用英语模糊过去了。感觉是自己在英语的周游能力还是不错的,无论什么问题,都可以尽情的发挥,不停的说,多亏了当年雅思的准备。
就这样,过了第一轮面试,本来说是a couple of days给我通知的,但是知道第二个星期三都没消息。壮了壮胆子,发了封邮件过去问,后来马上就收到电话,说要我参加心理测试,时间是第二天的早上。所谓的心理测试,就是大家都知道的那些选择题,对于这种东西,本人是最为驾轻就熟的。不过要是仅仅只有这就好了,关键是它还有一个语文考试,也就是GRE里面的Verbal。考过GRE的同学都知道Verbal对词汇量的要求是如何的,而这里的语文考试不仅仅在词汇量的大小上和GRE类似,在词汇的选择上则是更加生活化口语化,总之就是都是我不认得的词。考下来,心理就在嘀咕,不会败在了语文上吧。
出乎意料的是,第二周的周三,又听到了熟悉的印度人声音,说要对我进行第二轮面试。心理一下激动了,这几乎就是HR面了啊。果然第二天,和我面试的人是CIO也就是直管我们的老板,LOCAL,说话声音不是那么的清楚,使我保存了一开始就说sorry的习惯。问题全部是现实工作的处理问题,毫无技术可言,于是我就用蹩脚的英语和他周旋,没想到他竟然还很满意。印度人还带我把公司转了一圈,心中的那个魔鬼告诉我,他们要你了。周五下午五点多,收到了最后的OFFER电话,这样一段找工的历程就画上了句号。新的单位是做J2EE的,包含了J2EE的几乎所有方向的开发,在这一点上是很适合我的。虽然有点远,在South Yarra,但我个人感觉还是十分满意的。
以下是总结一些在找工中得到的经验:
1. SEEK上的广告虽然多,但是有很多都是中介发的,几乎无论怎么申请,这些都是石沉大海。所以要辨析清楚到底是中介还是雇主直接发的,往往后者会有更好更直接的效果。
2. 要找有针对性的工作,不要撒网,那样一点作用都没有。看到自己适合的,就一定要积极去投,看到不沾边或者沾一点点的,就别浪费时间了。毕竟每一封简历和Cover Letter都是要时间写的。
3. 面试的时候不需要紧张,但是一定要多说,会也要说,不会也要说。别人知道你不是native speaker,不会太介意你的英语表达能力,但你不说,别人就完全无法了解你是否知道。你如果多说的话,别人或许还认为你知道,只是说不清楚而已。
4. 多用实例,少讲概念。本来概念就是很难讲清楚的,面试时一紧张,更容易说错。不如举个例子,画点小图,清晰明了。
5. 一定要准备,要有针对性的准备,特别是不能在基础上反弱智错误,不然自己后悔都来不及。
IPAD到手已经好几天了,今天才有时间好好摸一摸,没干别的什么事,也不想花钱到APPLE STORE买东西,于是GOOGLE了一把,下了不少的免费软件。在这里记录一下,以后有更多的再慢慢汇报。总之,IPAD就是一个大玩具,上网看书巨爽,其他功能有待发掘。
软件:
iBooks, Stanza, TweetDeck, Twitterrific, AirVideoFree, AccuWeather, Big Calc Free, Dropbox, Colors Pro, WSJ, iPDF, iWallpapers, uploadingit, Photo Frame, MobileNoter, FeeddlerRSS,
游戏:
Gravity HD, New York, RushHrFree, Busy Harbor, Shanghai Lite, Air Hockey, 10 Pin Lite, Newton’s, Hit Tennis 2, PokerFreeHD, Manic Marble, KarateKid, Sudoku Tablet, Checkers, ChessBorda, Clickomania, JirboSays, JirboBreak, iMahjong, Snowboarding, BumperBoats, Pukk HD, GodFinger, Tic Tac Toe, TeragatiFree, BMS Lite, Bubble Snap, Tap Fish, Farm Story, We Rule, TunesAttack, PaperFootball, Doons, Cogs HD Lite, Chicktionary, Radiation, Harbor Master, Aurora Feint 3, CastleCraft, Legends, Labyrinth Lite
有这样一支部队,他们不被国民党要,不被共产党要,流落在金山角地区,缅甸泰国政府亦不要。当年残存的93军,如今成为了孤军,孤独地生活在异国他乡。
音频编码器
除非你坚持观看1927年之前的电影,不然你一定会希望在你的视频中含有音频。和视频编码器一样,音频解码器也是一种算法来对音频流进行编码。同样和视频编码器一样,音频编码器也分为有损和无损两种类型。同样的原因,无损的音频是在是太大而很难再网络上使用,我们会更加关注有损音频。
事实上,我们关注的将要比这更窄,因为有损音频编码器有几种种类。音频在很多不需要视频的地方也在使用(电话,比如),于是存在着一整套关于如何对演讲进行编码优化的音频解码器。你不会使用这些编码器到音乐CD,不然结果就像是听到一个四岁的小孩在从话筒里唱歌一样。但是你会在Asterisk PBX中使用它,因为在这种情况下带宽是极其珍贵的,而这些编码器能够将人的演讲压缩的一般编码器的几分之一。不过,因为缺少浏览器和第三方的支持,演讲优化的音频编码器从来没有在网络上得到普及。所以我们将更加关注普通目的的有损编码器。
如果我再前面所提到的,当播放一段视频的时候,电脑同时在做几件事情:
1. 解释容器的格式
2. 解码视频流
3. 解码音频流并且传递到播放器中
音频编码器解决了上述的第三个问题 - 将音频流进行解码变成数据格式从而使得播放器可以播出。就像视频解码器一样,也有很多的技巧能够减小音频流中的数据存储量。也因为我们在讨论有损音频编码器,信息在录制-编码-解码-收听的循环中在不断丢失。不同的音频编码器会丢掉不同的东西,但是他们的共同目的是一样的,就是使得你的耳朵无法辨析出有东西在丢失。
有一个概念在视频中没有的是频道。我们把声音传送到喇叭中,那你有多少个喇叭呢?如果你坐在电脑前,极大的可能你只有两个,一个在左边,一个在右边。我的桌子上有三个,左边,右边,还有一个在地板上。被称作为环绕声系统的可以有六个或者更多的喇叭,被安排好而防止在房间里。每一个喇叭专门的播放一个频道,当你坐在六个喇叭中间的时候,你会被六个不同的喇叭轨道所环绕,你的大脑进行综合和感觉你就好像身临其境。有用么?至少这个几十亿美元的产业认为是。
大多数的普通音频解码器可以处理两个频道的声音。在录制的过程中,声音被分开到左音道和右音道中;在编码过程中,两个音道都被存放到同一个音频流中;然后在解码时,两个音道分别被送到合适的喇叭。有一些音频解码器可以处理多余两个的轨道,同时将他们传送到准确的喇叭中。
音频解码器有很多很多种,但是在网络中,真正只有三种是需要了解的:Mp3, AAC和Vorbis。
MPEG-1 Audio Layer 3
MPEG-1 Audio Layer 3 通常被称为MP3, 它被编码为不同的率,64kbps, 128kbps, 192kbps,还有的分布在32到320之间。更高的编码率代表着更大的文件和更好的音频效果,不过编码率和音频质量并不是线性关系:128kbps的声音比64kbps的要好绝不止两倍,但是256kbps没有128kbps的两倍好。此外,MP3允许多率编码,也就是说可以在音频的一部分使用一种编码率,而在另一部分使用另外一种编码率。比如,当两段对话之间的空白时,便可以使用很低的编码率,而在多种声音开始时使用更高的编码率。
MP3规范并没有完全意义上定义如何进行MP3的编码(不过定义了如何解码),不同的编码器使用不同的听觉心理学模型得到了很多不同的结果,但是他们都可以被同一个播放器所解码。开源的LAME项目是一个最好的免费编码器。
MP3格式在1991年标准化,同时也是受专利所保护的,这也解释了为什么Linux不同直接播放MP3的原因。绝大多数的移动音乐播放器都支持单独的MP3文件,同时MP3音频流也可以被内嵌在任意的视频容器中。Adobe Flash既可以播放单独的MP3文件,也可以将MP3内嵌到MP4视频容器之中。
ADVANCED AUDIO CODING
AAC于1997年标准化,它在被Apple选中成为其iTunes商店的默认格式后得到了极大的发展。最初,所有的从iTunes商店购买的AAC文件都是被Apple的DRM所加密的,被称之为FairPlay。现在iTunes商店的很多歌曲已经没有了这层保护,被Apple称为iTunes Plus。AAC格式是受专利保护的。
AAC是被设计用来提供一个在同样解码率下比MP3音质更好的格式,并且能够在任意的编码率下编码音频。(MP3只能限制在几种编码率下,并且上限是320kbps)。AAC可以最多编码48个频道的声音,尽管在实践中不会有人真的这样去做。AAC格式另一个和MP3不同的地方在它也定义了多Profiles,类似于H。264。低复杂度的profile被设计用来在实时的系统中低CPU功耗的播放,而高Profile则被用来提供更好的音质通过更慢的编码和解码来换取。
所有当前的Apple产品,包括iPods, AppleTV, 和QuickTime支持一定profiles的AAC格式在单独的音频文件或者被内嵌在MP4视频容器中。Adobe Flash支持MP4中的各种Profiles的AAC,开源的播放器mplayer和VLC播放器也是。对于编码而言,FAAC库是一个开源的选择。
VORBIS
Vorbis也经常被叫做”Ogg Vorbis”, 尽管从技术角度来说是不正确的。(”Ogg”只是一个容器格式,而Vorbis音频流还可以被内嵌在其他的容器之中)。Vorbis不被任何专利所限制,因此它被绝大多数的Linux系统和移动设备直接支持。Mozilla Firefox 3.5 支持Vorbis音频文件在Ogg容器中,或者Ogg视频中包含着Vorbis音频轨道。Android移动手机可以播放单独的Vorbis音频文件。Vorbis音频流通常被内嵌在Ogg或者WebM容器中,但是他也可以被内嵌在MP4或者MKV中。Vorbis支持任意数目的音频轨道。
自从上个月Google IO以来,对于HTML5的讨论是越来越多,而其中十分重要的一个部分就是视频Video。作为内嵌进入HTML的新的标记,Video将在HTML5中发挥其核心的作用,将互联网的表达能力继续提升。
不过在实际中,有很多人对于视频的了解还很浅显,对于WebM等这些新的名词到底代表的什么意思,以及和以前的MP4,AVI等有什么关系是完全的一头雾水。在这里找到了一篇很好的文章,直接翻译过来,希望对大家都有所帮助。至少我在读完这篇文章之后,对于Video的确是有了更为清晰的认识。
文章的网址在http://diveintohtml5.org/video.html,是一本新书的其中一个章节。
每一个在过去四年中访问过YouTube的人都应该知道你可以将视频内嵌在网页中。但是在HTML5之前,是没有一个标准的方式来完成这件事情的。实际上,所有你在网络上所观看的视频,都是通过的第三方插件 - 或许是QuickTime,或许是RealPlayer,或许是Flash(YouTube使用的是Flash)。这些插件能够很好的和你的浏览器结合,以至于很有可能你都意识不到你在使用它们,直到你试图观看一个视频但是你的平台不支持这个插件的时候。
HTML5定义了一个标准,使用<video>符号来在网页中内嵌视屏。目前对<video>的支持还在慢慢发展,当然这只是对其还无法使用的一个礼貌的说辞。至少,它现在还不能在所有的地方使用。但是不要灰心,还是有很多的替代,退路和选择存在。
<VIDEO> 的支持
IE9 IE8 IE7 FX3.5 FX3.0 SAF4 SAF3 CHROME OPERA
yes yes yes yes yes yes
不过支持<video>仅仅只是这个故事中的很小一部分。在我们开始讨论HTML5视频之前,你必须对视频本身有一定的了解。
视频容器
你可以把视频文件看做是AVI文件或者是MP4文件。在现实之中,AVI和MP4仅仅只是视频容器的格式。就像一个ZIP压缩文件可以存储任意的文件在其中一样,视频容器格式只是定义了如何在容器中存储东西,而不是什么类型的数据可以进行存储。(当然这个可能稍微要复杂一些,因为不是所有的视频流都和所有的视频容器格式所匹配的,不过暂时不要担心这些)
一个视频文件通常会包括几个轨道 - 一个视频轨道(没有音频),加上一个或者多个的音频轨道(没有视频)。 轨道通常是互相关联在一起的。一个音频轨道之中存储着标记来帮助和视频同步。单一的轨道可以包含元数据,比如视频的标题,视频的封面,集数(对于电视剧而言),还有很多很多。
视频的容器格式有很多很多,其中最为重要的一些包括:
- MPEG4,通常是.mp4或者.m4v的扩展名。MPEG4容器时基于苹果公司老的QuickTime(.mov)容器的。在苹果公司网站上的电影片头,仍然使用的是QuickTime容器格式,但是从iTunes上下载的电影已经是MPEG4容器模式了。
- Flash,通常以.flv结尾。Flash视频是,不意外的,被Adobe Flash所使用的。在Flash9.0.60.184之前(也就是Flash Player 9 Update 3),这是Flash唯一所支持的格式。现在的新版本Flash同时也支持MPEG4容器。
- Ogg,通常是以.ogv作为其扩展名。Ogg是一个开放标准,开源并且没有任何专业牵连的标准。FireFox3.5, Chrome 4, 还有Opera 10.5都直接支持Ogg容器,Ogg视频(被称作Theora)和Ogg音频(被称作Vorbis),而不需要任何插件。在PC中,Ogg能够被所有的主流Linux直接使用,同时你可以在Mac和Windows上通过安装QuickTime Components或者DirectShow filters来使用。它同时可以通过VLC在各个平台上播放。
- WebM是一个新的容器格式,从技术的角度来说,它和Matroska非常相似。WebM在Google I/O 2010中被发布,它是通过VP8视频编码器和Vorbis音频编码器来实现的(等会会有更多提到)。WebM将会被下个版本的Chromium, Google Chrome, Mozilla Firefox, 和Opera内置直接支持而不需要任何插件。Adobe也声称将在下个版本的Flash中支持WebM视频。
- Audio Video Interleave, 通常以.avi结尾。AVI容器格式是微软在早期的时候当播放视频还被认为是十分惊喜的时候发明的。它并没有官方支持很多最新的容器格式,它也不官方支持各种元数据,它甚至不支持很多现在的视频和音频编码器。很长一段时间以来,各个公司通过各种方法来扩展AVI使其能够和各种格式相匹配,目前它仍然是很多著名的编码器的默认格式比如MEncoder.
视频编码器
当你谈到观看视频的时候,你通常所说的应该是一个视频流和音频流的组合。但是你并没有两种不同的文件,你只有一个视频文件。可能是AVI,也可能是MP4。这些仅仅只是容器的格式,就像ZIP压缩文件可以存放各种文件一样。视频容器格式定义了如何在单一文件中储存视频和音频流。
当你观看视频的时候,你的视频播放器在同时做以下几件事:
1. 通过对视频容器格式的解析,来判断哪种视频和音频轨道,和他们是如何存储在这个容器之中的,从而可以将这些数据找出并进行解码。
2. 对视频流进行解码并将一帧一帧的图像播放在屏幕上。
3. 对音频流进行解码并将声音送到喇叭中。
一个视频编码器指的是一个视频流进行编码的算法,它规定了如何完成上述的第二步。(词语Codec是一个合成词,他是编码coder和解码decoder的合成)。你的视频播放器通过视频编码器将视频流进行解码,然后播放一些列的图像或者帧在屏幕上。当今大多数的视频编码器使用了各种技巧来减少大量的播放帧之间的信息。比如,仅仅只存储两帧图像之间的差异,而不是完完全全存储两帧单独的图片。大多数的视频在两帧之间的变化都很小,这样就能够使用高压缩来产生更小的文件大小。
有损耗和无损耗两种类型的编码器。无损耗的视频太大而不适于在网络上使用,所以我们将更多的目光放在损耗的编码器上。一个有损的编码器说明信息在编码的时候会不可挽回的丢失。比如从一个磁带中拷贝时,你将会丢失原有的信息降低音频的质量,并且在每一次的编码中都会发生。除了音频中的zizi的声音之外,多次的视频编码会使得图像看上去更块状,特别是在有很多运动的场景之中。(事实上,这也可能发生在直接从原视频中进行编码,当你使用一个很差的编码器,或者传错了参数的时候发生)。从另一面来说,有损的视频解码器仍够提供很好的压缩器,同时很多提供了一些技巧使得块状的视屏仍够不那么容易被人的眼睛所发觉。
视频编码器的种类有很多很多,三个最为著名的分别是H.264, Theora和VP8.
H.264
H.264也通常被视为MPEG-4 part 10或者MPEG-4 AVC或者MPEG-4 Advanced Video Coding. H.264是被MPEG公司研发,在2003年标准化的。它的目标是提供向低带宽,低CPU设备(手机)或者高带宽,高CPU设备(现代PC)以及所有两者之间的所有设备的一个单一的编码器。为了完成这个目的,H.264标准被划分问profiles,用来定义一些列的可选的属性来再文件大小和复杂程度之间进行选择。高Profiles使用了更多的附加属性,提供了更好的视频效果,花费更多的时间进行编码,并且需要更多的CPU进行实时解码。
为了给大家一个粗略的profiles范围的概念,Apple公司的iPhone使用Baseline profile,AppltTV使用Baseline和Main profile,PC中的Adobe Flash使用Baseline, Main和High profile. YouTube使用H.264来编码高分辨率的视频,通过Adobe Flash来播放。YouTube同时也提供H.264编码的视频给移动设备包括苹果的iPhone和Google的Android。同时H.264也是蓝光Blue-Ray格式所指定的编码格式,蓝光一般使用High profile.
大多数的非PC设备在播放H.264视频的时候(包括iPhone和蓝光),实际上使用的是一个专门的芯片来进行解码,因为它们的CPU还没有强大到能够在实时对视频进行解码。大多数的PC的显卡也支持硬件H.264解码。还有很多H.264解码器的竞争者,包括开源的x264 library。H.264标准是受专利保护的,通过MPEG LA建团所代理。H.264视频可以集成在绝大多数的视频容器格式之中,包括MP4和MKV.
THEORA
THEORA是从VP3解码器发展而来,而如今被Xiph.org Foundation所支持。Theora不像其他的VP3专利,是完全免费没有任何专利保护的编码方式。尽管这个标准从2004年以来就没有变化,Theora项目仅仅只在2008年11月和2009年9月发布了1.0和1.1版本。
Theora视频可以被集成到任意的视频容器格式之中,尽管大多数时候是在Ogg容器中。所有的主流Linux都内置支持Theora,并且Mozilla Firefox 3.5也内置支持。内置支持,我指的是不需要任何插件就可以进行播放。同时Theora视频也可以在Windows和Mac OS X中通过安装Xiph.org的开源解码器软件来进行播放。
VP8
VP8是另外一个On2公司的视频编码器,它们同时也最初研发了VP3(后来的Theora)。从技术上讲,VP8的视频质量类似于Baseline profile的H.264,同时有着很大的提升的潜力。
在2010年,Google收购了On2公司,并且将视频编码器标准和编码解码的样例进行了开源。同时,Google还通过宣布其完全免费打开了所有On2在VP8上的专利。(这也是最好的办法,因为你无法解除任何专利)。
All times are AEST
Fri Jun-11 23:00 South Africa - Mexico
Sat Jun-12 04:00 Uruguay - France
Sat Jun-12 21:00 Korea Republic - Greece
Sat Jun-12 23:30 Argentina - Nigeria
Sun Jun-13 04:00 England - USA
Sun Jun-13 21:00 Algeria - Slovenia
Sun Jun-13 23:30 Serbia - Ghana
Mon Jun-14 04:00 Germany - Australia
Mon Jun-14 21:00 Netherlands - Denmark
Mon Jun-14 23:30 Japan - Cameroon
Tue Jun-15 04:00 Italy - Paraguay
Tue Jun-15 21:00 New Zealand - Slovakia
Tue Jun-15 23:30 Cote d’Ivoire - Portugal
Wed Jun-16 04:00 Brazil - Korea DPR
Wed Jun-16 21:00 Honduras - Chile
Wed Jun-16 23:30 Spain - Switzerland
Thu Jun-17 04:00 South Africa - Uruguay
Thu Jun-17 21:00 Argentina - Korea Republic
Thu Jun-17 23:30 Greece - Nigeria
Fri Jun-18 04:00 France - Mexico
Fri Jun-18 21:00 Germany - Serbia
Fri Jun-18 23:30 Slovenia - USA
Sat Jun-19 04:00 England - Algeria
Sat Jun-19 21:00 Netherlands - Japan
Sat Jun-19 23:30 Ghana - Australia
Sun Jun-20 04:00 Cameroon - Denmark
Sun Jun-20 21:00 Slovakia - Paraguay
Sun Jun-20 23:30 Italy - New Zealand
Mon Jun-21 04:00 Brazil - Cote d’Ivoire
Mon Jun-21 21:00 Portugal Korea DPR
Mon Jun-21 23:30 Chile - Switzerland
Tue Jun-22 04:00 Spain - Honduras
Tue Jun-22 23:30 Mexico - Uruguay
Wed Jun-23 02:00 France - South Africa
Wed Jun-23 04:00 Greece - Argentina
Wed Jun-23 06:30 Nigeria - Korea Republic
Wed Jun-23 23:30 Slovenia - England
Thu Jun-24 02:00 USA - Algeria
Thu Jun-24 04:00 Australia - Serbia
Thu Jun-24 06:30 Ghana - Germany
Thu Jun-24 23:30 Slovakia - Italy
Fri Jun-25 02:00 Paraguay - New Zealand
Fri Jun-25 04:00 Cameroon - Netherlands
Fri Jun-25 06:30 Denmark - Japan
Fri Jun-25 23:30 Portugal - Brazil
Sat Jun-26 02:00 Korea DPR - Cote d’Ivoire
Sat Jun-26 04:00 Chile - Spain
Sat Jun-26 06:30 Switzerland - Honduras
The final top 10 ranking in the awards were:
1. Asiana Airlines
2. Singapore Airlines
3. Qatar Airways
4. Cathay Pacific
5. Air New Zealand
6. Etihad Airways
7. Qantas Airways
8. Emirates
9. Thai Airways
10. Malaysia Airlines
Other awards announced included:
Best Low-Cost Airline Worldwide
Air Asia
Most Improved Airline
Garuda Indonesia
Best Cabin Staff
Singapore Airlines
Best Inflight Entertainment
Emirates
Best Airport Services
Thai Airways
Best Economy Class
Malaysia Airlines
Best Premium Economy Class
Qantas
Best Business Class
Qatar Airways
Best First Class
Etihad Airways
Best Airline: Transatlantic
Virgin Atlantic
Best Airline: Transpacific
Cathay Pacific
Best Airline: Australia/Pacific
Air New Zealand
Best Airline: Europe
Lufthansa
Best Airline: India/Central Asia
Kingfisher Airlines
Best Airline: Middle East
Qatar Airways
Best Airline: North America
Air Canada
Best Airline: South East Asia
Singapore Airlines
Best Airline Lounge - Business Class
Virgin Atlantic
Best Airline Lounge - First Class
Thai Airways
Best Airline Seat - Business Class
Singapore Airlines
Best Airline Seat - Economy Class
Kingfisher Airlines
Best Airline Seat - First Class
Etihad Airways
Best Airline Seat - Premium Economy Class
Qantas Airways
Best Low-Cost Airline Australia/Pacific
Virgin Blue
Best Onboard Catering - Business Class
Qatar Airways
Best Onboard Catering - Economy Class
Turkish Airlines
Best Onboard Catering - First Class
Etihad Airways



