国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

深度解析基于Qt嵌入式媒體播放器系統設計

移動開發
基于Qt嵌入式媒體播放器系統設計是本文要介紹的內容,文章中很詳細的闡述了QT中播放器的應用,具體內容來看本文詳解。

基于Qt嵌入式媒體播放器系統設計是本文要介紹的內容,主要是來了解并學習QT中播放器的應用及操作,文章中很詳細的闡述了QT播放器的應用,具體內容來看本文詳解。

隨著用戶要求的不斷提高,越來越多的嵌入式設備使用功能強大、價格低廉的嵌入式Linux作為操作系統并開始采用較為復雜的圖形用戶界面。Qt以其強大的功能、良好的可移植性逐漸成為一種被廣泛使用的GUI系統。

正是由于嵌入式操作系統及其相應圖形用戶界面的不斷發展,嵌入式軟件的開發顯得越來越重要。其中嵌入式媒體播放器由于能夠滿足人們的視聽享受已經逐漸成為了系統中不可或缺的重要組成部分,在嵌入式系統上開發媒體播放器已經成為了一個技術熱點,當前許多嵌入式產品中都包含媒體播放器。因此在基于Qt的嵌入式系統中實現媒體播放器具有深刻的意義和實用價值。

2嵌入式媒體播放器系統設計

2.1架構設計

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

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

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

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

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

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

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

3.1插件接口模塊設計

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

1)文件支持性函數boolisFileSupported(constQString&filename);

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

2)獲取文件信息函數constQString&fileInfo();

用于獲得文件的各種信息并將結果保存在一個常量字符串中,便于其他函數調用。這些信息包括:播放時間、音頻格式、音頻比特率、音頻通道、音頻頻率、視頻格式、視頻比特率、視頻高度、視頻寬度等。

3)讀取音頻采樣函數

  1. boolaudioReadSamples(short*output,intchannels,longsamples,long&samplesRead,int); 

調用解碼器對音頻采樣數據進行讀取,是音頻數據處理的核心部分。output表示待輸出文件指針,channels表示通道數,samples表示采樣數,samplesRead表示待讀取采樣數

4)讀取視頻幀函數

  1. boolvideoReadScaledFrame(unsignedchar**output_rows,int,int,intin_w,intin_h,intout_w,intout_h,ColorFormatfmt,int); 

調用解碼器對視頻幀進行讀取,是視頻數據處理的核心部分。參數output_rows表示輸出列地址的指針,in_w、in_h、out_w、out_h分別表示輸入和輸出幀數據的寬度和高度,fmt表示采用的色彩模式,返回值用來判斷執行是否成功。

5)音視頻同步函數定義:intSync(File*fp,intauIndex,structtimeval*vtime);

fp為打開的多媒體文件指針,vtime為當前正在播放的視頻文件的幀頭中提取的時間,auIndex指出當前的音頻幀計數,即當前播放到了第幾幀。通過這些參數就可以計算出希望跳到的幀數和當前幀數的差值,然后根據這個差值將音頻流向前(滯后)或向后(超前)跳即可。同時Sync函數還會將此差值int反饋給音頻解碼器,讓音頻解碼器修正數據流的時間戳,如此循環,從而達到較好的音視頻同步效果。此函數的總體思想是在播放視頻數據流的同時啟動另一線程,打開對應的音頻數據流播放,然后在視頻線程中來同步音頻數據。

此外還有插件初始化和注冊函數voidpluginInit()、文件初始化函數voidfileInit()、查找函數boolseek(longpos)、清空視頻數據函數flushVideoPackets()和清空音頻數據函數flushAudioPackets()、獲取下一數據包函數MediaPacket*getAnotherPacket(intstream)等,不再做詳細介紹。

3.2解碼庫模塊

解碼庫模塊的主要作用是為插件接口模塊提供解碼器,考慮到播放器的可移植性和可擴展性,本系統采用了ffmpeg解碼庫。FFmpeg解碼庫是Linux下的一個開源解碼器集合,它支持多種音頻和視頻編解碼標準,還支持轉文件格式、制作avi等,功能十分強大。可以在windows下使用的ffshow插件,linux下的mplayer播放器都是使用的ffmpeg解碼庫。

解碼庫又包含解碼器和分離器。解碼器就是對音視頻數據流進行解碼的組件,分離器就是把文件流中的數據分離為音頻數據流和視頻數據流的組件,音頻數據和視頻數據是分開解碼的,所以二者缺一不可。

