<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于Qt的嵌入式媒體播放器系統(tǒng)的設計

          基于Qt的嵌入式媒體播放器系統(tǒng)的設計

          作者: 時間:2009-04-22 來源:網絡 收藏

          1引言

          本文引用地址:http://www.ex-cimer.com/article/152530.htm

          隨著用戶要求的不斷提高,越來越多的設備使用功能強大、價格低廉的Linux作為操作并開始采用較為復雜的圖形用戶界面。以其強大的功能、良好的可移植性逐漸成為一種被廣泛使用的GUI。正是由于操作及其相應圖形用戶界面的不斷發(fā)展,嵌入式軟件的開發(fā)顯得越來越重要。其中嵌入式由于能夠滿足人們的視聽享受已經逐漸成為了系統(tǒng)中不可或缺的重要組成部分,在嵌入式系統(tǒng)上開發(fā)已經成為了一個技術熱點,當前許多嵌入式產品中都包含。因此在的嵌入式系統(tǒng)中實現媒體播放器具有深刻的意義和實用價值。

          2 嵌入式媒體播放器系統(tǒng)

          2.1架構

          嵌入式媒體播放器架構方案如圖1所示。通過使用純C++語言開發(fā)來支持系統(tǒng),采用/Embedded作為GUI來提供強大的用戶界面,實現一個開放式的插件接口來增強擴展性,利用內核幀緩沖來輸出,消除對特定架構的依賴,從而保證可移植性。媒體播放器屬于上層應用程序,位于Linux用戶空間。這樣設計的目的是為了系統(tǒng)移植性。

          圖形用戶界面窗口以Qt/Embedded為基礎開發(fā),通過調用Qt/Embedded提供的類庫根據需要設計可以管理多媒體文件的基本窗口,包括打開、刪除、顯示文件長度、顯示播放時間等窗口,以及為方便用戶設定的管理播放列表、進行播放控制的窗口,這些都是直接和用戶打交道的。由于采用了Qt/Embedded作為GUI,移植性可以得到保證。

          文件輸入主要是對用戶指定的文件進行讀取和解析,將獲得的文件長度、播放時間、編碼格式、音視頻幀率、文件標題等內容,結合MIME的處理,顯示在預先設計的窗口中。

          插件接口調用主要是把所有對的操作整合到一個統(tǒng)一的開放式接口當中,根據上一部分解析出的文件信息去查找相應的插件并調用,如果沒有找到可用的可以返回信息提醒用戶添加相應的插件。通過實現這樣一個接口可以使播放器的擴展性大大提高,因此本部分是媒體播放器的核心。

          文件解碼和輸出主要負責通過調用解碼器對音視頻數據流進行解碼,然后利用QT/Embedded可以直接操縱內核幀緩沖FrameBuffer的特性,將解碼之后的數據通過FrameBuffer直接送到輸出設備輸出,避免對DirectShow、OpenGL等特定架構的依賴,進一步增強可移植性。

          圖1 嵌入式媒體播放器的架構

          3 插件接口模塊和解碼庫模塊

          3.1插件接口模塊設計

          插件接口模塊是整個播放器的核心部分,它封裝了對具體解碼器的操作,從而在輸入和輸出模塊之間搭起一座橋梁,確保數據的正常流動。插件接口模塊主要提供了以下方法來控制解碼器:

          1)文件支持性函數 bool isFileSupported(const QStringfilename);

          通過檢查文件的擴展名來確定待播放的文件是否被播放器支持,若是返回真,否則返回假??勺R別的擴展名有asf、avi、dat、mp2、mp3、mpeg、mpg、ogg、wav等。如果添加了新的解碼器插件以后可以識別新的文件格式,只需要將其擴展名添加到此函數的支持列表中

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();