您的位置:首頁 > 軟件教程 > 教程 > Windows系統(tǒng)媒體交互控制中心介紹及使用方法

Windows系統(tǒng)媒體交互控制中心介紹及使用方法

來源:好特整理 | 時間:2024-07-02 15:31:49 | 閱讀:149 |  標(biāo)簽: T Net 控制 S C in windows 媒體 app   | 分享到:

當(dāng)你使用Edge等瀏覽器或系統(tǒng)軟件播放媒體時,Windows控制中心就會出現(xiàn)相應(yīng)的媒體信息以及控制播放的功能,如圖。 SMTC (SystemMediaTransportControls) 是一個Windows App SDK (舊為UWP) 中提供的一個API,用于與系統(tǒng)媒體交互。接入SMTC的好

當(dāng)你使用Edge等瀏覽器或系統(tǒng)軟件播放媒體時,Windows控制中心就會出現(xiàn)相應(yīng)的媒體信息以及控制播放的功能,如圖。

Windows系統(tǒng)媒體交互控制中心介紹及使用方法

SMTC (SystemMediaTransportControls) 是一個Windows App SDK (舊為UWP) 中提供的一個API,用于與系統(tǒng)媒體交互。接入SMTC的好處在于,將媒體控制和媒體信息共享給系統(tǒng),使用通用的特性(例如接受鍵盤快捷鍵的播放暫停、接受藍(lán)牙設(shè)備的控制),便于與其它支持SMTC的應(yīng)用交互等。

在UWP App中使用它很簡單,只需要調(diào)用SystemMediaTransportControls.GetForCurrentView()方法即可,但是該方法僅限在有效的UWP App中調(diào)用,否則將拋出“Invalid window handle”異常。實際上,在官方文檔中提到所有XXXForCurrentView方法均不適用于UWP App以外的程序調(diào)用。

這些 XxxForCurrentView 方法對 ApplicationView 類型具有隱式依賴關(guān)系,桌面應(yīng)用不支持該類型。由于桌面應(yīng)用不支持 ApplicationView,因此也不支持任何 XxxForCurrentView 方法。

此外官方文檔還給出一個可替代的接口ISystemMediaTransportControlsInterop,然而這個接口在給的SDK中有保護(hù)性,無法訪問。

至此,直接創(chuàng)建SMTC的方法走不通。但是我發(fā)現(xiàn)一個奇怪的地方,UWP提供的在Windows.Media.Playback命名空間下的MediaPlayer可以和SMTC自動集成,并且可以通過SystemMediaTransportControls屬性直接拿到SMTC對象。MediaPlayer內(nèi)部通過某種COM組件直接創(chuàng)建了該NativeObject,而沒有走API提供的GetForCurrentView或FromAbi方法。也就是說,SMTC組件其實不需要使用合法的UWP Window句柄來創(chuàng)建,只不過可能為了某些特性而加上了該限制(后文將提到)。幸運的是,MediaPlayer幫我們繞過了這點。

下文講解手動與SMTC交互而不是直接使用MediaPlayer進(jìn)行播放,你的項目可能已經(jīng)有了其它的解碼器(如WPF版本的MediaPlayer、Bass.Net解碼器、NAudio等),則只需要將交互部分接入SMTC而不更換解碼器。

文末提供了我封裝好的SMTCCreator和SMTCListener,可以直接使用。

一、引用WinRT API到項目

最便捷的方法是直接修改目標(biāo)框架到win10,這樣就能自動引入WinRT API:

或者一些其他的方法,可以參考這篇博客: 如何在WPF中調(diào)用Windows 10/11 API(UWP/WinRT) - zhaotianff - 博客園 (cnblogs.com)

二、通過MediaPlayer獲取SMTC對象

拿到SMTC對象之后的操作與UWP中無異,這里簡單看一下:

1.設(shè)置可交互性

2.設(shè)置媒體信息

播放狀態(tài)需要單獨設(shè)置:

3.響應(yīng)SMTC交互

注意,文中所有SMTC的事件均由系統(tǒng)觸發(fā),意味著非同一線程,需要用Dispatcher來操作UI

