多媒体

开发一个可随时帮助用户创建和播放媒体,并为用户带来令人兴奋的媒体体验的应用。现在通过 Windows 8.1 可以轻松开发出这样的应用。Windows 8.1 中具有可捕获不同环境中的媒体的新属性,是一种向使用 XAMLExtensible Application Markup Language (XAML) 的应用添加播放控件的简单方法,并为播放 HTML5 媒体源扩展 (MSE) 提供本机支持。

Windows 8.1 中的更新功能

视频处理功能更新

[立即获取 媒体中心MediaStreamSource 示例。]

Windows 8.1 引入了一些新的更新,以及与视频格式、编解码器和处理相关的支持。

支持 CFF

Microsoft 媒体基础将对常用文件格式 (CFF) 的支持添加到了其 MP4/fMP4 实现中。 CFF 是一种基于 ISO 基本媒体文件格式的音频/视频容器格式。

新 XVP 模式

媒体基础转换代码视频处理器 (XVP) 中添加了 MrfCrf444 模式,该模式始终在软件中运行,并且不使用 DirectX 视频加速 (DXVA) 硬件加速。这样可以确保无论基本硬件如何,所有平台上均能实现一致的结果。由于 MrfCrf444 模式完全在软件中执行,因此转换代码操作可能需要较长时间,并使用较多电能。 这种新模式强制使用较大的筛选器,对颜色转换使用全精度,首选高质量颜色格式,并启用高质量反隔行扫描。

你可以通过将 MediaTrancoder.VideoProcessingAlgorithm 设置为 MediaVideoProcessingAlgorithm.mrfCrf444 在你的应用中使用此模式。


// sourceFile and destFile are IStorageFile objects defined elsewhere.

var profile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp4
    (Windows.Media.MediaProperties.VideoEncodingQuality.hd720p); 

var transcoder = new Windows.Media.Transcoding.MediaTranscoder(); 

transcoder.videoProcessingAlgorithm = 
    Windows.Media.Transcoding.MediaVideoProcessingAlgorithm.mrfCrf444; 

transcoder.prepareFileTranscodeAsync(sourceFile, destFile, profile); 


在媒体基础中支持扩展范围 YUV

在 Windows 8 中,媒体基础管道默认为演播室摆幅 (studio swing) YUV 范围 [Y: 16-235],并且对于扩展范围 YUV [Y: 0-255] 中的输入不发出信号。媒体基础管道现在能够将扩展范围的输入用信号传递到图形处理器 (GPU) 硬件。这样就使包括 MJPEG 解码器在内的整个媒体基础管道扩大了感知范围。

MF_MT_VIDEO_NOMINAL_RANGE 属性用于为内容指定工作室或扩展的 YUV 范围。

媒体流源

Windows 8.1 引入了一种新的针对 Windows 应用商店应用的通用媒体源,称为媒体流源 (MSS)。此项技术的 API 位于 Windows.Media.Core 命名空间中,主要媒体源类是 MediaStreamSource。MSS 使应用能够向媒体管道发送压缩和未压缩的音频和视频示例,以进行播放、转换代码和流式传输。媒体示例可以由此应用动态生成,也可以通过流媒体或文件进行多路复用。这一灵活性使应用能够更加轻松地扩展对新媒体格式的平台支持,或解决复杂问题,如自适应流式传输或在托管代码中实现自定义媒体源。

MediaStreamSource API 与同名的 Microsoft Silverlight API 非常相似。所以熟悉 Silverlight 版本的这些 API 的开发人员可以利用他们已有的相关知识使用 MSS 构建 Windows 应用商店应用。

可以在使用 JavaScript 的 Windows 应用商店应用中将 MSS 与 audiovideo 对象一起使用,在使用 C++、C# 或 Visual Basic 和 MediaElement 的 Windows 应用商店应用中将 MSS 与 MediaTranscoder 对象一起使用。

下面是一些主要的 MSS API。其顺序反映了 MSS 工作方式的基本流程。你会看到 MediaStreamSource 通过事件参数向应用发送请求对象。 这些请求对象使应用能够与 MediaStreamSource 进行交互并向其返回数据。

API描述
MediaStreamSource 表示直接向媒体管道发送媒体示例的媒体源。MediaStreamSource 使用该应用提供的 MediaStreamSample 对象。
MediaStreamSample 表示 MediaStreamSource 使用的媒体示例。
MediaStreamSource.Starting(事件)

