转载地址:http://www.gwewe.com/dev/topics/1012150828.html
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 Action为Content而不是Resource(关于Content和Resource的区别请参考《BuildAction之Content与Resource》)。当多媒体文件设置为Content时,安装后将直接以独立文件形式存储在应用程序安装目录中。而设置为Resource时,将存在于Dll文件中,一般使用时还要先将其从Dll文件中释放出来才能使用。也就说当一个多媒体文件编译为Content时可以直接播放。而编译为Resource时,在播放前要先将其从Dll中拷贝到一个文件中然后才能播放,这将很大的降低应用程序性能。下面的示意图展示了如何在VS中设置文件的BuildAction。
如果你必须播放内存流中的视频,你可以自己实现一个MediaStreamSource。否则,请考虑将该内存流保存为独立存储中的一个文件,然后访问该文件。