多媒體

開發一個可協助使用者在建立及播放媒體方面,都能擁有令人振奮之體驗的應用程式。現在,在 Windows 8.1 中更容易達到這個目的,這個版本提供可擷取不同環境中媒體的新屬性、提供可在使用 Extensible 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,即可在您的應用程式中使用此模式。

No code example is currently available or this language may not be supported.

媒體基礎中的延伸範圍 YUV 支援

在 Windows 8 中,媒體基礎管線預設為限幅 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 可以讓應用程式將已壓縮及未壓縮的音訊和視訊樣本傳送給媒體管線來進行播放、轉碼及串流處理。媒體樣本可以由應用程式動態產生,或是從串流或檔案分離信號。這種彈性讓應用程式更容易針對新媒體格式延伸平台支援或解決複雜的問題,像是彈性串流或在 Managed 程式碼中實作自訂媒體來源。

MediaStreamSource API 與同名的 Microsoft Silverlight API 非常相似。因此,熟悉這些 API 之 Silverlight 版本的開發人員在使用 MSS 來建置 Windows 市集應用程式時,可以套用他們多數的知識。

MSS 可以與使用 JavaScript 之 Windows 市集應用程式中的 audiovideo 物件、與使用 C++、C# 或 Visual Basic 之 Windows 市集應用程式中的 MediaElement 物件以及與 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 來存取。

應用程式會透過以不提供 MediaStreamSample 的方式回應 MediaStreamSourceSampleRequest,或透過將 MediaStreamSourceSampleRequest.Sample 屬性指派為 null,以指出它已經到達串流的結尾。

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。當裝置上的感應器可以處理的每秒畫面格數 (fps) 為 30,但是應用程式只需要 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 videoaudio 元素上的 controls 屬性。

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 視訊和音訊元素的加密媒體延伸 (EME)。

HTML5 加密媒體延伸 (EME) 是一個 W3C 標準,可以延伸 videoaudio 元素,讓它們能夠在不使用外掛程式的情況下啟用受數位版權管理 (DRM) 保護的內容。 Internet Explorer 11 和在 Windows 8.1 上執行之使用 JavaScript 的 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。使用 ShowPlayToUI 來顯示飛出視窗。

以下是一些示範如何顯示 [播放至] UI 的程式碼。


Private Sub showPlayTo()
    Windows.Media.PlayTo.PlayToManager.ShowPlayToUI()
End Sub


[播放至] 轉址

[播放至] 轉址可以讓網頁和 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" /> 

No code example is currently available or this language may not be supported.

Adobe Flash 音訊和視訊支援

[播放至] 現在支援從數位媒體接收器 (DMR) 上新 Windows UI 中的 Internet Explorer 播放未受保護的 Flash 音訊和視訊。

媒體來源延伸支援

媒體來源延伸 (MSE) 是一個新的 W3C 標準,將成為僅使用網頁瀏覽器便能傳遞高品質、高質感、具能源效益、達正片長度之視訊的骨幹。MSE 不需要外掛程式。[播放至] 現在支援從使用 JavaScript 的 Windows 市集應用程式和 Windows UI 之 Internet Explorer 中的網站播放未受保護的 MSE 內容。

從視訊到僅限音訊的裝置

[播放至] UI 現在支援選取僅限音訊的接收器做為視訊內容的遠端端點。系統會將視訊內容分離,只將音訊部分傳送給裝置。

媒體傳輸控制項 UI

在 Windows 8.1 中,您可以使用新的 SystemMediaTransportControls 來取代 MediaControl 類別。

媒體傳輸控制項 UI (您調整音量大小時看到的 UI) 現在可以用來做為在 [播放至] 裝置上進行播放時的遠端控制項。

傳輸控制項可以在來源應用程式在背景中執行時,或在裝置畫面被鎖定時,被顯示並用來控制本機或遠端播放。所有 Windows 市集應用程式都會有一個包括下列各項的預設實作:

  • 連結基本傳輸控制項 (例如,播放、暫停及搜尋)

  • 以應用程式名稱取代歌曲標題

  • 以應用程式圖示取代專輯封面

您的應用程式可以透過下列方式改進預設實作:

  • 連結進階傳輸控制項 (例如,下一個曲目和上一個曲目功能)

  • 提供歌曲標題

  • 提供專輯封面

  • 提供專輯標題

[裝置] 常用鍵 UI 更新

[裝置] 常用鍵現在是以階層方式組織,並且將裝置分成下列類別:

  • 播放

  • 列印

  • 投影

  • 輕觸並傳送 (如果裝置硬體支援)

這有助於讓使用者對於在 [裝置] 常用鍵中的預期內容上降低混淆。即使目前沒有裝置可供使用,仍然可以看見這些區段。

數位媒體接收器持續性

[裝置] 常用鍵上會醒目提示最近選取的數位媒體接收器及其連線狀態。

改進的連線/中斷連線流程,以及更好的錯誤報告功能

[播放至] UI 現在支援改進的連線和中斷連線流程。

與裝置正在建立 [播放至] 連線時,顯示 [正在連線] 訊息的新 UI 和 [播放至] 飛出視窗會保持可見,直到已建立連線為止。如果連線失敗,系統會將連線錯誤回報給來源應用程式。

[中斷連線] 按鈕已被移除。若要結束遠端播放並繼續本機播放,使用者現在可以改為選取 [本機] (列在 [播放至] UI 中其他裝置的旁邊)。

 

 

顯示:
© 2014 Microsoft