MediaStreamSource 使用此事件通知应用已为开始处理媒体数据做好准备。

MediaStreamSourceStartingRequest

表示来自 MediaStreamSource 的请求,指示已经为开始处理媒体数据做好准备。

应用应通过调用 SetActualStartPosition 尽快答复此请求。 如果应用需要让 MediaStreamSource 延迟处理数据,可以通过调用 MediaStreamSourceStartingRequest.GetDeferral 获取一个异步延期。当应用准备好让 MediaStreamSource 开始时,它会对延期对象调用 Complete

开始请求通过传递到 MediaStreamSource.Starting 事件处理程序的 MediaStreamSourceStartingEventArgs 来访问。

MediaStreamSource.SampleRequested(事件)

MediaStreamSource 使用此事件通知应用已为 MediaStreamSample 做好准备。

为此事件注册处理程序时需要使用应用。

MediaStreamSourceSampleRequest

代表一个 MediaStreamSource 对新媒体示例的请求。将 Sample 属性设置为新 MediaStreamSample 可触发 MediaStreamSource 以检索媒体示例并继续处理媒体数据。

应用应尽快答复此请求。如果应用需要在发送 MediaStreamSample 之前留出一些时间,它可以通过调用 MediaStreamSourceSampleRequest.GetDeferral 来获取一个异步延期。当应用完成延期后,它会对延期对象调用 Complete

示例请求通过传递到 MediaStreamSource.SampleRequest 事件处理程序的 MediaStreamSourceSampleRequestedEventArgs 来访问。

应用通过响应 MediaStreamSourceSampleRequest 或通过将 MediaStreamSourceSampleRequest.Sample 属性分配给 null 来指示它已到达流媒体的结尾,无需提供 MediaStreamSample

MediaStreamSource.Closed(事件)

MediaStreamSource 使用此事件通知应用它已关闭。

MediaStreamSourceClosedRequest

代表来自 MediaStreamSource 的请求,指示它已关闭。

关闭请求通过传递到 MediaStreamSource.Closed 事件处理程序的 MediaStreamSourceClosedEventArgs 来访问。

MediaElement.SetMediaStreamSource MediaElement 的源设置为 MediaStreamSource

 

获取 MediaStreamSource 示例,以了解使用 MSS 的详细示例。

音频和视频捕获更新

[立即获取视频捕获音频效果发现示例 。]

Windows 8.1 引入了很多针对音频和视频捕获的功能更新。

照片序列模式

照片序列模式可拍摄一系列连续的照片。你可以使用 LowLagPhotoSequenceControl 类配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

可以使用 LowLagPhotoSequenceControl.Supported 属性确定设备是否支持照片序列模式。

照片序列模式的一个主要方案是获取以前的照片,—即,获取用户拍摄之前的照片。 你可以使用 PhotoCapturedEventArgs.CaptureTimeOffset 说明某个帧是在过去还是在将来。大于 0 的值表示将来,小于 0 的值表示过去。

若要启动此模式,请调用 MediaCapture.PrepareLowLagPhotoSequenceCaptureAsync。若要开始捕获照片,请调用 StartAsync。你的应用将继续接收来自设备的照片,直到停止此操作为止。 若要停止捕获照片,请调用 StopAsync

如果你的应用需要设置每秒钟收到的帧的数量,可以使用 LowLagPhotoSequence.PhotosPerSecondLimit。如果设备上传感器的处理速度能够达到 30 帧每秒 (fps),但应用只需要 4 fps,此功能就很有用。

缩略图支持

通过 LowLagPhotoControlLowLagPhotoSequenceControl 类,支持单张照片和照片序列操作的缩略图功能,可以通过 MediaCapture.VideoDeviceController 属性访问这些类。

若要启用缩略图功能,请将 ThumbnailEnabled 属性设置为 true。 你可以使用 DesiredThumbnailSize 设置所需的缩略图大小,使用 ThumbnailFormat 设置缩略图的格式。

场景模式

场景模式可以调节捕获的帧的后续处理过程,以便能够更好地匹配当前所录制的场景。你可以使用 SceneModeControl 配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

SupportedModes 属性说明设备支持哪些场景模式(如SnowNightSport)。若要选择场景模式,请调用 SceneModeControl.SetValueAsync

聚光模式

聚光模式使用设备上的聚光 LED。你可以使用 TorchControl 配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