3嵌入式媒體播放器系統實現

3.1數據流程總體設計

圖2為系統數據流程:首先輸入模塊從數據源(多媒體文件)讀入數據,此時它將讀入文件頭,做一些基本的處理,如讀出文件長度,獲取此文件的編碼類型、比特率,判斷能否播放等;然后插件接口模塊會調用分離器插件將多媒體數據切分為視頻數據流和音頻數據流;再經過視頻FIFO和音頻FIFO,排序處理;最后送入視、音頻解碼器調用相應的解碼器進行解碼,對于音頻數據就會進行重采樣,對于視頻數據就會讀取相應的幀,逐幀解碼;之后經過采樣的音頻數據和經過渲染覆蓋的視頻數據先進行音視頻同步,再分別通過視、音頻輸出模塊輸出。這其中,數據的讀入、分離、解碼、輸出都是通過Qt提供的類庫以多線程同時進行的,在解碼得同時程序也在不斷將數據讀入緩沖區并排序等待處理,以提高效率。

輸入模塊的主要功能是將用戶指定的多媒體文件讀入。由于不同格式的多媒體文件需要調用不同的解碼器才能正常打開,因此考慮到程序的模塊化將實際的文件打開工作交給插件接口模塊調用相應的解碼器進行,輸入模塊只對文件進行一些基本的處理并對文件內容進行緩存,然后為插件接口模塊輸送原始數據流。用戶首先通過圖形用戶界面選定待播放文件發出打開指令,這將會使輸入模塊接收到一個信號并通過用戶界面傳回的信息獲得待播放文件的文件路徑和文件名。接下來輸入模塊會檢查文件路徑是否合法、文件是否為空,之后會向插件接口模塊發出信號,通知插件接口模塊查找可用的解碼器,為文件解碼做好準備。下一步就是進行調用播放初始化函數init(),其具體過程下面會詳細介紹,最后就是將工作移交給插件接口模塊,讓它調用對應文件格式的解碼器的open()函數。

輸出模塊的主要功能是將通過解碼器解碼之后的音頻、視頻數據送到輸出設備(如LCD顯示屏、揚聲器)輸出。根據輸出內容的不同可以將輸出模塊劃分為音頻輸出和視頻輸出兩個子部分。這兩個部分基本上是相互獨立輸出的,通過插件接口模塊的同步控制讓它們在輸出時保持同步。視頻輸出和音頻輸出稍有不同,它利用Qt/Embedded可以直接控制FrameBuffer的特性來輸出視頻數據。幀緩沖區是顯卡上的內存,使用幀緩沖區可以提高繪圖的速度和整體性能,與幀緩沖區有關的設備是/dev/fb0(主設備號29,次設備號0)。

圖2系統數據流程

4.2嵌入式音視頻同步設計

本方法的基本思想是以視頻流為主媒體流,音頻流為從媒體流,視頻的播放速率保持不變,根據本地系統時鐘確定的實際顯示時間,通過調整音頻播放速度來達到音視頻同步。整個系統的音視頻同步數據流程見圖3。首先選擇一個本地系統時鐘參考(LSCR),要求本地系統時鐘參考上的時間是線性遞增的。然后將LSCR分送到視頻解碼器和音頻解碼器,由這兩個解碼器根據各幀的PTS值對照本地系統時鐘參考產生各幀準確的顯示或回放的時間。也就是說,生成輸出數據流時依據本地參考時鐘上的時間給每個數據塊都打上時間戳(一般包括開始時間和結束時間)。在播放時,讀取數據塊上的時間戳,同時根據本地系統時鐘參考上的時間來安排播放。

圖3音視頻同步數據流程

基于時間戳的播放過程中,僅僅對早到的或晚到的數據塊進行等待或快速處理,往往是不夠的。如果想要更加主動并且有效地調節播放性能,就需要引入反饋機制,也就是通過對比音視頻的時間戳將當前數據流的播放狀態反饋給上層的“源”。如果音頻流滯后,就即時通知音頻解碼器加快音頻流輸出,但是如果滯后太多,則直接將當前數據丟棄,直接跳到下一幀;如果視頻流滯后,就通知音頻解碼器減慢音頻輸出速度等待視頻流,如滯后太多也直接進行跳幀。數據流首先通過分離器分解為視頻數據流和音頻數據流,然后經過對應的解碼器,同時由本地系統時鐘來進行時間戳控制;獲得準確顯示或回放時間以后進行時間戳比較;若同步則直接輸出,不同步則進行音頻跳幀或等待,直到同步后輸出。

