代码改变世界

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

  MagicKing110  阅读(2313)  评论(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):索引页

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示