你可以通过查看 TorchControl.Supported 属性确定设备是否支持此控件。如果支持,可以在捕获应用中或非捕获应用中使用聚光模式,以完成如照亮房间等操作。

闪光灯模式

闪光灯模式使用设备上的闪光灯。你可以使用 FlashControl 配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

你可以通过查看 FlashControl.Supported 属性确定设备是否支持此控件。如果支持,可以在照片应用中使用闪光灯模式,以处理光线较暗的环境或 RedEyeReduction

白平衡

白平衡为你的应用提供了针对设备上白平衡设置的更多控制功能。你可以使用 WhiteBalanceControl 配置白平衡的级别,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

你可以通过查看 WhiteBalanceControl.Supported 属性确定设备是否支持此控件。如果支持,可以通过调用 SetPresetAsync 使用其中一个 ColorTemperaturePreset 值。或者调用 SetValueAsync 设置一个界于 MinMax 之间的具体 Value

曝光模式

曝光模式为你的应用提供了针对设备上曝光设置的更多控制功能。 你可以使用 ExposureControl 配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

你可以通过查看 ExposureControl.Supported 属性确定设备是否支持此控件。如果支持,你的应用可以通过调用 SetValueAsync 来设置曝光值。若要启用自动曝光,请调用 SetAutoAsync

曝光补偿模式

曝光补偿模式为你的应用提供了针对捕获照片的曝光程度的控制功能。你可以使用 ExposureCompensationControl 配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

你可以通过查看 ExposureCompensationControl.Supported 属性确定设备是否支持此控件。如果支持,你的应用可以通过调用 SetValueAsync 来设置曝光值。

焦点模式

焦点模式为你的应用提供了针对设备上焦点设置的更多控制功能。你可以使用 FocusControl 配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

你可以通过查看 FocusControl.Supported 属性确定设备是否支持此控件。如果支持,可以通过调用 SetPresetAsync 使用其中一个 FocusPreset 值。或者调用 SetValueAsync 设置一个界于 MinMax 之间的具体 Value

ISO 模式

你的应用可以使用 ISO 模式来管理设备上的 ISO 感光度设置。 在光线较暗的环境中,你可能希望使用较高的噪声级别,以响应较高的总体亮度。应用使用 ISO 感光度控件可以调节此权衡关系。你可以使用 IsoSpeedControl 配置此模式,可以通过 MediaCapture.VideoDeviceController 属性访问此类。

你可以通过查看 IsoSpeedControl.Supported 属性确定设备是否支持此控件。如果支持,可以使用 SetPresetAsync 将 ISO 级别设置为其中一个 IsoSpeedPreset 值。 SupportedPresets 列出了设备支持的预设值。

感兴趣区域

感兴趣区域允许你的应用在预览中指定 RegionOfInterest。你可以使用 RegionsOfInterestControl 配置此设置,可以通过 MediaCapture.VideoDeviceController 访问此类。

使用此设置来指定要计算焦点和曝光程度等内容的预览区域。感兴趣区域可实现如“点按以对焦”等方案。

视野

“视野”使应用能够通过 MediaCaptureSettings.PitchOffsetDegreesMediaCaptureSettings.Horizontal35mmEquivalentFocalLengthMediaCaptureSettings.Vertical35mmEquivalentFocalLength 设置来计算视野和相机角度。

录制视频时拍摄照片

你的应用可以检查 MediaCaptureSettings.ConcurrentRecordAndPhotoSupported 设置,以发现设备是否允许在录制视频时拍摄照片。

确定相机是否需要播放声音

MediaCaptureSettings.CameraSoundRequiredForRegion 设置指示是否需要操作系统在相机拍摄照片时播放声音。应用可以使用此信息来决定是否必须播放声音。

捕获设备优化

VideoDeviceController.PrimaryUse 属性指示所使用的捕获设备是否主要用于照片或视频。 这使系统能够优化性能和质量。

录制未压缩的 AVI 和 WAV

你可以通过将 MediaCaptureInitializationSettings.AudioProcessing 设置为 Raw,让你的应用从麦克风录制未压缩的音频流。

音频效果发现

应用可以发现终结点上的音频处理链。可使用此信息配置应用中进行的音频处理。Windows.Media.Effects 命名空间包含 AudioEffectAudioCaptureEffectsManagerAudioEffectsManagerAudioRenderEffectsManager 类。

