Silverlight与Flash的一点不同 续

前些日子随手写的《Silverlight与Flash的一点不同》一文,有读者提出了赞同和反对意见,意料之中的事情,呵呵,继续讨论如下。

WPF是以XAML为基础的,而XAML并不是为Streaming而设计的,至少我没有看到对此的说明。理论上,XAML也是可以像XML Stream的方式来处理,但是Code Behide对应的DLL呢?至少,你总得把整个Dll下载完成后才能加载吧,我不知道微软已经做到了代码的边运行边下载的,就像CPU访问物理内存产生的缺页中断那样--理论上是可以做到,也看到类似的产品了,好像是SoftGrid。

让我们来看一下Flash的SWF文件结构,首先是文件头

     Field               Type*               Comment    
     Signature               UI8               Signature byte always ‘F’    
     Signature               UI8               Signature byte always ‘W’    
     Signature               UI8               Signature byte always ‘S’    
     Version                   UI8               Single byte file version (e.g. 0x04F for SWF 4)    
     FileLength               UI32               Length of entire file in bytes    
     FrameSize               RECT               Frame size in twips    
     FrameRate               UI16               Frame delay in 8.8 fixed number of frames per second    
     FrameCount             UI16               Total number of frames in movie    

更多详情请参见http://www.half-serious.com/swf/format,下同。

我们可以看到,有FrameSize/FrameRate/FrameCount等信息。这跟流媒体的结构是类似的,数据应该是一帧帧组成成的,但也不完全相同,下面解释。

在文件头之后,是一块块独立的数据块(Tagged Data Block),可以是显示数据,也可以是控制命令。并且,数据块内的数据只能对本块的数据进行引用,而不能超越,从而保证Block的独立性。

file
			structure

Tag只能向前引用,而不能引用后面出现的Tag,这是Streaming的关键!

SWF的处理过程是,在遇到第一个ShowFrame Tag的时候,把之前的数据显示到屏幕上,此为第一帧。然后继续下载Tag,再次遇到ShowFrame Tag的时候,在原来第一帧的基础上加入新的数据以显示,此为第二帧……如此等等,直到文件末。

SWF里除了可以包含纯数据,还可以包含控制代码,这是与MPEG等只包含纯数据的流媒体格式不一样的地方。

我之所以说Flash天生就支持流媒体,是因为它的文件格式,以及处理模式就是流式处理的,并不是说它可以显示视频。其实,视频这个定义很模糊,还是用流媒体数据更合适吧。

之所以说Silverlight不是天生支持流媒体,而是后天补充的,是因为它的数据格式本身不是按照Block来组织的。如果把一个Xap包当做一个Block的话,粒度好像太大了。当然,只要能分段下载运行,也算是一种Streaming了,没有人说一定要像Flash那样才算Streaming啊。

写到这里,我突然意识到,有些概念可能搞混了。问题其实有两部分,即数据可以流式处理,和支持流式数据的处理--暂时还找不到合适的称谓。

前面我们讲的只是SWF文件可以流式处理,即边下载边运行。当遇到标准的流媒体数据,比如MP3数据流怎么办?在Silverlight是通过MediaElement来实现流媒体播放的,在Flash里大概也是类似(没仔细研究过)。由此可见,对标准流媒体的播放,Silverlight和Flash并没有什么不同。但是,在自身数据的流式处理上,Flash似乎更胜一筹。

不同的实现机制,各有优劣,不分高下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值