代码改变世界

WP7 App性能优化(2):多媒体

2010-12-14 22:03  MagicKing110  阅读(2307)  评论(9编辑  收藏  举报

PC版Silverlight处理多媒体的方式和Windows Phone 7版Silverlight是有所不同的。PC版Silverlight中的T:System.Windows.Controls.MediaElement使用包含在Silverlight安装包中的解码器和处理程序处理多媒体。而WP7版Silverlight中的的MediaElement则依赖于WP7操作系统的硬件解码器和本地多媒体处理逻辑.因此开发人员应该清楚在多媒体处理和播放上的两点不同:

  • Windows Phone 中播放码率和分辨率是更受限的
  • 内存流没有针对播放做优化

将多媒体的文件码率和分辨率编码为合适大小

应当对多媒体文件进行编码以达到Windows Phone 所要求的播放码率和分辨率。以下列表列出了WP7支持的多媒体文件格式和各自的最大码率及分辨率。

格式/解码器 最大分辨率 最大播放帧频(帧/秒)
H.263 800 x 480 30
WMV – Simple, Main, or Advanced Profile (VC-1) 800 x 600 30
WMV9 800 x 600 30
MPEG-4 Part 2 Simple Profile 800 x 600 (720 for HD capture devices) 30
MPEG-4 Part 10, Baseline, Main, or High Profile (MPEG-4, AVC, H.264)

720 x 480

720 x 576

30

25

 

将多媒体文件的BuildAction设置为Content

WP7上的多媒体处理针对文件和网络流做了优化,但是内存流没有。这就意味着包含在程序中的多媒体文件,如声音效果等,应当设置其Build ActionContent而不是Resource(关于Content和Resource的区别请参考《BuildAction之Content与Resource》)。当多媒体文件设置为Content时,安装后将直接以独立文件形式存储在应用程序安装目录中。而设置为Resource时,将存在于Dll文件中,一般使用时还要先将其从Dll文件中释放出来才能使用。也就说当一个多媒体文件编译为Content时可以直接播放。而编译为Resource时,在播放前要先将其从Dll中拷贝到一个文件中然后才能播放,这将很大的降低应用程序性能。下面的示意图展示了如何在VS中设置文件的BuildAction。

Ff967560.f2756a42-805d-403e-8a00-9389b7b7de09(en-us,VS.92).png

如果你必须播放内存流中的视频,你可以自己实现一个MediaStreamSource。否则,请考虑将该内存流保存为独立存储中的一个文件,然后访问该文件。

 

转到:WP7 App性能优化(0):索引页