Windows 8.1 多媒體
開發一個可以幫助用戶創建和播放媒體,并且能夠為用戶帶來令人興奮的媒體體驗的應用。現在通過 Windows 8.1 Preview 可以輕松開發出這樣的應用。Windows 8.1 Preview 中具有可捕獲不同環境中的媒體的新屬性,是一種向使用 XAML 的應用添加播放控件的簡單方法,并為播放 HTML5 加密媒體擴展 (EME) 提供本機支持。
Windows 8.1 Preview 中的更新
- 視頻處理功能
- 音頻和視頻捕獲功能
- XAML MediaElement
- HTML5 視頻和音頻播放
- “播放到”功能
視頻處理功能更新
Windows 8.1 Preview 中引入了一些新的更新,以及與視頻格式、編解碼器和處理相關的支持。
支持 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 Preview 中引入了一種新的針對 Windows 應用商店應用的通用媒體源,稱為媒體流源 (MSS)。此項技術的 API 在 Windows.Media.Core 命名空間中,主要媒體源類是 MediaStreamSource。MSS 使應用能夠向媒體管道發送壓縮或未壓縮的音頻和視頻示例,以進行播放、轉換代碼和流式傳輸。媒體示例可以由此應用動態生成,也可以通過流媒體或文件進行多 路復用。這一靈活性使應用能夠更加輕松地擴展對新媒體格式的平臺支持,或解決復雜問題,如自適應流式處理或在托管代碼中實現自定義媒體源。
MediaStreamSource API 與同名的 Microsoft Silverlight API 非常相似。所以熟悉 Silverlight 版本的這些 API 的開發者可以利用他們已有的相關知識使用 MSS 構建 Windows 應用商店應用。
可以在使用 JavaScript 的 Windows 應用商店應用中將 MSS 與 audio 和 video 對象一起使用,在使用 C++、C# 或 Visual Basic 和 MediaElement 的 Windows 應用商店應用中將 MSS 與 MediaTranscoder 對象一起使用。
音頻和視頻捕獲更新
Windows 8.1 Preview 中引入了很多針對音頻和視頻捕獲的功能更新。
照片序列模式
照片序列模式可拍攝一系列連續的照片。你可以使用 LowLagPhotoSequenceControl 類配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
可以使用 LowLagPhotoSequenceControl.Supported 屬性確定設備是否支持照片序列模式。
照片序列模式的一個主要方案是獲取以前的照片,—即,獲取用戶拍攝之前的照片。 你可以使用 PhotoCapturedEventArgs.CaptureTimeOffset 說明某個幀是在過去還是在將來。大于 0 的值表示將來,小于 0 的值表示過去。
若要啟動此模式,請調用 MediaCapture.PrepareLowLagPhotoSequenceCaptureAsync。若要開始捕獲照片,請調用 StartAsync。你的應用將繼續接收來自設備的照片,直到停止此操作為止。 若要停止捕獲照片,請調用 StopAsync。
如果你的應用需要設置每秒鐘收到的幀的數量,可以使用 LowLagPhotoSequence.PhotosPerSecondLimit。如果設備上傳感器的處理速度能夠達到 30 幀每秒 (fps),但應用只需要 4 fps,此功能就很有用。
縮略圖支持
通過 LowLagPhotoControl 和 LowLagPhotoSequenceControl 類,支持單張照片和照片序列操作的縮略圖功能,可以通過 MediaCapture.VideoDeviceController 屬性訪問這些類。
若要啟用縮略圖功能,請將 ThumbnailEnabled 屬性設置為 true。 你可以使用 DesiredThumbnailSize 設置所需的縮略圖大小,使用 ThumbnailFormat 設置縮略圖的格式。
#p#
場景模式
場景模式可以調節捕獲的幀的后續處理過程,以便能夠更好地匹配當前所錄制的場景。你可以使用 SceneModeControl 配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
SupportedModes 屬性說明設備支持哪些場景模式(如Snow、Night 和 Sport)。若要選擇場景模式,請調用 SceneModeControl.SetValueAsync。
聚光模式
聚光模式使用設備上的聚光 LED。你可以使用 TorchControl 配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
你可以通過查看 TorchControl.Supported 屬性確定設備是否支持此控件。如果支持,可以在捕獲應用中或非捕獲應用中使用聚光模式,以完成如照亮房間等操作。
閃光燈模式
閃光燈模式使用設備上的閃光燈。你可以使用 FlashControl 配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
你可以通過查看 FlashControl.Supported 屬性確定設備是否支持此控件。如果支持,可以在照片應用中使用閃光燈模式,以處理光線較暗的環境或 RedEyeReduction。
白平衡
白平衡為你的應用提供了針對設備上白平衡設置的更多控制功能。你可以使用 WhiteBalanceControl 配置白平衡的級別,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
你可以通過查看 WhiteBalanceControl.Supported 屬性確定設備是否支持此控件。如果支持,可以通過調用 SetPresetAsync 使用其中一個 ColorTemperaturePreset 值。或者調用 SetValueAsync 設置一個界于 Min 和 Max 之間的具體 Value。
曝光模式
曝光模式為你的應用提供了針對設備上曝光設置的更多控制功能。 你可以使用 ExposureControl 配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
你可以通過查看 ExposureControl.Supported 屬性確定設備是否支持此控件。如果支持,你的應用可以通過調用 SetValueAsync 來設置曝光值。若要啟用自動曝光,請調用 SetAutoAsync。
曝光補償模式
曝光補償模式為你的應用提供了針對捕獲照片的曝光程度的控制功能。你可以使用 ExposureCompensationControl 配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
你可以通過查看 ExposureCompensationControl.Supported 屬性確定設備是否支持此控件。如果支持,你的應用可以通過調用 SetValueAsync 來設置曝光值。
焦點模式
焦點模式為你的應用提供了針對設備上焦點設置的更多控制功能。你可以使用 FocusControl 配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
你可以通過查看 FocusControl.Supported 屬性確定設備是否支持此控件。如果支持,可以通過調用 SetPresetAsync 使用其中一個 FocusPreset 值。或者調用 SetValueAsync 設置一個界于 Min 和 Max 之間的具體 Value。
ISO 模式
你的應用可以使用 ISO 模式來管理設備上的 ISO 感光度設置。 在光線較暗的環境中,你可能希望使用較高的噪聲級別,以響應較高的總體亮度。應用使用 ISO 感光度控件可以調節此權衡關系。你可以使用 IsoSpeedControl 配置此模式,可以通過 MediaCapture.VideoDeviceController 屬性訪問此類。
你可以通過查看 IsoSpeedControl.Supported 屬性確定設備是否支持此控件。如果支持,可以使用 SetPresetAsync 將 ISO 級別設置為其中一個 IsoSpeedPreset 值。 SupportedPresets 列出了設備支持的預設值。
感興趣區域
感興趣區域允許你的應用在預覽中指定 RegionOfInterest。你可以使用 RegionsOfInterestControl 配置此設置,可以通過 MediaCapture.VideoDeviceController 訪問此類。
使用此設置來指定要計算焦點和曝光程度等內容的預覽區域。感興趣區域可實現如“點按以對焦”等方案。
視野
“視野”使應用能夠通過 MediaCaptureSettings.PitchOffsetDegrees、MediaCaptureSettings.Horizontal35mmEquivalentFocalLength 和 MediaCaptureSettings.Vertical35mmEquivalentFocalLength 設置來計算視野和相機角度。
錄制視頻時拍攝照片
你的應用可以檢查 MediaCaptureSettings.ConcurrentRecordAndPhotoSupported 設置,以發現設備是否允許在錄制視頻時拍攝照片。
確定相機是否需要播放聲音
MediaCaptureSettings.CameraSoundRequiredForRegion 設置指示是否需要操作系統在相機拍攝照片時播放聲音。應用可以使用此信息來決定是否必須播放聲音。
捕獲設備優化
VideoDeviceController.PrimaryUse 屬性指示所使用的捕獲設備是否主要用于照片或視頻。 這使系統能夠優化性能和質量。
錄制未壓縮的 AVI 和 WAV
你可以通過將 MediaCaptureInitializationSettings.AudioProcessing 設置為 Raw,讓你的應用從麥克風錄制未壓縮的音頻流。
#p#
音頻效果發現
應用可以發現終結點上的音頻處理鏈。可使用此信息配置應用中進行的音頻處理。Windows.Media.Effects 命名空間包含 AudioEffect、AudioCaptureEffectsManager、AudioEffectsManager 和 AudioRenderEffectsManager 類。
要創建 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 視頻和音頻播放
Windows 8.1 Preview 中引入了一系列對音頻和視頻媒體播放功能的更新,包括支持萬維網聯合會 (W3C) HTML5 媒體源擴展 (MSE),支持 W3C HTML5 加密媒體擴展 (EME),以及對 XAML MediaElement 控件的更新。
HTML5 媒體源擴展 (MSE) 視頻和音頻。
HTML5 媒體源擴展 (MSE) 是一種 W3C 標準,它將 video 和 audio 元素進行擴展,以便能夠在不使用插件的情況下動態更改媒體流。這樣支持如自適應媒體流、實時流、拼接視頻和視頻編輯等方案。
可以在 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 連接到 video 或 audio。 |
HTML5 加密媒體擴展 (MSE) 視頻和音頻元素
HTML5 加密媒體擴展 (EME) 是一個 W3C 標準,該標準對 video 和 audio 元素進行了擴展,以便在不使用插件的情況下也能啟用受數字版權管理 (DRM) 保護的內容。 在使用 Windows 8.1 Preview 上運行的 JavaScript 的 Internet Explorer 11 Preview 和 Windows 應用商店應用中支持 EME。
以下是與 EME 一起使用的一些主要 API。
API | 描述 |
---|---|
MediaKeys | 用于解密和加密媒體數據的密鑰。 |
MediaKeySession | 與密鑰相關的播放會話。 |
MediaKeys.createSession | 創建與 MediaKeys 關聯的 MediaKeySession。 |
keySystem | 媒體元素上指定密鑰系統的屬性。 密鑰系統標識內容保護提供程序或解密機制。 |
MediaKeyError | 指定與 MediaKeys 相關的錯誤的類型。 |
MediaKeyMessageEvent | 指定與 MediaKeys 相關的事件的類型。 |
“播放到”功能更新
Windows 8.1 Preview 中引入了一系列更新以改進“播放到”體驗。
以編程方式啟動“播放到”UI
Windows 8.1 Preview 的新 UI 指南鼓勵應用開發者使用標準“播放到”字形提供應用內按鈕,從而以編程方式顯示“播放到”UI 浮出控件,而不要求用戶通過輕掃“設備”超級按鈕來顯示此 UI。使用 ShowPlayToUI 可顯示浮出控件。
部分代碼顯示如何顯示“播放到”UI。
- function showPlayTo() {
- Windows.Media.PlayTo.PlayToManager.showPlayToUI();
- }
#p#
按引用播放到
“按引用播放到”使網頁和 Windows 應用商店應用能夠播放受 DRM 保護的內容。此應用指定一個將發送到“播放到”目標設備的首選統一資源標識符 (URI)。 此 URI 可以指向一個基于云的媒體服務器。 如果存在 preferredSourceUri,“播放到”目標設備可直接從云獲得流內容,并且該內容可受到 DRM 保護。(與來自必須解除內容保護的 Windows 8.1 Preview 計算機—的備用—流內容對比。)
以下代碼顯示如何設置“按引用播放到”。
- // 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 Preview 中,你可以使用新 SystemMediaTransportControls,而不是 MediaControl 類。
此媒體傳輸控件 UI(也就是你調高音量或調低音量時看到的 UI)現在可用作在“播放到”設備上播放媒體的遠程控制。
可以顯示這些傳輸控件,并用于在源應用在后臺運行或設備屏幕鎖定時控制本地或遠程播放。所有 Windows 應用商店應用都會獲取一個默認實現,包括:
- 連接基本傳輸控件,如播放、暫停和定位
- 應用名稱替代歌曲標題
- 應用圖標替代唱片集畫面
你的應用可以通過以下方式改進默認實現:
- 連接高級傳輸控件,如下一曲目和上一曲目功能
- 提供歌曲標題
- 提供唱片集畫面
- 提供唱片集標題
“設備”超級按鈕 UI 更新
“設備”超級按鈕現在按層次結構組織,并將設備放在這些類別中:
- 播放
- 打印
- 項目
- 點擊和發送(如果設備硬件支持)
此功能可幫助用戶了解“設備”超級按鈕功能的預期行為,以免造成混淆。即使當前沒有設備可用,仍會顯示這些部分。
數字媒體接收器暫留
最近選擇的數字媒體接收器及其連接狀態當前在“設備”超級按鈕上高亮顯示。
改進的連接/斷開連接流程和更好的錯誤報告
“播放到”UI 現在支持改進的連接和斷開連接流程。
在與設備建立“播放到”連接時,將始終顯示一個包含“正在連接”消息的新 UI 和“播放到”浮出控件,直到實現連接。如果連接失敗,會向源應用報告連接錯誤。
已刪除“斷開連接”按鈕。若要結束遠程播放并繼續本地播放,用戶現在可以選擇“此電腦”,此選項位于“播放到”UI 中的其他設備旁邊。
原文鏈接:http://msdn.microsoft.com/zh-cn/library/windows/apps/bg182883.aspx