要创建 AudioCaptureEffectsManager 对象,请调用 AudioEffectsManager.CreateAudioCaptureEffectsManager。 要创建 AudioRenderEffectsManager 对象,请调用 AudioEffectsManager.CreateAudioRenderEffectsManager

XAML MediaElement 更新

[立即获取 XAML 媒体播放示例。]

MediaElement 控件已扩展为支持内置传输控件和全屏呈现。

MediaElement.AreTransportControlsEnabled 属性可启用或禁用内置传输控件,以便你无需再使用自己的按钮来完成像播放、停止、暂停或清理等操作。 此 API 的工作方式与 HTML5 video 上的 controls 属性和 audio 元素相似。

MediaElement.IsFullWindow 属性可启用或禁用全屏呈现。

以下代码显示如何启用内置传输控件。



<MediaElement Name="media" 
              Source="testVideo.mp4" 
              AreTransportControlsEnabled="True" />


MediaElement media = new MediaElement();
media.AreTransportControlsEnabled = true;

以下代码显示如何启用全屏视频呈现。


<MediaElement Name="media"
              Source="testVideo.mp4" 
              IsFullWindow="True" />


MediaElement media = new MediaElement();
media.IsFullWindow = true;

HTML5 视频和音频播放

[立即获取 HTML 媒体播放示例。]

Windows 8.1 引入了一系列对音频和视频媒体播放功能的更新,包括支持万维网联合会 (W3C) HTML5 媒体源扩展 (MSE),支持 W3C HTML5 加密媒体扩展 (EME),以及对 XAML MediaElement 控件的更新。

HTML5 媒体源扩展 (MSE) 视频和音频。

HTML5 媒体源扩展 (MSE) 是一种 W3C 标准,它将 videoaudio 元素进行扩展,以便能够在不使用插件的情况下动态更改媒体流。这样支持如自适应媒体流、实时流、拼接视频和视频编辑等方案。

可以在 MSE 之上构建自定义自适应流式处理解决方案。 自适应流式处理解决方案可以动态更改媒体流的比特率,以提供最高质量的流媒体体验。它们尝试根据如网络带宽和 CPU 利用率等限制来决定最佳比特率。例如,如果网络带宽下降,你可以使用 MSE 将视频流切换到较低的比特率。 这可能会降低图像质量,但可以保持视频无中断连续播放。

动态拼接视频的其中一个用途是可以在媒体播放过程中插入广告。这意味着不必事先在媒体文件中放入广告剪辑,可以在播放过程中向媒体流中插入剪辑。

以下是 MSE API 的一些重要元素。

API 描述
MediaSource 连接到 HTML 媒体元素的媒体对象。 MediaSource 包含由一个或多个 SourceBuffer 对象指定的媒体数据。
MediaSource.readyState 指示 MediaSource 的当前状态及其是否连接到媒体元素。
SourceBuffer 用于保存媒体数据的缓冲区。
SourceBufferList SourceBuffer 对象的集合。
MediaSource.endOfStream 指示流结束的原因。
MediaSource.sourceBuffers SourceBuffer 对象的集合,其中包含 MediaSource 的媒体数据。
createObjectURL 创建一个指向 MediaSource 对象的 URL。 通过将 src 属性设置为此 URL,可以将 MediaSource 连接到 videoaudio

 

HTML5 加密媒体扩展 (MSE) 视频和音频元素

HTML5 加密媒体扩展 (EME) 是一个 W3C 标准,该标准对 videoaudio 元素进行了扩展,以便在不使用插件的情况下也能启用受数字版权管理 (DRM) 保护的内容。 Windows 8.1 上运行的使用 JavaScript 的 Internet Explorer 11 和 Windows 应用商店应用支持 EME。

以下是与 EME 一起使用的一些主要 API。

API 描述
MediaKeys 用于解密和加密媒体数据的密钥。
MediaKeySession 与密钥相关的播放会话。
MediaKeys.createSession 创建与 MediaKeys 关联的 MediaKeySession
keySystem 媒体元素上指定密钥系统的属性。 密钥系统标识内容保护提供程序或解密机制。
MediaKeyError 指定与 MediaKeys 相关的错误的类型。
MediaKeyMessageEvent 指定与 MediaKeys 相关的事件的类型。

 

“播放到”功能更新

[立即获取媒体播放到SystemMediaTransportControls 示例。]

