众所周知,随着Windows 8与Windows phone 8的发布,其给我们带来了比以往任何时候都要紧密相似的两个平台。虽然它们非常的相似,但是在数字音频和视频的实现和技术上也存在相当大的区别。希望这篇博客能帮助您认知和理解这两个平台在媒体技术上的差别。在您看这篇博客之前,我假设您已经熟悉windows 8或者windows phone 8其中的任何一个与媒体相关的技术知识,虽然您对另一个平台不甚了解,但您仅仅需要一些相关的知识便可以将媒体技术从一个平台迁徙到另一个平台。

音频/视频的相关播放技术

Audio / Video Playback – Technology Map

Windows Store

Windows Phone 8

MediaElement
  (XAML)

 

MediaElement
  (XAML)

IMFMediaEngine
  (C++ only)

IMFMediaEngine
  (C++ only) (Subset)

 

WASAPI
  (C++ only)

WASAPI
  (C++ only) (Subset)

 

XAudio2
  (C++ only)

XAudio2
  (C++ only)

 

MeidaElement 控件能同时在这两个平台是播放音频和视频,但是关于MeidaElement,他们之间也存在一些差异,比如说windows phone 8中,你不能向MeidaElement添加任何的音频和视频效果(如插件)。且在DRM的实现上这两者之间也存在差异。如果你在实现MeidaElement播放音频/视频的时候不做任何花哨或者复杂的处理,那么MeidaElement在这两个平台是可以相互兼容的。

MediaEngine(与上述讨论的MeidaElement 有所不同)是windows 8与Windows phone 8中新的特征,但是MediaEngine只能在C++项目中使用,目前它并不支持托管代码。而且在windows phone 8中该MediaEngine功能与windows 8相比略有减少。比如说在windows phone 8种,MediaEngine仅支持帧服务器模式。此外请记住一点,在windows phone 8中,硬件加速会经常被使用到。

WASAPI 与XAudio2都能在这两个平台使用,但是这些技术仅仅能被C++项目所调用,到目前为止它们并不被托管代码所支持。虽然有关于XAudio2的全部功能都能在这两个平台使用,但是需要注意的一点是在windows phone 8平台,XAudio2仅支持未被压缩的PCM音频。如果想要XAudio2能在Windows phone 8中支持已压缩的PCM音频是非常困难的,因此在Windows phone中,仅仅只能使用WASAPI核心音频API的一部分。

References

Windows Store app

Windows Phone 8 app

Win32 and COM for Windows Store apps
  (multimedia)

Native audio APIs for Windows Phone 8 

 

IMFMediaEngine interface (Windows)

Supported Microsoft Media Foundation APIs
  for Windows Phone 8

 

MediaElement class (Windows)

MediaElement Class

背景音频

在windows store app与windows phone 8中播放背景音频的差别是在于windows phone 8中BackgroundAudioPlayer与windows store app中MediaElement与Audio标签的使用方式的不同。 BackgroundAudioPlaye是一个静态的类在使用之前并不需要被实例化,但是MediaElement与Audio标签必须要先定义然后才能使用。

在windows store app你仅仅需要设置MsAudioCategory这个属性等于”backgroundCapableMedia”就可以播放背景音频,但是在windows phone中,您需要建立一个AudioPlayerAgent,然后使它能在后台运行。

最后需要注意的一点是,你经常需要处理用户在锁定屏幕时对这些媒体控件的输入。在windows phone 8平台,我们需要调用这个控件的“Universal Volume Control(UVC)”;在windows
store app中我们仅需要调用这些媒体控件。虽然在这两个平台实现的技术不同但是基本功能是类似的。 

 

References

Windows Store app

Windows Phone 8 app

How to play audio in the background (Windows
  Store apps using JavaScript and HTML)

Background audio overview for Windows Phone

 

媒体分享

Sharing Media – Technology Map

Windows Store (XAML / HTML5)

Windows Phone 8 (XAML)

DataTransferManager
  class

ShareMediaTask
  Class

 

关于媒体分享,Windows store app与windows phone最大的区别在于在Windows store app中是通过share charm来进行分享,而在windows phone 8种您需要在您的代码中调用ShareMediaTask

在上述两种方式中您可能不能确认您的数据有没有被成功的分享,因为本质上分享是一种“被触发和被遗忘”的过程。

还需要记住一点是,当你的共享应用程序占据了整个屏幕时,您的Windows phone 8 app有可能会被挂起甚至会被关闭,所以您应保存该程序的运行状态和数据。

References

Windows Store app

Windows Phone 8 app

Sharing and receiving content (Windows Store
  apps using JavaScript and HTML) (Windows)

How to use the share media task for Windows
  Phone