本文的創新點是系統具有很好的可移植性,它的實現過程以及核心的代碼對類似應用具有很好的可重用性,只需通過較小的修改就能移植到不同的操作系統和平臺上,可以廣泛使用在各種嵌入式系統中,如PDA,智能手機等方面,具有較高的經濟價值,同時也可以為開發其他嵌入式系統軟件提供參考意見;其次,本文圍繞用戶的基本需求,提出了一個基于嵌入式Linux操作系統和圖形用戶界面QT/Embedded的媒體播放器設計方案。

該設計方案具有低耦合、高內聚、可擴展、可移植等良好特點,并在設計的基礎上將該方案實現。該媒體播放器支持編碼格式為MPEG-1、MPEG-2和MPEG-4的多媒體文件。同時具有存儲空間小,響應速度快的性能特點,并支持播放控制、播放列表等功能,可自由切換中英文雙語界面,用戶可以選擇打開任意位置的文件。

小結:深度解析基于Qt嵌入式媒體播放器系統設計的內容介紹完了,希望通過QT播放器的內容的學習能對你有所幫助。

責任編輯:zhaolei 來源: 微計算機信息
相關推薦

2011-09-06 11:08:21

QT播放器Mplayer

2011-09-06 10:46:19

QT播放器

2011-06-09 10:28:54

QT 嵌入式

2011-06-24 10:21:11

Qt phonon 多媒體

2010-01-25 09:43:02

Chrome OS媒體播放器

2023-08-26 19:07:40

VLC旋轉視頻

2021-02-24 14:04:23

Linux媒體播放器桌面

2015-10-19 17:28:00

MPlayer媒體播放器開源

2011-07-26 09:16:16

Windows媒體播放器

2011-01-06 15:11:09

嵌入式linux

2011-08-29 10:59:47

QtWebkit嵌入式

2010-03-04 09:34:35

Ubuntu Oper

2011-06-13 09:33:04

2022-12-13 07:27:22

Windows微軟

2011-08-05 09:11:56

2009-05-27 19:28:20

Linux磁場設計

2011-06-27 11:23:21

Qt 音樂播放器

2021-09-30 05:34:21

Windows 11操作系統微軟

2023-03-06 16:20:08

視頻播放器VLC

2011-07-05 15:42:02

QT 嵌入式 Embedded
點贊
收藏

51CTO技術棧公眾號

