




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1 題 目: 基于 linux 的嵌入式流媒體點播系統(tǒng) 學(xué) 號: 20090902320123 系 別: 應(yīng)用計算機(jī)系 專 業(yè): 網(wǎng)絡(luò)工程 指導(dǎo)教師: 胡祝華 摘 要 隨著嵌入式系統(tǒng)以及計算機(jī)網(wǎng)絡(luò)通信技術(shù)、多媒體應(yīng)用程序的快速發(fā)展,基于嵌入式 linux 的家庭娛樂中心、視頻點播和實時會議系統(tǒng)已經(jīng)成為一個開發(fā)的熱點。這種系統(tǒng)因其體 積小、功耗低、使用方便而廣受青睞。 論文主要做了 uboot 移植、 kernel 移植、以及播放器主界面設(shè)計的工作。內(nèi)核采用 linux-,針對 mini2440 開發(fā)板對內(nèi)核做了板級的定制。使用 Qt 設(shè)計了播放器主界面。 論文介紹了 RTSP 流媒體協(xié)議的體系結(jié)構(gòu)和工作原理。把流媒體視頻點播相關(guān)技術(shù)應(yīng)用到嵌入式系統(tǒng)中,在嵌入式 S3C2440 硬件平臺和 Linux 操作系統(tǒng)上開發(fā)實現(xiàn)一個 VOD 系統(tǒng)。該視頻點播系統(tǒng)提供了美觀、友好的 TQ圖形用戶界面,可以進(jìn)行本地播放和網(wǎng)絡(luò)播放,實現(xiàn)了視頻點播的基本功能。 關(guān)鍵 字:嵌入式系統(tǒng);實時流傳輸協(xié)議;流媒體;視頻點播 2 ABSTRACT With the embedded system and computer network communication technology, the rapid development of multimedia applications, home entertainment center, video on demand based on embedded Linux and real-time conference system development has become a hot spot. This system because of its small volume, low power consumption, easy to use and popular. Thesis mainly do the uboot, the transplantation of the kernel, and players main interface design work. The kernel of Linux - used against mini2440 development threatening the custom kernel did the board level. Based on the Qt player main interface is designed. Paper introduces the system structure and working principle of RTSP streaming protocols. The streaming video on demand technology applied to embedded systems, on S3C2440 embedded hardware platform and the Linux operating system development and implementation of a VOD system. The video on demand system provides the TQ is beautiful, friendly graphical user interface, can undertake local broadcast and Internet broadcast, has realized the basic function of video on demand. KEY WORDS: Embedded system; Real Time Streaming Protocol; Stream media; Video on Demand 3 目錄 1 緒論 . 1 1.1 嵌入式 Linux流媒體點播的應(yīng)用背景 . 1 1.2 研究意義 . 1 2 流媒體 相關(guān)技術(shù)介紹 . 2 2.1 VOD介紹 . 2 2.2技術(shù)介紹 . 2 2.2.1 AVI . 2 2.2.2 MPEG-4 . 3 2.3 流傳輸技術(shù) . 3 2.3.1 流媒體技術(shù)和流式傳輸方式 . 3 2.4 實時流媒體傳輸協(xié)議介紹 . 4 2.4.1 RTSP . 4 2.5 交叉編譯 . 5 3 系統(tǒng)的需求說明 . 7 3.1多媒體點播系統(tǒng)功能需求 . 7 4 系統(tǒng)的總體設(shè)計 . 8 4.1 系統(tǒng)總體劃分 . 8 4.2實現(xiàn)模式: C/S模型 . 9 5 系統(tǒng)的詳細(xì)設(shè)計及實現(xiàn) . 11 5.1 嵌入式系統(tǒng)開發(fā)環(huán)境的搭建 . 11 5.1.1 建立工作目錄 . 11 5.1.2 建立交叉編譯環(huán)境 . 11 5.2 嵌入式 linux 的 uboot移植 . 12 5.2.1 bootloader介紹 . 12 5.2.2 在嵌入式 Linux 中 BootLoader 的重要性 . 13 5.2.3 u-boot引導(dǎo)流程 . 13 5.2.4 u-boot移植步驟 . 14 5.2.5 建立開發(fā)板文件并測試編譯環(huán)境 . 15 5.2.6 在 /board 中建立 mini2440 目錄和文件 . 15 5.2.7 在 include/configs/中建立開發(fā)板配置文件 . 15 4 5.3 linux內(nèi)核配置與編譯 . 16 5.3.1 內(nèi)核簡介 . 16 5.3.2 建立目標(biāo)平臺 . 17 5.3.3 移植 Nand 驅(qū)動并修改分區(qū)信息 . 18 5.3.4 為內(nèi)核打補(bǔ)丁支持 yaffs2 . 19 5.3.5 移植 DM9000 網(wǎng)卡驅(qū)動 . 19 5.3.6 移植 LCD 顯示驅(qū)動 . 20 5.3.7 添加觸摸屏驅(qū)動 . 21 5.3.8 移植 SD 卡驅(qū)動 . 22 5.4流媒體播放器設(shè)計 . 23 5.4.1 播放器主界面工作流程 . 23 5.4.2 播放 解碼處理 . 24 5.4.3 播放器主界面設(shè)計 . 24 6 系統(tǒng)的集成與調(diào)試 . 30 6.1系統(tǒng)集成 . 30 6.2 系統(tǒng)播放 . 30 7總結(jié) . 32 致謝 . 33 參考 文獻(xiàn) . 34 5 1 1 緒論 1.1 嵌入式 Linux流媒體點播的應(yīng)用背景 隨著多媒體計算機(jī)技術(shù)、移動通信技術(shù)的快速發(fā)展以及便攜式移動終端設(shè)備的普及,使嵌入式開發(fā)得到了快速發(fā)展。在現(xiàn)代計算機(jī)網(wǎng)絡(luò)技術(shù)快速發(fā)展的基礎(chǔ)上,多媒體計算機(jī)技術(shù)和多媒體網(wǎng)絡(luò)技術(shù)越來越廣泛地應(yīng)用到視頻點播系統(tǒng)。在遠(yuǎn)程醫(yī)療,酒店 VOD,遠(yuǎn)程實時視頻會議上得到了越來越廣泛的應(yīng)用,并且智能化成為其發(fā)展一大趨勢。 1.2 研究意義 在這個信息化的時代,嵌入視頻 VOD系統(tǒng)正在融入人們的生活,比如 KTV點播系統(tǒng)、智能電視等等,這些都使人們能更加高效便捷的享受信息資源,極大地方便了人們的生活,這使得嵌入式 VOD系統(tǒng)開發(fā)成為一個熱點。 嵌入式開發(fā)不同于傳統(tǒng)的有著豐富資源的 PC 開發(fā),嵌入式開發(fā)往往是基于受限的硬件資源,這在技術(shù)和實施難度上對嵌入式流媒體點播提出了更高的要求,成為研究嵌入式多媒體點播的難點。同時嵌入式技術(shù)發(fā)展迅速,隨著嵌入式產(chǎn)品快速地更新?lián)Q代,系統(tǒng)還要有良好的擴(kuò)展性。 2 2 流媒體相關(guān)技術(shù)介紹 2.1 VOD介紹 VOD 是 Video On Demand 的縮寫 。視頻點播是計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)、多媒體技術(shù)發(fā)展的產(chǎn)物 01?,F(xiàn)代社會中,高端嵌入式移動終端成為人們接受信息資源的便捷方式。視頻點播系統(tǒng)不僅可以為用戶提供豐富的網(wǎng)絡(luò)信息資源而且在遠(yuǎn)程教育、智能家電等領(lǐng)域得到越來越廣泛的應(yīng)用。 用戶可以按照自己的需求點播視頻,即播即放,并且可以實現(xiàn)暫停、快進(jìn)、后退等操作,這種系統(tǒng)播放等待時間小并且支持多種流媒體視頻格式。隨著智能家電、智能汽車的快速發(fā)展,嵌入式 VOD必將得到越來越廣泛的應(yīng)用。 2.2技術(shù)介紹 進(jìn)入信息時代,數(shù)字化后的視頻文件具有海量性,由于目前的網(wǎng) 絡(luò)帶寬有限,在網(wǎng)絡(luò)傳輸高清大視頻文件是一件很不容易的事,因為傳輸速度和視頻質(zhì)量很難滿足用戶的需求。所以要實現(xiàn)視頻點播的功能必須對這些要傳輸?shù)囊曨l數(shù)據(jù)進(jìn)行壓縮和解壓縮。隨著多媒體技術(shù)的不斷發(fā)展,多媒體數(shù)據(jù)的存儲與壓縮技術(shù)已經(jīng)相對比較成熟,例如 H.261,MPEG-4 等,其中 MPEG標(biāo)準(zhǔn)已經(jīng)從 MPEG-1、 MPEG-2 發(fā)展到了目前應(yīng)用比較廣泛的 MPEG-4 標(biāo)準(zhǔn) 02。 2.2.1 AVI AVI是將語音和影像同步組合在一起的文件格式,是微軟公司 1992 年推出的視頻格式,可以將視頻和音頻交織在一起進(jìn)行同 步播放。這種播放方式不僅可以提高系統(tǒng)的工作效率,同時也可以迅速地加載和啟動播放程序,減少播放 AVI視頻數(shù)據(jù)時的用戶等待時間。 AVI格式文件結(jié)構(gòu)由文件頭、索引塊和數(shù)據(jù)塊組成。AVI文件主要參數(shù)有影像參數(shù)、伴音參數(shù)和壓縮參數(shù)。影像參數(shù)的視窗大小和幀率可以根據(jù)播放環(huán)境的硬件能力和處理速度進(jìn)行調(diào)整,窗口越大視頻文件越大。WAV文件時 AVI文件中伴音信號來源,包括影像與伴音的交織參數(shù)和同步控制參 3 數(shù)。 AVI 支持 256 色和 RLE 壓縮, AVI 對視頻文件采用有損壓縮方式。這種視頻格式的優(yōu)點是可以跨多個平臺使用,其缺點是視頻文 件太大,目前是一種常用的視頻文件格式。 2.2.2 MPEG-4 MPEG-4是一種包含音頻和圖像的壓縮技術(shù),對圖像的壓縮算法提供的壓縮比可達(dá)到 200:1。 MPEG-4 在較高的壓縮比下也能獲得較高的圖像質(zhì)量,最大的特點是基于對象的編碼方式以及對合成對象的編碼能力。它支持固定和可變速率視頻編碼,具有高效的壓縮性,其編碼系統(tǒng)是開放的,隨時可以加入新的有效的算法模塊。 MPEG-4標(biāo)準(zhǔn)具有通用的訪問性,適用于無線和有線網(wǎng)絡(luò)以及固態(tài)存儲,支持各種帶寬的傳輸信道和接收端??梢岳煤苷膸捦ㄟ^幀的重建技術(shù)壓縮和傳輸數(shù) 據(jù),從而能以最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量。 MPEG-4 的可視信息的碼率范圍可從 5 64kbit/s 直至 64kbit/s-4Mbit/s,并且可以兼容 MPEG-1 和 MPEG-2 已經(jīng)提供的大多數(shù)功能 03。因此在 MPEG-4數(shù)字電視、動態(tài)圖像和移動通信等領(lǐng)域得到了普遍應(yīng)用。 2.3 流傳輸技術(shù) 2.3.1 流媒體技術(shù)和流式傳輸方式 流媒體是指使用流式傳輸?shù)姆绞皆诰W(wǎng)絡(luò)上傳輸?shù)拿襟w格式。流是對在網(wǎng)絡(luò)上所傳輸?shù)慕?jīng)過一定編碼的多媒體信息的一種描述 04。在進(jìn)行網(wǎng)絡(luò)播放時,等待時間和視頻質(zhì)量是用戶主要的 考慮因素。傳統(tǒng)視頻播放時必須整個視頻文件必須全部下載下來才能觀看,這會使得播放延時非常大。而現(xiàn)在很流行的嵌入式視頻點播系統(tǒng)可以實現(xiàn)即播即放,極大地減少了等待時間,并且在播放時用戶還可以進(jìn)行相關(guān)的交互式操作。這種觀看方式大大地滿足了用戶的需求。 流式傳輸有兩種方式:實時流式傳輸和順序流式傳輸。傳統(tǒng)的視頻播放中主要采用順序傳輸方式,使用這種方式用戶一般只能觀看自己已經(jīng)下載的視頻,缺乏靈活性。實時流傳輸允許用戶在進(jìn)行視頻觀看時進(jìn)行相關(guān)的交互式操作,支持 4 隨機(jī)訪問,比如前進(jìn)、后退等?,F(xiàn)對于傳統(tǒng)的順序傳輸方式視頻播放, 實時流傳輸更能滿足用戶需求,逐漸成為視頻點播的主流方式。 2.4 實時流媒體傳輸協(xié)議介紹 實時流媒體播放協(xié)議簇主要由 RTSP、 RTP 和 TRCP構(gòu)成,整個 RTSP 協(xié)議棧是建立在 TCP/IP協(xié)議棧之上的。其中 RTSP提供控制功能,如播放器客戶端播放、暫停、前進(jìn)等功能, RTP協(xié)議負(fù)責(zé)流媒體數(shù)據(jù)的實時傳輸, RTCP負(fù)責(zé)檢查反饋網(wǎng)絡(luò)狀況以進(jìn)行相應(yīng)的調(diào)整。協(xié)議簇的層次結(jié)構(gòu)如圖 2-1所示。 圖 2-1 RTSP協(xié) 議棧 2.4.1 RTSP RTSP協(xié)議屬于應(yīng)用層協(xié)議,是一個多媒體播放控制協(xié)議,以 C/S 方式工作。在用戶進(jìn)行視頻點播時,通過 rtsp 協(xié)議內(nèi)部定義的方法可以實現(xiàn)交互式操作,比如暫停、后退、前進(jìn)等。要實現(xiàn) RTSP 的視頻播放控制功能,不但要有協(xié)議還要有專門的客戶端播放程序和視頻服務(wù)器 05。 RTSP 在進(jìn)行控制信息交互式是保證交付質(zhì)量的 TCP 連接,但在進(jìn)行數(shù)據(jù)流傳輸時和反饋調(diào)整使用 UDP連接,會導(dǎo)致分組丟失。如圖 2-2所示。 RTSP 層 RTP /TRCP 層 UDP/TCP 層 IP 層 應(yīng)用層 網(wǎng)絡(luò)層 傳輸層 5 圖 2-2 基于 C/S模式的 RTSP RTP 協(xié)議( Real Time Protocol)提供實時的數(shù)據(jù)流傳輸。在數(shù)據(jù)包中封裝了發(fā)送數(shù)據(jù)的序列計數(shù)、標(biāo)識符和時間戳等信息。 RTP協(xié)議通常是用 UDP協(xié)議來封裝的,所以只提供實時的數(shù)據(jù)傳輸,但是不保證傳輸?shù)目煽啃?。所以視頻播放時會出現(xiàn)視頻模糊,視頻質(zhì)量不佳的現(xiàn)象。隨著視頻解壓縮技術(shù)和網(wǎng)絡(luò)帶寬的不斷提高,客戶端的視頻質(zhì)量會越來越好。 RTCP是 RTP的實時傳輸控制協(xié)議,它用于監(jiān)視網(wǎng)絡(luò)的服務(wù)質(zhì)量和在正在進(jìn)行的與會者會話中傳遞信息。通過質(zhì)量反饋來進(jìn)行流量的擁塞控制, 利用這些反饋信息進(jìn)行傳輸速度的相應(yīng)調(diào)整。 RTCP 是通過周期性地向會話的所有參加者進(jìn)行通信來實現(xiàn)這樣的功能的,根據(jù)會話者的數(shù)量來調(diào)整發(fā)包率。 2.5 交叉編譯 嵌入式開發(fā)一般是基于一個資源受限的系統(tǒng),直接在目標(biāo)板上進(jìn)行相關(guān)軟件的編寫不僅困難而且調(diào)試麻煩,一般的解決方案是利用交叉開發(fā)模型。即先在計算機(jī)上編寫源程序,然后通過編譯工具交叉編譯,生成可以在目標(biāo)平臺上運(yùn)行的二進(jìn)制代碼文件,下載到目標(biāo)平臺上的相應(yīng)位置 06。典型的嵌入式 Linux開發(fā)使用如圖所示的宿主機(jī) /目標(biāo)板開發(fā)模式。開發(fā)模型如圖 2-4所示。 Server Client RTSP 流控( TCP) RTP 數(shù)據(jù)流( UDP) RTCP 分組 (UDP) 6 圖 2-3交叉開發(fā)模型 交叉編譯就是在一個平臺上生成在另一個平臺上執(zhí)行的代碼。本文的目標(biāo)就是在 X86平臺上交叉編譯,產(chǎn)生可以在 ARM 開發(fā)板上運(yùn)行的二進(jìn)制文件。這需要在 PC 機(jī)上建立一個用于 ARM 目標(biāo)板的交叉編譯環(huán)境,本機(jī)使用交叉編譯器arm-linux-gcc-4.4.3 配置如下: 名 稱 嵌入式 linux 點播系統(tǒng)開發(fā) CPU AMD 2445 內(nèi) 存 2G 虛擬機(jī) Server2003 下 VMWEAR Linux 系統(tǒng) Fedora 交叉編譯器 arm-linux-gcc-4.4.3 表 2-1 x86 主機(jī)配置 宿主機(jī) 目標(biāo)板 網(wǎng)絡(luò) /串口 /JTAG 7 3 系統(tǒng)的需求說明 3.1多媒體點播系統(tǒng)功能需求 首先系統(tǒng)是基于 mini2440開發(fā)板進(jìn)行設(shè)計的,所以在 uboot、 kerne 移植時要進(jìn)行定制,包括 mini2440 板級的定制和和針對 VOD 需求的定制。所以在移植時系統(tǒng)需要加入對網(wǎng)卡、觸摸屏等的支持。 其次點播系統(tǒng)是通過客戶端 /服務(wù)器模式實現(xiàn)的,所以系統(tǒng)的功能需求可以客戶端和服務(wù)器兩大部分來劃分??蛻舳酥饕獙崿F(xiàn)視頻播放功能,用戶啟動系統(tǒng)后進(jìn)入視頻點播系統(tǒng)主界面,為用戶提供 網(wǎng)絡(luò)點播和本地點播服務(wù),播放時用戶可以進(jìn)行相關(guān)的交互式操作。服務(wù)器主要實現(xiàn)數(shù)據(jù)流的發(fā)送,使用戶可以觀看自己點播的視頻文件。 嵌入式流媒體客戶端需要具備的基本功能如下 : 1) 提供有好的播放界面和交互式界面; 1) 能讀取視頻文件,實現(xiàn)實時解碼及音視頻同步實時播放; 2) 可以播放 U盤中本地視頻文件; 3) 可以撥號連接服務(wù)器,讀取服務(wù)器視頻文件; 4) 能夠?qū)崿F(xiàn)交互操作,實現(xiàn)對流媒體播放的暫停、快進(jìn)、快退等功能; 嵌入式流媒體服務(wù)器端需要具備的基本功能如下 07: 1)能夠提供種類豐富的視頻文件:如 AVI, RMVB等; 2)以流式協(xié)議將視頻文件發(fā)送給客戶端,使用戶可以觀看其點播的視頻文件; 3)實現(xiàn)和客戶端的同步交互式操作,比如實現(xiàn)同步的暫停、快進(jìn)等操作。 8 4 系統(tǒng)的總體設(shè)計 該部分主要進(jìn)行系統(tǒng)的整體設(shè)計,需要對系統(tǒng)進(jìn)行總體劃分,一般將嵌入式流媒體播放器的系統(tǒng)體系結(jié)構(gòu)劃分為三層,包括硬件層、內(nèi)核層和應(yīng)用層。本文是以 mini2440為開發(fā)板,論文的主要工作集中于系統(tǒng)的移植和應(yīng)用程序的開發(fā)。 4.1 系統(tǒng)總體劃分 通常嵌入式 Linux 視頻點播系統(tǒng)從軟件的角度看通??梢苑譃樗膫€層次,即引導(dǎo)加載程 序,嵌入式 LinuX內(nèi)核,文件系統(tǒng)以及用戶應(yīng)用程序 08。經(jīng)過嵌入式 u-boot的移植、 arm-linux內(nèi)核的配置與編譯以及嵌入式根文件系統(tǒng)的創(chuàng)建,基于 ARM處理器平臺的最小嵌入式系統(tǒng)就完成了。因為此時的系統(tǒng)還沒有任何的用戶應(yīng)用程序,但是下載到開發(fā)板可與看到自己的根文件系統(tǒng)目錄了。典型的Bootloader、 bootloader 參數(shù)、內(nèi)核映像和嵌入式根文件系統(tǒng)在 FLASH 上的存儲如下圖所示。 圖 4-1嵌入式最小系統(tǒng)構(gòu)成 GUI圖形用戶界面、通信協(xié)議棧和音視頻解碼器 mppalyer三個主要模塊集 成在一起就構(gòu)成了論文的嵌入式用戶應(yīng)用程序。與前面的最小嵌入式系統(tǒng)結(jié)合一起就構(gòu)成了視頻點播系統(tǒng)體系。體系結(jié)構(gòu)如圖 4-2所示。 9 圖 4-2 嵌入式流媒體播放系統(tǒng)體系結(jié)構(gòu) 4.2實現(xiàn)模式: C/S模型 嵌入式視頻點播系統(tǒng)要實現(xiàn)本地播放和網(wǎng)絡(luò)播放的功能,本地播放是讀取 U盤中預(yù)先存在的視頻文件進(jìn)行播放。網(wǎng)絡(luò)播放時在播放時連接服務(wù)器,連接成功后,讀取服務(wù)器的視頻資源,更新網(wǎng)絡(luò)播放列表,點擊相應(yīng)的視頻文件后, QT視頻播放客戶端會調(diào)用開源 軟件 mplayer 進(jìn)行音視頻解碼將視頻顯示在播放器播放窗口,并且在播放的狀態(tài)下支持隨機(jī)訪問,可以進(jìn)行暫停、快進(jìn)、快退等交互式操作。 C/S工作模型如圖 4-3所示。 應(yīng)用層: 內(nèi)核層: 引導(dǎo)層: 硬件層: 通信協(xié)議棧 音視頻解碼 GUI 嵌入式應(yīng)用程序 Linux 內(nèi)核 根文件系統(tǒng) Bootloader 硬 件 平 臺 嵌入式微處理器 外 圍 設(shè) 備 10 圖 4-3 VOD 服務(wù)模型 在用戶進(jìn)行播放點播的過程中,服務(wù)器必須要開啟 http 服務(wù)和流媒體傳輸兩個服務(wù) 10,通過 http 協(xié)議,用戶可以向服務(wù)器端發(fā)送視頻點播的請求,通過 RTP/RTSP進(jìn)行視頻數(shù)據(jù)流的傳輸和控制。播放器的 RTSP 服務(wù)器工作流程 11主要步驟如圖 4-4 所示。 圖 4-4服務(wù)器工作流程 開始 監(jiān)聽 TCP 端口 等待客戶連接 請求連接 接受連接 創(chuàng)建新連接 接受客戶消息 關(guān)閉連接 執(zhí)行客戶消息 響應(yīng)客戶消息 結(jié)束 N N VOD Server Client RTSP 控制信息( TCP) RTP 音、視頻( UDP) RTCP 分組 (UDP) HTTP 點播請求 11 5 系統(tǒng)的詳細(xì)設(shè)計及實現(xiàn) 該部分介紹了系統(tǒng)的實施細(xì)節(jié),包括嵌入式系統(tǒng)開發(fā)環(huán)境的搭建, uboot、kernel移植以及視頻播放主界面的設(shè)計。 5.1 嵌入式系統(tǒng)開發(fā)環(huán)境的搭建 5.1.1 建立工作目錄 mkdir -p /opt/FriendltARM/mini2440 /mini2440 工作目錄 mkdie -p /tmp/linux /各種所需源文件都拷貝到該目錄下 5.1.2 建立交叉編譯環(huán)境 cd /opt/FriendltARM/mini2440 解壓安裝編譯器 arm-linux-gcc-4.4.3 tar xvzf /tmp/linux/arm-linux-gcc-4.4.3.tgz C / 添加系統(tǒng)環(huán)境變量如下 gedit /root/.bashrc export PATH=$PATH: /opt/FriendlyARM/toolschain/4.4.3/bin 解壓安裝 Linux- 內(nèi)核源代碼 tar xvzf /tmp/linux/linux-.tar.gz 解壓安裝嵌入式圖形系統(tǒng) arm-qtopia和 x86-qtopia 源代碼 tar xvzf /tmp/linux/x86-qtopia.tgz tar xvzf /tmp/linux/arm-qtopia.tgz 解壓安裝嵌入式圖形系統(tǒng) arm-qte-4.6.3 tar xvzf /tmp/linux/arm-qte-4.6.3-20100802.tar.gz 解壓安裝 busybox-1.13.3 源代碼 tar xvzf /tmp/linux/busybox-1.13.3-mini2440.tgz 解壓安裝 Linux 示例程序 tar xvzf /tmp/linux/examples-20100108.tgz 解壓安裝 uboot工作目錄 12 tar xvzf /tmp/linux/vboot-src.tar.gz 創(chuàng)建 bootloader 工作目錄,里有 vivi 和 u-boot源代碼 tar xvzf /tmp/linux/mkyaffs2image.tgz C / 改變工作目錄后會被安裝到 /usr/sbin 目錄下,自動生成 mkyaffs2image 和 mkyaffs2image-128M。 解壓安裝 LogoMaker 開機(jī)啟動畫面制作工具 tar xvzf /tmp/linux/logomaker.tgz C / 在開發(fā)時經(jīng)常用到 NFS、 TFTP和 SMB服務(wù),所以系統(tǒng)服務(wù)要事先配置好并且保證正常運(yùn)行。 所建立的 mini2440 工作目錄如 5-1所示。 圖 5-1 虛擬機(jī)下工作目錄 5.2 嵌入式 linux 的 uboot移植 5.2.1 bootloader 介紹 嵌入式系統(tǒng)的引導(dǎo)加載程序是系統(tǒng)必不可少的一部分,引導(dǎo)加載程序是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。其作 用類似于 PC 中的 BIOS,BootLoader 就是在 13 操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。這段程序主要作用就是初始化硬件設(shè)備、生成內(nèi)存映射圖等,為最后調(diào)用嵌入式內(nèi)核做好充足的前期準(zhǔn)備。 Bootloader一般有兩種啟動模式即啟動加載模式和下載模式。下載模式主要是針對嵌入式開發(fā)人員的,因為嵌入式移植過程中的各種調(diào)試基本都是這種模式來實現(xiàn)的,下載模式可以通過串口、 NFS、 TFTP 等方式實現(xiàn)。在下載模式下, u-boot為用戶提供一個命令行接口,通過接口可以使用 u-boot 提供的一些命令進(jìn)行相應(yīng)操作。啟動加載模式 是產(chǎn)品發(fā)布時必須置為的模式,在這種模式下啟動系統(tǒng)不需要用戶的干涉,自動從目標(biāo)主機(jī)的存儲設(shè)備上將操作系統(tǒng)加載到內(nèi)存中運(yùn)行。 5.2.2 在嵌入式 Linux 中 BootLoader 的重要性 由于 BootLoader 需要直接操作硬件,所以想在嵌入式世界建立一個通用的引導(dǎo)加載程序是很困難的,因為一般不同的硬件平臺不同的操作系統(tǒng)所需的加載引導(dǎo)程序不同。所能做的就是讓一種加載引導(dǎo)程序支持盡量多的平臺,賦予它良好的移植性。 U-boot 就是支持多平臺多操作系統(tǒng)的優(yōu)秀引導(dǎo)加載程序,這也是U-boot 的優(yōu)勢。因而 針對不同的嵌入式平臺要進(jìn)行加載引導(dǎo)程序相關(guān)的修改以滿足項目需求。 5.2.3 u-boot 引導(dǎo)流程 Bootloader啟動流程大多經(jīng)過兩個階段,即啟動可以分為 stage1和 stage2。stage1 完成初始化硬件的工作,為 stage2 準(zhǔn)備足夠的內(nèi)存空間,并將 stage2可執(zhí)行映像復(fù)制到內(nèi)存中,設(shè)置堆棧,然后轉(zhuǎn)調(diào)到 stage2的 C入口。 Stage2一般包括以下幾個步驟,初始化本階段要用到的硬件設(shè)備,將制作好的內(nèi)核映像和根文件系統(tǒng)從 Flash 讀到 RAM中,調(diào)用內(nèi)核,跳轉(zhuǎn)到 MEMSTART+0x8000 地址 處,一般是使用 x030008000 地址。啟動的 stagel 一般用匯編語言來實現(xiàn),匯編語言能更加高效的實現(xiàn)對底層硬件的操作且代碼量小,對應(yīng)的是 start.S 文件。而stage2 則一般用 C 語言來實現(xiàn),這樣做不僅可以實現(xiàn)更加復(fù)雜的功能,而且具有良好的可讀性和移植性。啟動代碼中 C 語言的主函數(shù)是在 lib_arm/board.c中的 start_armboot。兩個階段的引導(dǎo)的主要流程如下所示。 14 圖 5-2 兩個階段啟動流程圖 5.2.4 u-boot 移植步驟 移植 就是根據(jù)開發(fā)板和系統(tǒng)需求做相應(yīng)的修改。 U-Boot 還沒有支持三星S3C2440微處理器,移植仍是用 U-Boot 支持的友善之臂 SBC2410 的文件作藍(lán)本來移植,因為 SBC2410 和 mini2440 硬件配置最為接近,使用一個模板可以加快移植的速度和效率。所以移植所要做的就是針 S3C2440 和 SBC2410 的不同,以及 SBC2410 和 mini2440 開發(fā)板的外設(shè)不同作相應(yīng)的修改,并增加新的功能。S3C2440 和 S3C2410 的區(qū)別主要是 S3C2440 的主頻更高,其他內(nèi)部寄存器基本都是兼容的。 本 系統(tǒng)中,使用 mini2440 開發(fā)板,采用 u-boot 作為 S3C2440 處理器的BootLoader。 設(shè)置 CPU 為 SVC 關(guān)閉看門狗 /禁所有中斷 /設(shè)置 cpu 頻率 復(fù)制 stage2 可執(zhí)行 映像到 SDRAM 中 設(shè)置堆棧指針 跳轉(zhuǎn) stage2 c 入口 Stage2: 加載內(nèi)核和根文件 設(shè)置內(nèi)核的啟動參數(shù)。 調(diào)用內(nèi)核 Stage1: 檢測內(nèi)存映射 15 5.2.5 建立開發(fā)板文件并測試編譯環(huán)境 修改頂層 Makefile 目的:定義交叉編譯工具鏈和開發(fā)板配置選項。 約定:代碼中 +和 -號表示增刪 vi Makefile +CROSS_COMPILE = arm-none-linux-gnueabi- +mini2440_config : unconfig + $(MKCONFIG) $(:_config=) arm arm920t mini2440 andywsg s3c24x0 5.2.6 在 /board 中建立 mini2440 目錄和文件 在 /board 目錄中建立開發(fā)板 mini2440 的目錄,并復(fù)制 sbc2410x 的文件到此,做適當(dāng)修改。目的:以 sbc2410x 為藍(lán)本,因為 sbc2410 和 mini2440 配置最接近,代碼復(fù)用,這樣可以加快移植進(jìn)度。 cd board mkdir andywsg/mini2440 cp -arf sbc2410x/* andywsg/mini2440/ cd andywsg/mini2440/ mv sbc2410x.c mini2440.c 5.2.7 在 include/configs/中建立開發(fā)板配置文件 目的 :制作 mini2440 所需頭文件 cp include/configs/sbc2410x.h include/configs/mini2440.h 測試編譯環(huán)境 在 uboot頂層目錄執(zhí)行 make mini2440_config make 編譯通過如圖 5-3 所示。以上測試通過后,說明編譯環(huán)境和基本的開發(fā)板代碼創(chuàng) 16 建都沒有問題。下面所做工作就是針對 mini2440 進(jìn)行修改,以滿足項目需求。Uboot修 改主要經(jīng)歷四個階段,第一階段修改啟動代碼,包括初始化 CPU頻率,代碼重定向等。第二階段修改初始化代碼,主要是 mini2440 平臺初始化。第三階段是初始化外設(shè),包括 LCD、網(wǎng)卡和 YAFFS2 文件系統(tǒng)支持等。第四階段修改編譯配置文件,在所有有編譯條件的地方加入對 mini2440 的編譯支持,這樣前面修改的代碼才會在編譯時編譯進(jìn)來。下面是對 u-boot源碼修改后編譯的結(jié)果。 圖 5-3 uboot 編譯結(jié)果 5.3 linux 內(nèi)核配置與編譯 5.3.1 內(nèi)核簡介 內(nèi) 核是所有 linux 系統(tǒng)的核心軟件組件,其性能很大程度上決定了整個系統(tǒng)的性能。本系統(tǒng)中,嵌入式 Linux 內(nèi)核選擇 。 linux- 本身已經(jīng)提供了對 mini2440 的部分支持。內(nèi)核移植就是根據(jù)開發(fā)系統(tǒng)的需要對已有的系統(tǒng)進(jìn)行裁減,保留需要的模塊去掉不需要的模塊,生成一個適合目標(biāo)嵌入式系統(tǒng)的過程。 17 5.3.2 建立目標(biāo)平臺 指定平臺交叉編譯變量 cd linux- vi Makefile -ARCH ?= $(SUBARCH) -CROSS_COMPILE ?= +ARCH ?= arm +CROSS_COMPILE ?= arm-linux- 這里面的 ARCH ?= arm 是指定目標(biāo)平臺為 arm 平臺, CROSS_COMPILE ?= arm-linux-是指定交叉編譯器是 arm-linux-gcc-4.4.3。 添加自己的開發(fā)板信息 cd linux- rm -rf arch/arm/mach-s3c2440/mach-mini2440.c cp -arf arch/arm/mach-s3c2440/mach-smdk2440.c arch/arm/mach-s3c2440/mach- mini2440.c vi arch/arm/mach-s3c2440/mach-mini2440.c 把 MACHINE_START(S3C2440, SMDK2440) , 修改成 MACHINE_START(MINI2440, FriendlyARM Mini2440 development board)。 修定開發(fā)板時鐘源頻率 在 mach-mini2440.c( 就是剛剛通過復(fù)制 mach-smdk2440.c 得到的 )static void _init smdk2440_map_io(void)函數(shù)中,把原來的 16934400(代表原 SMDK2440 目標(biāo)板上的晶振是 16.9344MHz)改為 mini2440 開發(fā)板上實際使用的 12000000(代表 mini2440 開發(fā)板上的晶振 12MHz)。 克隆 SMDK2440 成 MINI2440 平臺 克隆自己的 mini2440 平臺,需要把 mach-mini2440.c 中所有的 smdk2440 字符串改為 mini2440 。 這 里 使 用 批 處 理 命 令 在 命 令 模 式 下 輸入: %s/smdk2440/mini2440/g。 編 譯測試 cd linux- make mini2440_defconfig /使用 Linux 官方自帶的 mini2440 配置 make zImage /編譯內(nèi)核,生成的內(nèi)核映像 zImage 位于 arch/arm/boot 編譯通過,以上測試通過后,說明編譯環(huán)境和基本的開發(fā)板的代碼創(chuàng)建都沒有問題。下載到內(nèi)核,從串口可以看到可以啟動信息,但是大部分的定制的驅(qū)動還沒有添加,根文件系統(tǒng)也沒有制作。下面進(jìn)行的是主要硬件驅(qū)動文件的移植。 18 5.3.3 移植 Nand 驅(qū)動并修改分 區(qū)信息 雖然比較新的內(nèi)核 Linux 在 nand_ids.c 文件中自帶了部分 Nand Flash驅(qū)動,但是系統(tǒng)默認(rèn)的分區(qū)不是該項目所需的。為了適合系統(tǒng)自帶的 Nand Flash 驅(qū)動接口,在 Nand Flash 的結(jié)構(gòu)信息中還要添加相關(guān)信息,參考/arch/arm/plat-24xx/common-smdk.c 上結(jié)構(gòu)信息,在 mach-mini2440.c 添加如下信息。 cd linux- vi arch/arm/mach-s3c2440/mach-mini2440.c /編輯平 臺初始化文件 /創(chuàng)建 MTD 分區(qū)表 static struct mtd_partition mini2440_default_nand_part = 0 = .name = supervivi, /bootloader 分區(qū),對應(yīng)設(shè)備塊 /dev/mtdblock0 .size = 0x00040000, /大小 256k .offset = 0, /起始地址 0x00000000 1 = .name = param, / supervivi 的參數(shù)區(qū),對應(yīng)塊設(shè)備 /dev/mtdblock1 .offset = 0x00040000, .size = 0x00020000, /大小 128K 2 = .name = Kernel, /內(nèi)核分區(qū),大小為 5M,對應(yīng) /dev/mtdblock2 .offset = 0x00060000, .size = 0x00500000, /大小 5M 3 = .name = root, /根文件系統(tǒng)分區(qū),對應(yīng) /dev/mtdblock3 .offset = 0x00560000, .size = 1024 * 1024 * 1024, , 4 = .name = nand, /表示整片的 nand flash .offset = 0x00000000, .size = 1024 * 1024 * 1024, ; /下面是開發(fā)板的 nand flash 設(shè)置表,一塊板對應(yīng)一個表 static struct s3c2410_nand_set mini2440_nand_sets = 0 = .name = NAND, .nr_chips = 1, .nr_partitions = ARRAY_SIZE(mini2440_default_nand_part), .partitions = mini2440_default_nand_part,; 19 /構(gòu)建一個 s3c2410_platform_nand 類型的 mini2440_nand_info 結(jié)構(gòu)體 static struct s3c2410_platform_nand mini2440_nand_info = .tacls = 20, /nand電平 nWE開始時間 .twrph0 = 60, / nWE持續(xù)時間 .twrph1 = 20, /nWE結(jié)束時間 .nr_sets = ARRAY_SIZE(mini2440_nand_sets), .sets = mini2440_nand_sets, .ignore_unset_ecc = 1,; /平臺設(shè)備結(jié)構(gòu)體數(shù)組,把 nand flash 設(shè)備添加到目標(biāo)平臺設(shè)備集中 static struct platform_device *mini2440_devices _initdata = &s3c_device_usb, &s3c_device_lcd, &s3c_device_i2c0, &s3c_device_iis, &s3c_device_nand, ;把 nand flash 設(shè)備添加到開發(fā)板的設(shè)備列表結(jié)構(gòu) ; 5.3.4 為內(nèi)核打補(bǔ)丁支持 yaffs2 Linux 支持的文件系統(tǒng)很多,論文采用的是 yaffs2 文件作為根文件系統(tǒng)。 進(jìn)入 yaffs2 源代碼目錄執(zhí)行如下操作: cd yaffs2 ./patch-ker.sh c /opt/FriendlyARM/mini2440/linux- 再進(jìn)入 linux-/fs 目錄,看到如果已經(jīng)多了一個 yaffs2 目錄 ,說明 yaffs2 補(bǔ)丁已經(jīng)成功打上。 5.3.5 移植 DM9000 網(wǎng)卡驅(qū)動 網(wǎng) 卡 是 一 個 平 臺 設(shè) 備 , 在 目 標(biāo) 平 臺 初 始 化 代 碼 中/arch/arm/mach-s3c2440/mach-mini2440.c 填寫相應(yīng)的結(jié)構(gòu)表,具體添加如下: 添加網(wǎng)卡設(shè)備的資源設(shè)置,才能夠和 DM9000 網(wǎng)卡驅(qū)動接口配合使用 : static struct resource mini2440_dm9k_resource = /片選信息 0 = .start = MACH_MINI2440_DM9K_BASE, .end = MACH_MINI2440_DM9K_BASE + 3, .flags = IORESOURCE_MEM, 1 = .start = MACH_MINI2440_DM9K_BASE + 4, 20 .end = MACH_MINI2440_DM9K_BASE + 7, .flags = IORESOURCE_MEM, 2 = .start = IRQ_EINT7, .end = IRQ_EINT7, /說明中斷管腳接在 EINT7,上升沿觸發(fā)中斷 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,; static struct dm9000_plat_data mini2440_dm9k_pdata = /向驅(qū)動傳入 flags 參數(shù)(使用 16 位數(shù)據(jù)線,沒有 EEPROM)和 dev_addr( MAC地址) .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),; static struct platform_device mini2440_device_eth = .name = dm9000, .id = -1, .num_resources = ARRAY_SIZE(mini2440_dm9k_resource), .resource = mini2440_dm9k_resource, .dev = .platform_data = &mini2440_dm9k_pdata,; 把上面做好的網(wǎng)卡平臺添加設(shè)備設(shè)備集中 static struct platform_device *mini2440_devices _initdata = &s3c_device_usb, &s3c_device_lcd, &s3c_device_iis, &s3c_device_nand, &mini2440_device_eth,; 5.3.6 移植 LCD 顯示驅(qū)動 由于 Linux- 內(nèi)核已經(jīng)支持 S3C2440 的 LCD 控制器驅(qū)動, LCD 工作中最關(guān)鍵的就是取決于時鐘頻率 (Clock frequency)參數(shù)的設(shè)置, Linux- 內(nèi)核是通過一個稱為“ pixclock”的參數(shù)來調(diào)節(jié)。這里實際設(shè)置數(shù)值為 170000,單位是 ps(picoseconds)。 cd linux- vi arch/arm/mach-s3c2440/mach-mini2440.c mini2440 開發(fā)板使用的是統(tǒng)寶 3.5LCD,把友善之臂已經(jīng)移植好的代碼加入,統(tǒng)寶 3.5LCD 的配置和參數(shù)設(shè)置如下。 static struct s3c2410fb_display mini2440_lcd_cfg _initdata = if !defined (LCD_CON5) .lcdcon5 = S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVLINE | 21 S3C2410_LCDCON5_INVVFRAME | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_HWSWP, else .lcdcon5 = LCD_CON5, endif .type = S3C2410_LCDCON1_TFT, .width = LCD_WIDTH, .height = LCD_HEIGHT, .pixclock = LCD_PIXCLOCK, .xres = LCD_WIDTH, .yres = LCD_HEIGHT, .bpp = 16, .left_margin = LCD_LEFT_MARGIN + 1, .right_margin = LCD_RIGHT_MARGIN + 1, .hsync_len = LCD_HSYNC_LEN + 1, .upper_margin = LCD_UPPER_MARGIN + 1, .lower_margin = LCD_LOWER_MARGIN + 1, .vsync_len = LCD_VSYNC_LEN + 1,; /構(gòu)建 lcd 配置結(jié)構(gòu)體 mini2440_fb_info static struct s3c2410fb_mach_info mini2440_fb_info _initdata = .displays = &mini2440_lcd_cfg, .num_displays = 1, .default_display = 0, .gpccon = 0xaa955699, .gpccon_mask = 0xffc003cc, .gpcup_mask = 0xffffffff, .gpdcon = 0xaa95aaa1, .gpdcon_mask = 0xffc0fff0, .gpdup = 0x0000faff, .gpdup_mask = 0xffffffff, .lpcsel = 0xf82,; 5.3.7 添加觸摸屏驅(qū)動 由于 Linux- 內(nèi)核沒有包含支持 S3C2440 的觸摸屏驅(qū)動, 因此需要添加設(shè)計一個觸摸屏驅(qū)動文件,放置于 linux-src/drivers/input/touchscreen 目錄下,增 加 一 個 友 善 之 臂 提 供 的 s3c2410_ts.c 文 件 。 然 后 在 linux-/drivers/input/touchscreen/Makefile 文件中添加該源代碼的目標(biāo)模塊。 vi linux-/drivers/input/touchscreen/Makefile +obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o 22 5.3.8 移植 SD 卡驅(qū)動 由于 Linux- 已經(jīng)自帶了 S3C2440 芯片的 SD 卡驅(qū)動,所以只需在初始化代碼中加入 SD 平臺設(shè)備結(jié)構(gòu)就可以。在 nand flash 平臺結(jié)構(gòu)后面添加如下代碼: vi arch/arm/mach-s3c2440/mach-mini2440.c 在平臺初始化代碼 mini2440.c 文件中添加 SD 卡設(shè)備結(jié)構(gòu)所需的頭文件 include include /創(chuàng)建 s3c2440 的 SD 控制器的平臺數(shù)據(jù) static struct s3c24xx_mci_pdata mini2440_mmc_cfg = .gpio_detect = S3C2410_GPG(8),/ 中斷管腳是開發(fā)板上接的是 GPG8 .gpio_wprotect = S3C2410_GPH(8), .set_power = NULL, .ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34,; 并把 SD 卡結(jié)構(gòu)設(shè)備添加到目標(biāo)平臺設(shè)備集中 static struct platform_device *mini2440_devices _initdata = &s3c_device_usb, &s3c_device_lcd, &mini2440_device_eth, &s3c_device_nand, &s3c_device_sdi,; 注意,上面驅(qū)動修改好之后,每一步都要執(zhí)行 make menuconfig在菜單選項中選中相應(yīng)的配置項,這樣在編譯時修改的代碼才會起效。最后在 linux-頂層目錄執(zhí)行 make zImage 編譯 ,會在 arch/arm/boot目錄下產(chǎn)生新的 zImage。結(jié)果如圖 5-4所示。 23 圖 5-4 linux- 編譯結(jié)果 5.4流媒體播放器設(shè)計 5.4.1 播放器主界面工作流程 根據(jù)項目需求,播放器主界面的工作流程圖如下: 24 圖 5-5 播放器主界面工作流程 5.4.2 播放解碼處理 自己編寫的播放器客戶端并沒有解碼的功能,而是通過在虛擬機(jī)下 Linux交叉編譯器交叉編譯 MPlayer,使得 MPlayer 能在 ARM架構(gòu)的平臺上運(yùn)行,實現(xiàn)嵌入式平臺的流媒體音視頻解碼播放,優(yōu)化并改善傳輸性能和質(zhì)量 12。由于MPlayer是個開源軟件,內(nèi)置了多種解碼器,可以播放很多主流音視頻文件,被稱為嵌入式 linux 中最好的播放工具。在交叉編譯時如果不使用默認(rèn)的庫文件,需要進(jìn)行相關(guān)庫移植,以達(dá)到音視頻解碼的功能,屬于做根文件系統(tǒng)模塊。 5.4.3 播放器主界面設(shè)計 Qt/Embedded 是著名的圖形庫 Qt 開發(fā)商 Trolltech 專門面向嵌入式系統(tǒng)開發(fā)的 Qt 版本。這是一種基于 C+圖形用戶界面應(yīng)用程序構(gòu)架,使 嵌入式開發(fā)者可客戶端主界面 顯示界面 請求本地資源 撥服 務(wù)器 ip 請求網(wǎng)絡(luò)資源 開始 更新資源列表 播放視頻 更新本地列表 資源存在 連接成功 返主界面 是 是 是 否 否 否 25 以在嵌入式環(huán)境中使用圖形界面開發(fā)工具進(jìn)行用戶應(yīng)用程序開發(fā)。由于交叉編譯出來的應(yīng)用程序具有良好的可移植性,很多使用 Linux 開發(fā)的 Qt 應(yīng)用程序可以很方便地移植到相應(yīng)的嵌入式系統(tǒng)上去。 根據(jù) VOD 客戶端應(yīng)用程序的功能, VOD 客戶端應(yīng)用程序可以劃分為兩大模塊,如圖 5-6 所示 圖 5-6 客戶端總體構(gòu)架 整個客戶端軟件基于 Qt Embedded 程序框架開發(fā)。客戶端軟件分為:視頻信息接收 顯示模塊和視頻播放模塊,每個模塊對應(yīng)一個窗體。啟動開發(fā)板后,進(jìn)入播放器主界面,主界面有兩個按鈕選項,分別是本地播放和網(wǎng)絡(luò)播放。選擇不同的按鈕進(jìn)入不同的播放模式,上面角有個多選項卡,選項卡里有 netplay 和localplay不同的播放選項以及幫助信息選項。主界面如下圖所示。 圖 5-7 播放器主界面界面 圖形用戶界面( GUI)模塊主要負(fù)責(zé)用戶和系統(tǒng)的交互,本系統(tǒng)中 GUI 模塊本地播放 網(wǎng)絡(luò)播放 接受信息 信息顯示 數(shù)據(jù)接收 解碼 播放 客戶操作 26 的開發(fā)主要由 Qt/Embedded工具完成 13。 QtCreator是跨平臺輕量級集成開發(fā)環(huán)境,使用它編寫圖形用戶界面,創(chuàng)建 GUI 的小窗口部件界面。其中 QWidget類是所有用戶界面對象的基類 , 圖形用戶界面應(yīng)用程序的控制流 就是 該 類 負(fù)責(zé) 。圖形用戶主界面主要實現(xiàn)視頻播放的選擇和對用戶交互式操作的控制。 代碼的啟動是從主函數(shù) main()開始的,在這里啟動第一個界面即播放器的主界面。 int main( int argc, char * argv ) . Main_vod m_vod; m_vod.show(); /打開第一個界面 . 主界面窗體 Main_vod 是繼承 QDialog類。 QDialog類是對話框窗口的基類,對話框窗口是主要用于短期任務(wù)以及和用戶進(jìn)行簡要通訊的頂級窗口。這里使用的是 QDialog 非模式即通過 show()顯示。播放窗口按鍵間通信通過 signal 和slot 來接收信號, QT 信號槽機(jī)制 signal 和 slot 機(jī)制真正實現(xiàn)了封裝的概念,這里 signal和 slot 在聲明后通過 connect( )函數(shù)來進(jìn)行調(diào)用。 Main_vod類定 義如下: class Main_vod : public QDialog Q_OBJECT /只有加入 Q_OBJECT宏 才能使用 QT中的 signal和 slot機(jī)制 public: Main_vod ( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = Qt:WStyle_Customize | Qt:WStyle_NoBorder );/ 構(gòu)造一個父對象為 parent、名稱為 name 的對話框,非 模式 show()顯示,產(chǎn)生一個沒有邊際的窗體 Main_vod (); MyButton* B_local_play; /定義本地播放指針按鈕 MyButton* B_net_paly; /定義網(wǎng)絡(luò)播放指針按鈕 public slots: 27 virtual void net_play_clicked();/網(wǎng)絡(luò)播放 virtual void local_play_clicked();/本地播放 . ; 網(wǎng)絡(luò)播放和本地播放的函數(shù)定義如下: /網(wǎng)絡(luò)播放 /本地播放 void Main_vod:net_play_clicked() void Main_vod:local_play_clicked() close(); close(); Net_play n_Vod; local_Play localVod; n_Vod.show(); localVod.show(); n_Vod.exec(); localVod.exec(); 調(diào)用函數(shù)實現(xiàn)主界面的顯示 Main_vod: Main_vod ( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) /設(shè)置顯示窗體名字、大小及背景圖片 setName(Main_vod); setMinimumSize(QSize(268,200); setMaximumSize(QSize(268,200); setPaletteBackgroundPixmap(QPixmap:fromMimeSource(images/movie_bg.jpg); /主界面多選按鈕 QPopupMenu *file=new QPopupMenu; QFont f(Helvetica,10); setFont(f); file-setFont(f); file-insertItem(Local play,this,SLOT(local_play_clicked(); 28 file-insertItem(Net play,this,SLOT(net_play_clicked(); QMenuBar *menu; menu=new QMenuBar(this); menu-setGeometry(QRect(0,0,268,10); menu-insertItem(File,file); /構(gòu)造本地播放按鈕名字、坐標(biāo)及背景圖片 B_local_play=new MyButton(this,B_local_play); B_local_play-setGeometry(QRect(43,113,47,47); B_local_play-setMinimumSize(QSize(47,47); B_local_play-setMaximumSize(QSize(47,47); B_local_play-setPaletteBackgroundPixmap(QPixmap:fromMimeSource(images/local.jpg); B_local_play-setPixmap(QPixmap:fromMimeSource(images/local.jpg); /構(gòu)造網(wǎng)絡(luò)播放按鈕名字、坐標(biāo)及背景圖片 B_net_play=new MyButton(this,B_net_play); B_net_play-setGeometry(QRect(171,113,47,47); B_net_play-setMinimumSize(QSize(47,47); B_net_play-setMaximumSize(QSize(47,47); B_net_play-setPaletteBackgroundPixmap(QPixmap:fromMimeSource(images/net.jpg); B_net_play-setPixmap(QPixmap:fromMimeSource(images/net.jpg); /播放 窗口按鍵通信通過 signal 和 slot 來接收信號
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年北京市事業(yè)單位招聘考試教師招聘考試小學(xué)數(shù)學(xué)案例分析試卷
- 2025年互聯(lián)網(wǎng)婚戀項目規(guī)劃申請報告
- 一件心愛物品的誕生記物作文(14篇)
- 2025年高處作業(yè)特種作業(yè)操作證考試試卷(高空作業(yè)安全操作培訓(xùn)課程實施要點篇)
- 生物制藥工藝與質(zhì)量控制試題集及解析
- 2025年生態(tài)循環(huán)農(nóng)業(yè)技術(shù)模式在農(nóng)業(yè)科技創(chuàng)新與產(chǎn)業(yè)融合報告
- 現(xiàn)代農(nóng)業(yè)科技開發(fā)與利用協(xié)議
- 基因檢測技術(shù)在遺傳性血液疾病診斷中的準(zhǔn)確性研究報告001
- 醫(yī)療健康行業(yè)從業(yè)資格證明(5篇)
- 電商平臺入駐商戶協(xié)議條款修訂版
- 2025年園藝師職業(yè)資格考試卷及答案
- 中學(xué)論文推選管理制度
- 普外科學(xué)科核心知識體系
- 2025年福建省中考道德與法治試卷真題(含標(biāo)準(zhǔn)答案)
- 工程中機(jī)電設(shè)備安裝與調(diào)試技術(shù)
- 2024年天津高中學(xué)業(yè)水平合格性考試歷史試卷真題(含答案詳解)
- 2025年萬家寨水務(wù)控股集團(tuán)及所屬企業(yè)招聘筆試參考題庫含答案解析
- 懸挑式鋼管腳手架專項施工方案
- 2025年勞動合同樣本(電子版)
- 《城市軌道交通通風(fēng)與空調(diào)系統(tǒng)》教學(xué)課件—07地鐵通風(fēng)空調(diào)概述
- (完整版)《數(shù)學(xué)歸納法》課件ppt
評論
0/150
提交評論