三、獲取和控制系統(tǒng)媒體

好消息是,負(fù)責(zé)這部分的模塊GlobalSystemMediaTransportControlsSession公開可以任意使用,不受UWP平臺限制。

1.獲取媒體信息

2.控制媒體播放

直接調(diào)用即可

四、一些奇怪的地方

1.無法顯示媒體來源,并且不會清空上一個來源的信息

可能是因為沒有提供合法的UWP句柄,Windows雖然能確定是哪個exe調(diào)用的SMTC,但是拒絕直接顯示exe的信息。邏輯上來說這個來源信息會被空覆蓋掉,但是并沒有。

Windows系統(tǒng)媒體交互控制中心介紹及使用方法

2.信息更新不一致和延時

Windows系統(tǒng)媒體交互控制中心介紹及使用方法

系統(tǒng)顯示的會話以及提供GlobalSMTCSessionMng.獲取的信息有時會不一致,二者都有可能和應(yīng)用真實在播放的不一致,后者獲取的封面圖有時也會不一致。此外,MusicProperty的更新有時并不會實時反饋到GlobalSMTCSession的Changed事件,我測試的時候當(dāng)系統(tǒng)內(nèi)存爆滿(98% 我開了一堆瀏覽器標(biāo)簽頁和4個vs)的時候,更新丟失的概率在70%左右,而資源充足時可以做到幾乎即時更新。

3.暫未實現(xiàn)點擊跳轉(zhuǎn)到App

正統(tǒng)UWP App的SMTC會話是可以點擊跳轉(zhuǎn)到App播放界面的,但是我并沒有找到相關(guān)的事件。

4.奇怪的MediaId

Windows系統(tǒng)似乎通過這個來區(qū)分不同的媒體來源(明明可以獲得調(diào)用者- -),神奇的是如果你為兩個應(yīng)用設(shè)置了同樣的MediaId,那么只有兩個都關(guān)閉時,SMTC會話才會釋放。此外通過GlobalSMTCSession.SourceAppUserModelId并不能獲得你設(shè)置的MediaId,而是調(diào)用者的文件名"xxx.exe"。

五、使用我封裝的庫

Demo和庫已經(jīng)開源: TwilightLemon/MediaTest: .NET 8 WPF using SMTC (github.com)

簡單地將現(xiàn)有的解碼器接入SMTC:

簡單地控制系統(tǒng)媒體:

六、寫在最后

參考資料:

1) SystemMediaTransportControls 類 (Windows.Media) - Windows UWP applications | Microsoft Learn

2) 桌面應(yīng)用中不支持 Windows 運行時 API - Windows 應(yīng)用 |Microsoft學(xué)習(xí) --- Windows Runtime APIs not supported in desktop apps - Windows apps | Microsoft Learn

3) GlobalSystemMediaTransportControlsSessionManager Class (Windows.Media.Control) - Windows UWP applications | Microsoft Learn

打個小廣告,我的頂部欄項目正在開發(fā)中,現(xiàn)已集成SMTC和眾多小功能,歡迎支持: TwilightLemon/MyToolBar: 為Surface Pro而生的頂部工具欄 支持觸控和筆快捷方式 (github.com)

Windows系統(tǒng)媒體交互控制中心介紹及使用方法

全局媒體播放控制:

Windows系統(tǒng)媒體交互控制中心介紹及使用方法

未來將支持更多插件:

Windows系統(tǒng)媒體交互控制中心介紹及使用方法 Windows系統(tǒng)媒體交互控制中心介紹及使用方法

Windows系統(tǒng)媒體交互控制中心介紹及使用方法

本作品采用 知識共享署名-非商業(yè)性使用-相同方式共享 4.0 國際許可協(xié)議 進(jìn)行許可。歡迎轉(zhuǎn)載、使用、重新發(fā)布,但務(wù)必保留文章署名TwilightLemon,不得用于商業(yè)目的,基于本文修改后的作品務(wù)必以相同的許可發(fā)布。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點或證實其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)