閱讀279 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Phonon淺談

Qt 使用 Phonon 這個多媒體框架來提供播放常見多媒體格式文件的功能,其中媒體文件可以是本地文件或者通過 QURL 指向的網絡流文件。

在下麵的概覽中,會涉及到 Phonon 的主要概念、內部機製、核心 API 類以及如何使用這些 API 類。

 

【內部機製】

Phonon 有三個基本概念:媒體對象、接收端和路徑。一個媒體對象管理一個媒體源,比如一個音樂文件;它提供了簡單的播放控製,比如開始、停止和暫停播放。一個接收端輸出來自 Phonon 的媒體,比如,通過提供錄像到一個窗口,或者通過提供聲音到一個聲卡上。路徑是用來連接 Phonon 對象的,比如,一個媒體對象和一個接收端,從而構成了 Phonon 中的 media graph ,如下:

 


phonon1

上圖中,音樂的播放是由 media object 啟動和管理的,並且 media object 把媒體流發送給通過路徑( path )連接到它的接收端( sink ),繼而接收端( sink )通過聲卡播放媒體流。

 

Media Objects 媒體對象】

媒體對象,作為 MediaObject 類的實例,讓使用者可以開始、暫停和停止一個媒體流文件的播放,也就是說它提供了對於媒體播放的基本控製,可以假想其為一個簡單的媒體播放器。

媒體數據是由一個媒體源提供的,而媒體源是由媒體對象來保持的。媒體源是 MediaSource 的一個實例,在 Phonon 中是一個單獨的對象。它為媒體對象提供原始數據,這些數據可以來自本地文件或者網絡流。源的內容將會被媒體對象所解釋。

一個媒體對象通常是使用默認構造函數進行實例化並為其提供一個媒體源。具體的代碼將會在後麵給出。

作為對媒體對象的補充, Phonon 還提供了 MediaController ,它管理一個媒體文件可選的特征,比如 DVD 中的章節、菜單和標題等信息。

 

Sink 接收端】

Sink 就是一個虛擬的音像設備,將視頻或者聲音發送到物理視頻設備或物理音頻設備。它對媒體處理方麵有著基本控製,比如,控製音量或者靜音,又比如,改變亮度、色調或者縮放比例。

一個示例可見下圖:


phonon2

上圖是一個有聲視頻 avi 文件的播放機製圖。媒體源 DieHard.avi MediaObject 進行管理,而 MediaObject 與兩個 Sink 通過 Path 連接,一個是 Audio Sink ,管理著聲音播放,另一個是 Video Sink ,管理著視頻播放。最終都是由 Sink 將媒體數據傳送給物理設備。

 

Processors 處理機】

Phonon 不允許對媒體流的直接操作,但是可以使用 processors 來做這項工作。它位於某條路徑上,作用是轉換該路徑上的音頻流。

 

最後更新:2017-04-02 04:01:46

  上一篇:go 設計模式之責任鏈模式
  下一篇:go WI-FI