国产高清不卡| 欧美亚洲综合在线| 97色伦图片97色伦在线电影| 亚洲欧洲一区二区在线播放| 小h片在线观看| 亚洲综合社区网| 亚洲国产裸拍裸体视频在线观看乱了| 欧美视频精品全部免费观看| 国产中文字幕视频在线观看| 欧美一级夜夜爽| 模特精品在线| 羞羞在线视频| 亚洲欧美变态国产另类| 国产一区在线不卡| 成人18视频在线观看| 欧美一级爱爱视频| 亚洲小视频在线| 男女男精品视频| 日本无删减在线| 欧洲成人免费aa| 一区二区三区在线免费播放| 国产91精品对白在线播放| 人人澡人一摸人人添| 久热精品视频在线| 91久久精品国产91性色tv | 国产精品亚洲综合一区在线观看| 欧美一区二区三区艳史| 日本一区二区在线不卡| 国产精品久久天天影视| 黄色av免费在线| 特级西西444| 国产日韩欧美高清| 最新亚洲精品| 国际av在线| 亚洲欧美日韩另类精品一区二区三区| 精品少妇一区二区三区在线播放 | 亚洲十八**毛片| 青青在线视频观看| 成人美女免费网站视频| 亚洲人在线视频| 婷婷久久综合九色国产成人| 国产乱码精品一区二区三区忘忧草| 免费a级毛片在线播放| 久久综合九色综合88i| 亚洲综合精品伊人久久| 亚洲网站视频福利| 欧美视频在线观看免费| 精品一二三四区| 四虎5151久久欧美毛片| 午夜刺激在线| 日韩欧美99| 亚洲美女毛片| bbw在线视频| 国产日韩欧美高清| 欧美女v视频| 欧美精品欧美精品| 日韩三级视频中文字幕| 国产一本一道久久香蕉| 国产精品中文字幕亚洲欧美| av软件在线观看| 欧美黑人在线观看| 91久久精品国产91性色| 日韩在线精品一区| 午夜精品久久久| 国产福利一区二区三区视频| 红桃成人av在线播放| 99久久精品一区二区成人| 国产青青草在线| 大香一本蕉伊线亚洲网| 精品91免费| 日本精品久久久久久久| 亚洲欧美一区二区三区久久| 天天av天天翘天天综合网色鬼国产 | xx欧美视频| 欧美激情黑人| 黄动漫在线看| 天天爱天天操天天干| 亚洲 中文字幕 日韩 无码| 欧美老肥婆性猛交视频| 精品亚洲一区二区三区在线播放| 亚洲精品国产精品国自产在线| 久久久成人精品视频| 日韩欧美视频一区二区三区| 四虎成人精品永久免费av九九| 男女污污的视频| 国产精品欧美久久| 国产欧美va欧美va香蕉在线| 久久久欧美一区二区| 91精品国产高清一区二区三区| 日本高清不卡在线观看| 欧美日韩极品在线观看一区| 欧美色图第一页| 日韩精品中午字幕| 日韩av影院在线观看| 日韩精品一区二区三区四区视频 | 欧美丝袜自拍制服另类| 亚洲欧美色图小说| 亚洲人成影院在线观看| 久久精品人人做人人爽人人 | 污污片在线免费视频| 欧美精品日韩少妇| 色视频在线看| 在线观看免费网站黄| 麻豆最新免费在线视频| 欧美精品a∨在线观看不卡 | 成人国产精品久久久| 成人在线国产精品| 91久久精品www人人做人人爽| 国产欧美日韩在线播放| 天天久久人人| 国产视频三区| 婷婷色在线资源| 伊人久久影院| 天堂91在线| 国产无遮挡又黄又爽免费网站| 黄色免费看片| 人狥杂交一区欧美二区| 欧美激情三级| 久久亚洲图片| 亚洲男人的天堂av| 亚洲老头老太hd| 国产精品青草久久久久福利99| 亚洲国产欧美不卡在线观看| 天天插天天操天天射| 久草中文在线| 九九热hot精品视频在线播放| 亚洲二区视频| 日韩毛片视频在线看| 精品少妇一区二区三区在线视频| 国内外成人免费激情在线视频网站| 国产私拍一区| 羞羞在线视频| 在线天堂新版最新版在线8| 91久久久精品国产| 国产日韩欧美综合一区| 91精品国产麻豆国产自产在线 | 色噜噜狠狠成人中文综合| 欧美国产中文字幕| 中文有码久久| 免费黄视频网站| 欧美日韩大片| 首页欧美精品中文字幕| 欧美性xxxxxxx| 国产成人av在线| 中文字幕一区二区三区四区在线视频| 免费在线播放电影| 2020中文字幕在线播放| av电影院在线看| 羞羞答答国产精品www一本 | 亚洲视屏一区| 欧美精品日韩精品| 91久色国产| 91精彩在线视频| 在线国产日韩| 日韩一卡二卡三卡四卡| 欧美区高清在线| 在线播放高清视频www| 国产一二三精品| 亚洲视频国产视频| 国产青草视频在线观看| 国产乱子精品一区二区在线观看| caoporn国产精品| 国产精品第一页在线| julia中文字幕久久亚洲蜜臀| jlzzjlzz亚洲女人| 欧美三区在线观看| 色一情一乱一伦一区二区三欧美| 中文字幕人成乱码在线观看| 国产69精品久久777的优势| 久久久免费高清电视剧观看| 欧美激情图区| 久久精品亚洲| 国产一区二区三区在线播放免费观看 | 成人午夜亚洲| 亚洲精品亚洲人成人网在线播放| 91久久精品久久国产性色也91| 黄色在线观看网站| 国产精品亚洲第一区在线暖暖韩国| 国产一区二区毛片| 欧美一区视频在线| 福利视频一区| 国产亚洲视频在线观看| 国产精品一区二区三区视频网站| 亚洲国产精品久久人人爱| 影音先锋导航| 亚洲成人动漫av| 国产午夜精品一区理论片| 在线一区二区视频| 欧美成人三区| 亚洲乱码国产乱码精品精| caoprom在线| 国产一区二区三区毛片| www.久久爱.com| 国产成人91久久精品| 91精品国产91久久久久久黑人| 国产区欧美区日韩区| 网友自拍一区| 国产精品视频网| 2023国产精品久久久精品双| 成人av电影天堂|