網(wǎng)絡(luò)工程畢業(yè)論文_第1頁(yè)
網(wǎng)絡(luò)工程畢業(yè)論文_第2頁(yè)
網(wǎng)絡(luò)工程畢業(yè)論文_第3頁(yè)
網(wǎng)絡(luò)工程畢業(yè)論文_第4頁(yè)
網(wǎng)絡(luò)工程畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1 題 目: 基于 linux 的嵌入式流媒體點(diǎn)播系統(tǒng) 學(xué) 號(hào): 20090902320123 系 別: 應(yīng)用計(jì)算機(jī)系 專 業(yè): 網(wǎng)絡(luò)工程 指導(dǎo)教師: 胡祝華 摘 要 隨著嵌入式系統(tǒng)以及計(jì)算機(jī)網(wǎng)絡(luò)通信技術(shù)、多媒體應(yīng)用程序的快速發(fā)展,基于嵌入式 linux 的家庭娛樂中心、視頻點(diǎn)播和實(shí)時(shí)會(huì)議系統(tǒng)已經(jīng)成為一個(gè)開發(fā)的熱點(diǎn)。這種系統(tǒng)因其體 積小、功耗低、使用方便而廣受青睞。 論文主要做了 uboot 移植、 kernel 移植、以及播放器主界面設(shè)計(jì)的工作。內(nèi)核采用 linux-,針對(duì) mini2440 開發(fā)板對(duì)內(nèi)核做了板級(jí)的定制。使用 Qt 設(shè)計(jì)了播放器主界面。 論文介紹了 RTSP 流媒體協(xié)議的體系結(jié)構(gòu)和工作原理。把流媒體視頻點(diǎn)播相關(guān)技術(shù)應(yīng)用到嵌入式系統(tǒng)中,在嵌入式 S3C2440 硬件平臺(tái)和 Linux 操作系統(tǒng)上開發(fā)實(shí)現(xiàn)一個(gè) VOD 系統(tǒng)。該視頻點(diǎn)播系統(tǒng)提供了美觀、友好的 TQ圖形用戶界面,可以進(jìn)行本地播放和網(wǎng)絡(luò)播放,實(shí)現(xiàn)了視頻點(diǎn)播的基本功能。 關(guān)鍵 字:嵌入式系統(tǒng);實(shí)時(shí)流傳輸協(xié)議;流媒體;視頻點(diǎn)播 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流媒體點(diǎn)播的應(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 實(shí)時(shí)流媒體傳輸協(xié)議介紹 . 4 2.4.1 RTSP . 4 2.5 交叉編譯 . 5 3 系統(tǒng)的需求說明 . 7 3.1多媒體點(diǎn)播系統(tǒng)功能需求 . 7 4 系統(tǒng)的總體設(shè)計(jì) . 8 4.1 系統(tǒng)總體劃分 . 8 4.2實(shí)現(xiàn)模式: C/S模型 . 9 5 系統(tǒng)的詳細(xì)設(shè)計(jì)及實(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ā)板文件并測(cè)試編譯環(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)核簡(jiǎn)介 . 16 5.3.2 建立目標(biāo)平臺(tái) . 17 5.3.3 移植 Nand 驅(qū)動(dòng)并修改分區(qū)信息 . 18 5.3.4 為內(nèi)核打補(bǔ)丁支持 yaffs2 . 19 5.3.5 移植 DM9000 網(wǎng)卡驅(qū)動(dòng) . 19 5.3.6 移植 LCD 顯示驅(qū)動(dòng) . 20 5.3.7 添加觸摸屏驅(qū)動(dòng) . 21 5.3.8 移植 SD 卡驅(qū)動(dòng) . 22 5.4流媒體播放器設(shè)計(jì) . 23 5.4.1 播放器主界面工作流程 . 23 5.4.2 播放 解碼處理 . 24 5.4.3 播放器主界面設(shè)計(jì) . 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流媒體點(diǎn)播的應(yīng)用背景 隨著多媒體計(jì)算機(jī)技術(shù)、移動(dòng)通信技術(shù)的快速發(fā)展以及便攜式移動(dòng)終端設(shè)備的普及,使嵌入式開發(fā)得到了快速發(fā)展。在現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)快速發(fā)展的基礎(chǔ)上,多媒體計(jì)算機(jī)技術(shù)和多媒體網(wǎng)絡(luò)技術(shù)越來越廣泛地應(yīng)用到視頻點(diǎn)播系統(tǒng)。在遠(yuǎn)程醫(yī)療,酒店 VOD,遠(yuǎn)程實(shí)時(shí)視頻會(huì)議上得到了越來越廣泛的應(yīng)用,并且智能化成為其發(fā)展一大趨勢(shì)。 1.2 研究意義 在這個(gè)信息化的時(shí)代,嵌入視頻 VOD系統(tǒng)正在融入人們的生活,比如 KTV點(diǎn)播系統(tǒng)、智能電視等等,這些都使人們能更加高效便捷的享受信息資源,極大地方便了人們的生活,這使得嵌入式 VOD系統(tǒng)開發(fā)成為一個(gè)熱點(diǎn)。 嵌入式開發(fā)不同于傳統(tǒng)的有著豐富資源的 PC 開發(fā),嵌入式開發(fā)往往是基于受限的硬件資源,這在技術(shù)和實(shí)施難度上對(duì)嵌入式流媒體點(diǎn)播提出了更高的要求,成為研究嵌入式多媒體點(diǎn)播的難點(diǎn)。同時(shí)嵌入式技術(shù)發(fā)展迅速,隨著嵌入式產(chǎn)品快速地更新?lián)Q代,系統(tǒng)還要有良好的擴(kuò)展性。 2 2 流媒體相關(guān)技術(shù)介紹 2.1 VOD介紹 VOD 是 Video On Demand 的縮寫 。視頻點(diǎn)播是計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)、多媒體技術(shù)發(fā)展的產(chǎn)物 01。現(xiàn)代社會(huì)中,高端嵌入式移動(dòng)終端成為人們接受信息資源的便捷方式。視頻點(diǎn)播系統(tǒng)不僅可以為用戶提供豐富的網(wǎng)絡(luò)信息資源而且在遠(yuǎn)程教育、智能家電等領(lǐng)域得到越來越廣泛的應(yīng)用。 用戶可以按照自己的需求點(diǎn)播視頻,即播即放,并且可以實(shí)現(xiàn)暫停、快進(jìn)、后退等操作,這種系統(tǒng)播放等待時(shí)間小并且支持多種流媒體視頻格式。隨著智能家電、智能汽車的快速發(fā)展,嵌入式 VOD必將得到越來越廣泛的應(yīng)用。 2.2技術(shù)介紹 進(jìn)入信息時(shí)代,數(shù)字化后的視頻文件具有海量性,由于目前的網(wǎng) 絡(luò)帶寬有限,在網(wǎng)絡(luò)傳輸高清大視頻文件是一件很不容易的事,因?yàn)閭鬏斔俣群鸵曨l質(zhì)量很難滿足用戶的需求。所以要實(shí)現(xiàn)視頻點(diǎn)播的功能必須對(duì)這些要傳輸?shù)囊曨l數(shù)據(jù)進(jìn)行壓縮和解壓縮。隨著多媒體技術(shù)的不斷發(fā)展,多媒體數(shù)據(jù)的存儲(chǔ)與壓縮技術(shù)已經(jīng)相對(duì)比較成熟,例如 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是將語(yǔ)音和影像同步組合在一起的文件格式,是微軟公司 1992 年推出的視頻格式,可以將視頻和音頻交織在一起進(jìn)行同 步播放。這種播放方式不僅可以提高系統(tǒng)的工作效率,同時(shí)也可以迅速地加載和啟動(dòng)播放程序,減少播放 AVI視頻數(shù)據(jù)時(shí)的用戶等待時(shí)間。 AVI格式文件結(jié)構(gòu)由文件頭、索引塊和數(shù)據(jù)塊組成。AVI文件主要參數(shù)有影像參數(shù)、伴音參數(shù)和壓縮參數(shù)。影像參數(shù)的視窗大小和幀率可以根據(jù)播放環(huán)境的硬件能力和處理速度進(jìn)行調(diào)整,窗口越大視頻文件越大。WAV文件時(shí) AVI文件中伴音信號(hào)來源,包括影像與伴音的交織參數(shù)和同步控制參 3 數(shù)。 AVI 支持 256 色和 RLE 壓縮, AVI 對(duì)視頻文件采用有損壓縮方式。這種視頻格式的優(yōu)點(diǎn)是可以跨多個(gè)平臺(tái)使用,其缺點(diǎn)是視頻文 件太大,目前是一種常用的視頻文件格式。 2.2.2 MPEG-4 MPEG-4是一種包含音頻和圖像的壓縮技術(shù),對(duì)圖像的壓縮算法提供的壓縮比可達(dá)到 200:1。 MPEG-4 在較高的壓縮比下也能獲得較高的圖像質(zhì)量,最大的特點(diǎn)是基于對(duì)象的編碼方式以及對(duì)合成對(duì)象的編碼能力。它支持固定和可變速率視頻編碼,具有高效的壓縮性,其編碼系統(tǒng)是開放的,隨時(shí)可以加入新的有效的算法模塊。 MPEG-4標(biāo)準(zhǔn)具有通用的訪問性,適用于無(wú)線和有線網(wǎng)絡(luò)以及固態(tài)存儲(chǔ),支持各種帶寬的傳輸信道和接收端??梢岳煤苷膸捦ㄟ^幀的重建技術(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ù)字電視、動(dòng)態(tài)圖像和移動(dòng)通信等領(lǐng)域得到了普遍應(yīng)用。 2.3 流傳輸技術(shù) 2.3.1 流媒體技術(shù)和流式傳輸方式 流媒體是指使用流式傳輸?shù)姆绞皆诰W(wǎng)絡(luò)上傳輸?shù)拿襟w格式。流是對(duì)在網(wǎng)絡(luò)上所傳輸?shù)慕?jīng)過一定編碼的多媒體信息的一種描述 04。在進(jìn)行網(wǎng)絡(luò)播放時(shí),等待時(shí)間和視頻質(zhì)量是用戶主要的 考慮因素。傳統(tǒng)視頻播放時(shí)必須整個(gè)視頻文件必須全部下載下來才能觀看,這會(huì)使得播放延時(shí)非常大。而現(xiàn)在很流行的嵌入式視頻點(diǎn)播系統(tǒng)可以實(shí)現(xiàn)即播即放,極大地減少了等待時(shí)間,并且在播放時(shí)用戶還可以進(jìn)行相關(guān)的交互式操作。這種觀看方式大大地滿足了用戶的需求。 流式傳輸有兩種方式:實(shí)時(shí)流式傳輸和順序流式傳輸。傳統(tǒng)的視頻播放中主要采用順序傳輸方式,使用這種方式用戶一般只能觀看自己已經(jīng)下載的視頻,缺乏靈活性。實(shí)時(shí)流傳輸允許用戶在進(jìn)行視頻觀看時(shí)進(jìn)行相關(guān)的交互式操作,支持 4 隨機(jī)訪問,比如前進(jìn)、后退等?,F(xiàn)對(duì)于傳統(tǒng)的順序傳輸方式視頻播放, 實(shí)時(shí)流傳輸更能滿足用戶需求,逐漸成為視頻點(diǎn)播的主流方式。 2.4 實(shí)時(shí)流媒體傳輸協(xié)議介紹 實(shí)時(shí)流媒體播放協(xié)議簇主要由 RTSP、 RTP 和 TRCP構(gòu)成,整個(gè) RTSP 協(xié)議棧是建立在 TCP/IP協(xié)議棧之上的。其中 RTSP提供控制功能,如播放器客戶端播放、暫停、前進(jìn)等功能, RTP協(xié)議負(fù)責(zé)流媒體數(shù)據(jù)的實(shí)時(shí)傳輸, 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é)議,是一個(gè)多媒體播放控制協(xié)議,以 C/S 方式工作。在用戶進(jìn)行視頻點(diǎn)播時(shí),通過 rtsp 協(xié)議內(nèi)部定義的方法可以實(shí)現(xiàn)交互式操作,比如暫停、后退、前進(jìn)等。要實(shí)現(xiàn) RTSP 的視頻播放控制功能,不但要有協(xié)議還要有專門的客戶端播放程序和視頻服務(wù)器 05。 RTSP 在進(jìn)行控制信息交互式是保證交付質(zhì)量的 TCP 連接,但在進(jìn)行數(shù)據(jù)流傳輸時(shí)和反饋調(diào)整使用 UDP連接,會(huì)導(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í)時(shí)的數(shù)據(jù)流傳輸。在數(shù)據(jù)包中封裝了發(fā)送數(shù)據(jù)的序列計(jì)數(shù)、標(biāo)識(shí)符和時(shí)間戳等信息。 RTP協(xié)議通常是用 UDP協(xié)議來封裝的,所以只提供實(shí)時(shí)的數(shù)據(jù)傳輸,但是不保證傳輸?shù)目煽啃浴K砸曨l播放時(shí)會(huì)出現(xiàn)視頻模糊,視頻質(zhì)量不佳的現(xiàn)象。隨著視頻解壓縮技術(shù)和網(wǎng)絡(luò)帶寬的不斷提高,客戶端的視頻質(zhì)量會(huì)越來越好。 RTCP是 RTP的實(shí)時(shí)傳輸控制協(xié)議,它用于監(jiān)視網(wǎng)絡(luò)的服務(wù)質(zhì)量和在正在進(jìn)行的與會(huì)者會(huì)話中傳遞信息。通過質(zhì)量反饋來進(jìn)行流量的擁塞控制, 利用這些反饋信息進(jìn)行傳輸速度的相應(yīng)調(diào)整。 RTCP 是通過周期性地向會(huì)話的所有參加者進(jìn)行通信來實(shí)現(xiàn)這樣的功能的,根據(jù)會(huì)話者的數(shù)量來調(diào)整發(fā)包率。 2.5 交叉編譯 嵌入式開發(fā)一般是基于一個(gè)資源受限的系統(tǒng),直接在目標(biāo)板上進(jìn)行相關(guān)軟件的編寫不僅困難而且調(diào)試麻煩,一般的解決方案是利用交叉開發(fā)模型。即先在計(jì)算機(jī)上編寫源程序,然后通過編譯工具交叉編譯,生成可以在目標(biāo)平臺(tái)上運(yùn)行的二進(jìn)制代碼文件,下載到目標(biāo)平臺(tái)上的相應(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ā)模型 交叉編譯就是在一個(gè)平臺(tái)上生成在另一個(gè)平臺(tái)上執(zhí)行的代碼。本文的目標(biāo)就是在 X86平臺(tái)上交叉編譯,產(chǎn)生可以在 ARM 開發(fā)板上運(yùn)行的二進(jìn)制文件。這需要在 PC 機(jī)上建立一個(gè)用于 ARM 目標(biāo)板的交叉編譯環(huán)境,本機(jī)使用交叉編譯器arm-linux-gcc-4.4.3 配置如下: 名 稱 嵌入式 linux 點(diǎn)播系統(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多媒體點(diǎn)播系統(tǒng)功能需求 首先系統(tǒng)是基于 mini2440開發(fā)板進(jìn)行設(shè)計(jì)的,所以在 uboot、 kerne 移植時(shí)要進(jìn)行定制,包括 mini2440 板級(jí)的定制和和針對(duì) VOD 需求的定制。所以在移植時(shí)系統(tǒng)需要加入對(duì)網(wǎng)卡、觸摸屏等的支持。 其次點(diǎn)播系統(tǒng)是通過客戶端 /服務(wù)器模式實(shí)現(xiàn)的,所以系統(tǒng)的功能需求可以客戶端和服務(wù)器兩大部分來劃分。客戶端主要實(shí)現(xiàn)視頻播放功能,用戶啟動(dòng)系統(tǒng)后進(jìn)入視頻點(diǎn)播系統(tǒng)主界面,為用戶提供 網(wǎng)絡(luò)點(diǎn)播和本地點(diǎn)播服務(wù),播放時(shí)用戶可以進(jìn)行相關(guān)的交互式操作。服務(wù)器主要實(shí)現(xiàn)數(shù)據(jù)流的發(fā)送,使用戶可以觀看自己點(diǎn)播的視頻文件。 嵌入式流媒體客戶端需要具備的基本功能如下 : 1) 提供有好的播放界面和交互式界面; 1) 能讀取視頻文件,實(shí)現(xiàn)實(shí)時(shí)解碼及音視頻同步實(shí)時(shí)播放; 2) 可以播放 U盤中本地視頻文件; 3) 可以撥號(hào)連接服務(wù)器,讀取服務(wù)器視頻文件; 4) 能夠?qū)崿F(xiàn)交互操作,實(shí)現(xiàn)對(duì)流媒體播放的暫停、快進(jìn)、快退等功能; 嵌入式流媒體服務(wù)器端需要具備的基本功能如下 07: 1)能夠提供種類豐富的視頻文件:如 AVI, RMVB等; 2)以流式協(xié)議將視頻文件發(fā)送給客戶端,使用戶可以觀看其點(diǎn)播的視頻文件; 3)實(shí)現(xiàn)和客戶端的同步交互式操作,比如實(shí)現(xiàn)同步的暫停、快進(jìn)等操作。 8 4 系統(tǒng)的總體設(shè)計(jì) 該部分主要進(jìn)行系統(tǒng)的整體設(shè)計(jì),需要對(duì)系統(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 視頻點(diǎn)播系統(tǒng)從軟件的角度看通常可以分為四個(gè)層次,即引導(dǎo)加載程 序,嵌入式 LinuX內(nèi)核,文件系統(tǒng)以及用戶應(yīng)用程序 08。經(jīng)過嵌入式 u-boot的移植、 arm-linux內(nèi)核的配置與編譯以及嵌入式根文件系統(tǒng)的創(chuàng)建,基于 ARM處理器平臺(tái)的最小嵌入式系統(tǒng)就完成了。因?yàn)榇藭r(shí)的系統(tǒng)還沒有任何的用戶應(yīng)用程序,但是下載到開發(fā)板可與看到自己的根文件系統(tǒng)目錄了。典型的Bootloader、 bootloader 參數(shù)、內(nèi)核映像和嵌入式根文件系統(tǒng)在 FLASH 上的存儲(chǔ)如下圖所示。 圖 4-1嵌入式最小系統(tǒng)構(gòu)成 GUI圖形用戶界面、通信協(xié)議棧和音視頻解碼器 mppalyer三個(gè)主要模塊集 成在一起就構(gòu)成了論文的嵌入式用戶應(yīng)用程序。與前面的最小嵌入式系統(tǒng)結(jié)合一起就構(gòu)成了視頻點(diǎn)播系統(tǒng)體系。體系結(jié)構(gòu)如圖 4-2所示。 9 圖 4-2 嵌入式流媒體播放系統(tǒng)體系結(jié)構(gòu) 4.2實(shí)現(xiàn)模式: C/S模型 嵌入式視頻點(diǎn)播系統(tǒng)要實(shí)現(xiàn)本地播放和網(wǎng)絡(luò)播放的功能,本地播放是讀取 U盤中預(yù)先存在的視頻文件進(jìn)行播放。網(wǎng)絡(luò)播放時(shí)在播放時(shí)連接服務(wù)器,連接成功后,讀取服務(wù)器的視頻資源,更新網(wǎng)絡(luò)播放列表,點(diǎn)擊相應(yīng)的視頻文件后, QT視頻播放客戶端會(huì)調(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 硬 件 平 臺(tái) 嵌入式微處理器 外 圍 設(shè) 備 10 圖 4-3 VOD 服務(wù)模型 在用戶進(jìn)行播放點(diǎn)播的過程中,服務(wù)器必須要開啟 http 服務(wù)和流媒體傳輸兩個(gè)服務(wù) 10,通過 http 協(xié)議,用戶可以向服務(wù)器端發(fā)送視頻點(diǎn)播的請(qǐng)求,通過 RTP/RTSP進(jìn)行視頻數(shù)據(jù)流的傳輸和控制。播放器的 RTSP 服務(wù)器工作流程 11主要步驟如圖 4-4 所示。 圖 4-4服務(wù)器工作流程 開始 監(jiān)聽 TCP 端口 等待客戶連接 請(qǐng)求連接 接受連接 創(chuàng)建新連接 接受客戶消息 關(guān)閉連接 執(zhí)行客戶消息 響應(yīng)客戶消息 結(jié)束 N N VOD Server Client RTSP 控制信息( TCP) RTP 音、視頻( UDP) RTCP 分組 (UDP) HTTP 點(diǎn)播請(qǐng)求 11 5 系統(tǒng)的詳細(xì)設(shè)計(jì)及實(shí)現(xiàn) 該部分介紹了系統(tǒng)的實(shí)施細(xì)節(jié),包括嵌入式系統(tǒng)開發(fā)環(huán)境的搭建, uboot、kernel移植以及視頻播放主界面的設(shè)計(jì)。 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 / 改變工作目錄后會(huì)被安裝到 /usr/sbin 目錄下,自動(dòng)生成 mkyaffs2image 和 mkyaffs2image-128M。 解壓安裝 LogoMaker 開機(jī)啟動(dòng)畫面制作工具 tar xvzf /tmp/linux/logomaker.tgz C / 在開發(fā)時(shí)經(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一般有兩種啟動(dòng)模式即啟動(dòng)加載模式和下載模式。下載模式主要是針對(duì)嵌入式開發(fā)人員的,因?yàn)榍度胧揭浦策^程中的各種調(diào)試基本都是這種模式來實(shí)現(xiàn)的,下載模式可以通過串口、 NFS、 TFTP 等方式實(shí)現(xiàn)。在下載模式下, u-boot為用戶提供一個(gè)命令行接口,通過接口可以使用 u-boot 提供的一些命令進(jìn)行相應(yīng)操作。啟動(dòng)加載模式 是產(chǎn)品發(fā)布時(shí)必須置為的模式,在這種模式下啟動(dòng)系統(tǒng)不需要用戶的干涉,自動(dòng)從目標(biāo)主機(jī)的存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到內(nèi)存中運(yùn)行。 5.2.2 在嵌入式 Linux 中 BootLoader 的重要性 由于 BootLoader 需要直接操作硬件,所以想在嵌入式世界建立一個(gè)通用的引導(dǎo)加載程序是很困難的,因?yàn)橐话悴煌挠布脚_(tái)不同的操作系統(tǒng)所需的加載引導(dǎo)程序不同。所能做的就是讓一種加載引導(dǎo)程序支持盡量多的平臺(tái),賦予它良好的移植性。 U-boot 就是支持多平臺(tái)多操作系統(tǒng)的優(yōu)秀引導(dǎo)加載程序,這也是U-boot 的優(yōu)勢(shì)。因而 針對(duì)不同的嵌入式平臺(tái)要進(jìn)行加載引導(dǎo)程序相關(guān)的修改以滿足項(xiàng)目需求。 5.2.3 u-boot 引導(dǎo)流程 Bootloader啟動(dòng)流程大多經(jīng)過兩個(gè)階段,即啟動(dòng)可以分為 stage1和 stage2。stage1 完成初始化硬件的工作,為 stage2 準(zhǔn)備足夠的內(nèi)存空間,并將 stage2可執(zhí)行映像復(fù)制到內(nèi)存中,設(shè)置堆棧,然后轉(zhuǎn)調(diào)到 stage2的 C入口。 Stage2一般包括以下幾個(gè)步驟,初始化本階段要用到的硬件設(shè)備,將制作好的內(nèi)核映像和根文件系統(tǒng)從 Flash 讀到 RAM中,調(diào)用內(nèi)核,跳轉(zhuǎn)到 MEMSTART+0x8000 地址 處,一般是使用 x030008000 地址。啟動(dòng)的 stagel 一般用匯編語(yǔ)言來實(shí)現(xiàn),匯編語(yǔ)言能更加高效的實(shí)現(xiàn)對(duì)底層硬件的操作且代碼量小,對(duì)應(yīng)的是 start.S 文件。而stage2 則一般用 C 語(yǔ)言來實(shí)現(xiàn),這樣做不僅可以實(shí)現(xiàn)更加復(fù)雜的功能,而且具有良好的可讀性和移植性。啟動(dòng)代碼中 C 語(yǔ)言的主函數(shù)是在 lib_arm/board.c中的 start_armboot。兩個(gè)階段的引導(dǎo)的主要流程如下所示。 14 圖 5-2 兩個(gè)階段啟動(dòng)流程圖 5.2.4 u-boot 移植步驟 移植 就是根據(jù)開發(fā)板和系統(tǒng)需求做相應(yīng)的修改。 U-Boot 還沒有支持三星S3C2440微處理器,移植仍是用 U-Boot 支持的友善之臂 SBC2410 的文件作藍(lán)本來移植,因?yàn)?SBC2410 和 mini2440 硬件配置最為接近,使用一個(gè)模板可以加快移植的速度和效率。所以移植所要做的就是針 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)核的啟動(dòng)參數(shù)。 調(diào)用內(nèi)核 Stage1: 檢測(cè)內(nèi)存映射 15 5.2.5 建立開發(fā)板文件并測(cè)試編譯環(huán)境 修改頂層 Makefile 目的:定義交叉編譯工具鏈和開發(fā)板配置選項(xiàng)。 約定:代碼中 +和 -號(hào)表示增刪 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)本,因?yà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 測(cè)試編譯環(huán)境 在 uboot頂層目錄執(zhí)行 make mini2440_config make 編譯通過如圖 5-3 所示。以上測(cè)試通過后,說明編譯環(huán)境和基本的開發(fā)板代碼創(chuàng) 16 建都沒有問題。下面所做工作就是針對(duì) mini2440 進(jìn)行修改,以滿足項(xiàng)目需求。Uboot修 改主要經(jīng)歷四個(gè)階段,第一階段修改啟動(dòng)代碼,包括初始化 CPU頻率,代碼重定向等。第二階段修改初始化代碼,主要是 mini2440 平臺(tái)初始化。第三階段是初始化外設(shè),包括 LCD、網(wǎng)卡和 YAFFS2 文件系統(tǒng)支持等。第四階段修改編譯配置文件,在所有有編譯條件的地方加入對(duì) mini2440 的編譯支持,這樣前面修改的代碼才會(huì)在編譯時(shí)編譯進(jìn)來。下面是對(duì) u-boot源碼修改后編譯的結(jié)果。 圖 5-3 uboot 編譯結(jié)果 5.3 linux 內(nèi)核配置與編譯 5.3.1 內(nèi)核簡(jiǎn)介 內(nèi) 核是所有 linux 系統(tǒng)的核心軟件組件,其性能很大程度上決定了整個(gè)系統(tǒng)的性能。本系統(tǒng)中,嵌入式 Linux 內(nèi)核選擇 。 linux- 本身已經(jīng)提供了對(duì) mini2440 的部分支持。內(nèi)核移植就是根據(jù)開發(fā)系統(tǒng)的需要對(duì)已有的系統(tǒng)進(jìn)行裁減,保留需要的模塊去掉不需要的模塊,生成一個(gè)適合目標(biāo)嵌入式系統(tǒng)的過程。 17 5.3.2 建立目標(biāo)平臺(tái) 指定平臺(tái)交叉編譯變量 cd linux- vi Makefile -ARCH ?= $(SUBARCH) -CROSS_COMPILE ?= +ARCH ?= arm +CROSS_COMPILE ?= arm-linux- 這里面的 ARCH ?= arm 是指定目標(biāo)平臺(tái)為 arm 平臺(tái), 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ā)板時(shí)鐘源頻率 在 mach-mini2440.c( 就是剛剛通過復(fù)制 mach-smdk2440.c 得到的 )static void _init smdk2440_map_io(void)函數(shù)中,把原來的 16934400(代表原 SMDK2440 目標(biāo)板上的晶振是 16.9344MHz)改為 mini2440 開發(fā)板上實(shí)際使用的 12000000(代表 mini2440 開發(fā)板上的晶振 12MHz)。 克隆 SMDK2440 成 MINI2440 平臺(tái) 克隆自己的 mini2440 平臺(tái),需要把 mach-mini2440.c 中所有的 smdk2440 字符串改為 mini2440 。 這 里 使 用 批 處 理 命 令 在 命 令 模 式 下 輸入: %s/smdk2440/mini2440/g。 編 譯測(cè)試 cd linux- make mini2440_defconfig /使用 Linux 官方自帶的 mini2440 配置 make zImage /編譯內(nèi)核,生成的內(nèi)核映像 zImage 位于 arch/arm/boot 編譯通過,以上測(cè)試通過后,說明編譯環(huán)境和基本的開發(fā)板的代碼創(chuàng)建都沒有問題。下載到內(nèi)核,從串口可以看到可以啟動(dòng)信息,但是大部分的定制的驅(qū)動(dòng)還沒有添加,根文件系統(tǒng)也沒有制作。下面進(jìn)行的是主要硬件驅(qū)動(dòng)文件的移植。 18 5.3.3 移植 Nand 驅(qū)動(dòng)并修改分 區(qū)信息 雖然比較新的內(nèi)核 Linux 在 nand_ids.c 文件中自帶了部分 Nand Flash驅(qū)動(dòng),但是系統(tǒng)默認(rèn)的分區(qū)不是該項(xiàng)目所需的。為了適合系統(tǒng)自帶的 Nand Flash 驅(qū)動(dòng)接口,在 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 /編輯平 臺(tái)初始化文件 /創(chuàng)建 MTD 分區(qū)表 static struct mtd_partition mini2440_default_nand_part = 0 = .name = supervivi, /bootloader 分區(qū),對(duì)應(yīng)設(shè)備塊 /dev/mtdblock0 .size = 0x00040000, /大小 256k .offset = 0, /起始地址 0x00000000 1 = .name = param, / supervivi 的參數(shù)區(qū),對(duì)應(yīng)塊設(shè)備 /dev/mtdblock1 .offset = 0x00040000, .size = 0x00020000, /大小 128K 2 = .name = Kernel, /內(nèi)核分區(qū),大小為 5M,對(duì)應(yīng) /dev/mtdblock2 .offset = 0x00060000, .size = 0x00500000, /大小 5M 3 = .name = root, /根文件系統(tǒng)分區(qū),對(duì)應(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è)置表,一塊板對(duì)應(yīng)一個(gè)表 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)建一個(gè) s3c2410_platform_nand 類型的 mini2440_nand_info 結(jié)構(gòu)體 static struct s3c2410_platform_nand mini2440_nand_info = .tacls = 20, /nand電平 nWE開始時(shí)間 .twrph0 = 60, / nWE持續(xù)時(shí)間 .twrph1 = 20, /nWE結(jié)束時(shí)間 .nr_sets = ARRAY_SIZE(mini2440_nand_sets), .sets = mini2440_nand_sets, .ignore_unset_ecc = 1,; /平臺(tái)設(shè)備結(jié)構(gòu)體數(shù)組,把 nand flash 設(shè)備添加到目標(biāo)平臺(tái)設(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)多了一個(gè) yaffs2 目錄 ,說明 yaffs2 補(bǔ)丁已經(jīng)成功打上。 5.3.5 移植 DM9000 網(wǎng)卡驅(qū)動(dòng) 網(wǎng) 卡 是 一 個(gè) 平 臺(tái) 設(shè) 備 , 在 目 標(biāo) 平 臺(tái) 初 始 化 代 碼 中/arch/arm/mach-s3c2440/mach-mini2440.c 填寫相應(yīng)的結(jié)構(gòu)表,具體添加如下: 添加網(wǎng)卡設(shè)備的資源設(shè)置,才能夠和 DM9000 網(wǎng)卡驅(qū)動(dòng)接口配合使用 : 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ū)動(dòng)傳入 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)卡平臺(tái)添加設(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ū)動(dòng) 由于 Linux- 內(nèi)核已經(jīng)支持 S3C2440 的 LCD 控制器驅(qū)動(dòng), LCD 工作中最關(guān)鍵的就是取決于時(shí)鐘頻率 (Clock frequency)參數(shù)的設(shè)置, Linux- 內(nèi)核是通過一個(gè)稱為“ pixclock”的參數(shù)來調(diào)節(jié)。這里實(shí)際設(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ū)動(dòng) 由于 Linux- 內(nèi)核沒有包含支持 S3C2440 的觸摸屏驅(qū)動(dòng), 因此需要添加設(shè)計(jì)一個(gè)觸摸屏驅(qū)動(dòng)文件,放置于 linux-src/drivers/input/touchscreen 目錄下,增 加 一 個(gè) 友 善 之 臂 提 供 的 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ū)動(dòng) 由于 Linux- 已經(jīng)自帶了 S3C2440 芯片的 SD 卡驅(qū)動(dòng),所以只需在初始化代碼中加入 SD 平臺(tái)設(shè)備結(jié)構(gòu)就可以。在 nand flash 平臺(tái)結(jié)構(gòu)后面添加如下代碼: vi arch/arm/mach-s3c2440/mach-mini2440.c 在平臺(tái)初始化代碼 mini2440.c 文件中添加 SD 卡設(shè)備結(jié)構(gòu)所需的頭文件 include include /創(chuàng)建 s3c2440 的 SD 控制器的平臺(tái)數(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)平臺(tái)設(shè)備集中 static struct platform_device *mini2440_devices _initdata = &s3c_device_usb, &s3c_device_lcd, &mini2440_device_eth, &s3c_device_nand, &s3c_device_sdi,; 注意,上面驅(qū)動(dòng)修改好之后,每一步都要執(zhí)行 make menuconfig在菜單選項(xiàng)中選中相應(yīng)的配置項(xiàng),這樣在編譯時(shí)修改的代碼才會(huì)起效。最后在 linux-頂層目錄執(zhí)行 make zImage 編譯 ,會(huì)在 arch/arm/boot目錄下產(chǎn)生新的 zImage。結(jié)果如圖 5-4所示。 23 圖 5-4 linux- 編譯結(jié)果 5.4流媒體播放器設(shè)計(jì) 5.4.1 播放器主界面工作流程 根據(jù)項(xiàng)目需求,播放器主界面的工作流程圖如下: 24 圖 5-5 播放器主界面工作流程 5.4.2 播放解碼處理 自己編寫的播放器客戶端并沒有解碼的功能,而是通過在虛擬機(jī)下 Linux交叉編譯器交叉編譯 MPlayer,使得 MPlayer 能在 ARM架構(gòu)的平臺(tái)上運(yùn)行,實(shí)現(xiàn)嵌入式平臺(tái)的流媒體音視頻解碼播放,優(yōu)化并改善傳輸性能和質(zhì)量 12。由于MPlayer是個(gè)開源軟件,內(nèi)置了多種解碼器,可以播放很多主流音視頻文件,被稱為嵌入式 linux 中最好的播放工具。在交叉編譯時(shí)如果不使用默認(rèn)的庫(kù)文件,需要進(jìn)行相關(guān)庫(kù)移植,以達(dá)到音視頻解碼的功能,屬于做根文件系統(tǒng)模塊。 5.4.3 播放器主界面設(shè)計(jì) Qt/Embedded 是著名的圖形庫(kù) Qt 開發(fā)商 Trolltech 專門面向嵌入式系統(tǒng)開發(fā)的 Qt 版本。這是一種基于 C+圖形用戶界面應(yīng)用程序構(gòu)架,使 嵌入式開發(fā)者可客戶端主界面 顯示界面 請(qǐng)求本地資源 撥服 務(wù)器 ip 請(qǐng)求網(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)架 整個(gè)客戶端軟件基于 Qt Embedded 程序框架開發(fā)??蛻舳塑浖譃椋阂曨l信息接收 顯示模塊和視頻播放模塊,每個(gè)模塊對(duì)應(yīng)一個(gè)窗體。啟動(dòng)開發(fā)板后,進(jìn)入播放器主界面,主界面有兩個(gè)按鈕選項(xiàng),分別是本地播放和網(wǎng)絡(luò)播放。選擇不同的按鈕進(jìn)入不同的播放模式,上面角有個(gè)多選項(xiàng)卡,選項(xiàng)卡里有 netplay 和localplay不同的播放選項(xiàng)以及幫助信息選項(xiàng)。主界面如下圖所示。 圖 5-7 播放器主界面界面 圖形用戶界面( GUI)模塊主要負(fù)責(zé)用戶和系統(tǒng)的交互,本系統(tǒng)中 GUI 模塊本地播放 網(wǎng)絡(luò)播放 接受信息 信息顯示 數(shù)據(jù)接收 解碼 播放 客戶操作 26 的開發(fā)主要由 Qt/Embedded工具完成 13。 QtCreator是跨平臺(tái)輕量級(jí)集成開發(fā)環(huán)境,使用它編寫圖形用戶界面,創(chuàng)建 GUI 的小窗口部件界面。其中 QWidget類是所有用戶界面對(duì)象的基類 , 圖形用戶界面應(yīng)用程序的控制流 就是 該 類 負(fù)責(zé) 。圖形用戶主界面主要實(shí)現(xiàn)視頻播放的選擇和對(duì)用戶交互式操作的控制。 代碼的啟動(dòng)是從主函數(shù) main()開始的,在這里啟動(dòng)第一個(gè)界面即播放器的主界面。 int main( int argc, char * argv ) . Main_vod m_vod; m_vod.show(); /打開第一個(gè)界面 . 主界面窗體 Main_vod 是繼承 QDialog類。 QDialog類是對(duì)話框窗口的基類,對(duì)話框窗口是主要用于短期任務(wù)以及和用戶進(jìn)行簡(jiǎn)要通訊的頂級(jí)窗口。這里使用的是 QDialog 非模式即通過 show()顯示。播放窗口按鍵間通信通過 signal 和slot 來接收信號(hào), QT 信號(hào)槽機(jī)制 signal 和 slot 機(jī)制真正實(shí)現(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)造一個(gè)父對(duì)象為 parent、名稱為 name 的對(duì)話框,非 模式 show()顯示,產(chǎn)生一個(gè)沒有邊際的窗體 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ù)實(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 來接收信號(hào)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論