Windows 8.1 引入了一系列更新以改进“播放到”体验。

以编程方式启动“播放到”UI

Windows 8.1 的新 UI 指南鼓励应用开发者使用标准“播放到”字形提供应用内按钮,从而以编程方式显示“播放到”UI 浮出控件,而不是要求用户通过轻扫“设备”超级按钮来显示此 UI。使用 ShowPlayToUI 可显示浮出控件。

部分代码显示如何显示“播放到”UI。


function showPlayTo() {
    Windows.Media.PlayTo.PlayToManager.showPlayToUI();
}


按引用播放到

“按引用播放到”允许网页和 Windows 应用商店应用能够播放受 DRM 保护的内容。此应用指定一个将发送到“播放到”目标设备的首选统一资源标识符 (URI)。 该 URI 可以指向一个基于云的媒体服务器。 如果存在 preferredSourceUri,“播放到”目标设备可直接从云获得流内容,并且该内容可以受到 DRM 保护。(与来自必须解除内容保护的 Windows 8.1 计算机—的备用—流内容对比。)

以下代码显示如何设置“按引用播放到”。



// video is a MediaElement defined in XAML.
using Windows.Foundation;

video.Source = new Uri("http://www.contoso.com/videos/video.mp4"); 
video.PlayToSource.PreferredSourceUri = 
   new Uri("http://www.contoso.com/catalogid=1234"); 




<video src="http://www.contoso.com/videos/video.mp4" 
   x-ms-playToPreferredSourceUri="http://www.contoso.com/catalogid=1234" /> 


var video = document.createElement('video'); 
document.body.appendChild(video); 

video.src = "http://www.contoso.com/videos/video.mp4"; 
video.msPlayToPreferredSourceUri = "http://www.contoso.com/catalogid=1234"; 

Adobe Flash 音频和视频支持

“播放到”功能现在支持通过数字媒体接收器 (DMR) 上的全新 Windows UI 播放来自 Internet Explorer 的未受保护的 Flash 音频和视频内容。

支持媒体源扩展

媒体源扩展 (MSE) 是一个新的 W3C 标准,将成为只使用 Web 浏览器实现高质量、优质、节能和较长视频传输的主干。MSE 不需要使用插件。“播放到”功能现在支持通过使用 JavaScript 的 Windows 应用商店应用,以及使用 Windows UI 的 Internet Explorer 中的网站播放未受保护的 MSE 内容。

仅视频到音频设备

此“播放到”UI 现在支持选择仅音频接收器作为视频内容的远程终结点。视频内容被分离开,只将音频组件发送给设备。

媒体传输控件 UI

在 Windows 8.1 中,你可以使用新 SystemMediaTransportControls,而不是 MediaControl 类。

此媒体传输控件 UI(也就是你调高音量或调低音量时看到的 UI)现在可用作在“播放到”设备上播放媒体的远程控制。

可以显示这些传输控件,并用于在源应用在后台运行或设备屏幕锁定时控制本地或远程播放。所有 Windows 应用商店应用都会获取一个默认实现,包括:

  • 连接基本传输控件,如播放、暂停和定位

  • 应用名称替代歌曲标题

  • 应用图标替代唱片集画面

你的应用可以通过以下方式改进默认实现:

  • 连接高级传输控件,如下一曲目和上一曲目功能

  • 提供歌曲标题

  • 提供唱片集画面

  • 提供唱片集标题

“设备”超级按钮 UI 更新

“设备”超级按钮现在按层次结构组织,并将设备放在这些类别中:

  • 播放

  • 打印

  • 项目

  • 点击和发送(如果设备硬件支持)

此功能可帮助用户了解“设备”超级按钮功能的预期行为,以免造成混淆。即使当前没有设备可用,仍会显示这些部分。

数字媒体接收器暂留

最近选择的数字媒体接收器及其连接状态当前在“设备”超级按钮上高亮显示。

改进的连接/断开连接流程和更好的错误报告

“播放到”UI 现在支持改进的连接和断开连接流程。

在与设备建立“播放到”连接时,将始终显示一个包含“正在连接”消息的新 UI 和“播放到”浮出控件,直到实现连接。如果连接失败,会向源应用报告连接错误。

已删除“断开连接”按钮。若要结束远程播放并继续本地播放,用户现在可以选择“此电脑”,此选项位于“播放到”UI 中的其他设备旁边。

 

 

显示:
© 2014 Microsoft