版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> 中國(guó)·武漢</b></p><p><b> 二〇一七年五月</b></p><p> 題 目基于Apple Darwin的Android客戶端播放器的設(shè)計(jì)與實(shí)現(xiàn)</p><p>
2、 Design and Implementation of Android Client Player Based on Apple Darwin</p><p> 姓 名學(xué) 號(hào)</p><p> 專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 指導(dǎo)教師職稱/學(xué)位講師/碩士</p><p> 分類號(hào)
3、 密級(jí)</p><p> 華中農(nóng)業(yè)大學(xué)楚天學(xué)院本科畢業(yè)論文</p><p> 基于Apple Darwin的Android客戶端播放器的設(shè)計(jì)與</p><p><b> 實(shí)現(xiàn)</b></p><p> Design and
4、Implementation of Android Client Player Based on Apple Darwin</p><p> 華中農(nóng)業(yè)大學(xué)楚天學(xué)院</p><p><b> 二〇一七年五月</b></p><p> 華中農(nóng)業(yè)大學(xué)楚天學(xué)院畢業(yè)論文(設(shè)計(jì))</p><p><b> 原創(chuàng)性聲
5、明</b></p><p> 本人鄭重聲明:所呈交的畢業(yè)論文(設(shè)計(jì)),是本人在導(dǎo)師的指導(dǎo)下,獨(dú)立進(jìn)行研究所取得的成果。除文中已經(jīng)注明引用的內(nèi)容外,本論文(設(shè)計(jì))不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫過的作品成果。本人完全意識(shí)到本聲明的法律結(jié)果由本人承擔(dān)。</p><p><b> 作者簽名:</b></p><p> 日 期
6、: 年 月 日</p><p><b> 目 錄</b></p><p><b> 摘要I</b></p><p><b> 關(guān)鍵詞I</b></p><p> AbstractI</p><p> Key wo
7、rdsI</p><p> 1 系統(tǒng)概述和可行性分析1</p><p> 1.1 系統(tǒng)概述1</p><p> 1.2 可行性分析1</p><p> 2 開發(fā)環(huán)境及主要技術(shù)分析2</p><p> 2.1 開發(fā)工具Android Studio2</p><p> 2.2
8、 開發(fā)環(huán)境Android平臺(tái)2</p><p> 2.3 開發(fā)語言JAVA2</p><p> 2.4 RTSP協(xié)議2</p><p> 2.5 H.264編解碼規(guī)范3</p><p> 2.6 HLS協(xié)議4</p><p> 2.7 SDP協(xié)議4</p><p> 2.
9、8 G711A音頻4</p><p> 2.9 TS流簡(jiǎn)介4</p><p> 2.10 流媒體技術(shù)5</p><p> 3 系統(tǒng)分析與設(shè)計(jì)5</p><p> 3.1 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)5</p><p> 3.1.1 客戶端與Darwin服務(wù)器關(guān)系5</p><p>
10、3.1.2 Darwin流媒體服務(wù)器核心流程5</p><p> 3.2 Android客戶端結(jié)構(gòu)分析7</p><p> 3.3 軟件設(shè)計(jì)8</p><p> 3.3.1 客戶端軟件總體設(shè)計(jì)8</p><p> 3.3.2 功能時(shí)序圖9</p><p> 3.4 客戶端解碼設(shè)計(jì)11</p&
11、gt;<p> 3.4.1 直播11</p><p> 3.4.2 獲取直播列表12</p><p> 3.4.3 DirectShow采集庫中的回調(diào)12</p><p> 3.4.4 LibEasyPlayer庫中的回調(diào)13</p><p> 3.4.5 網(wǎng)絡(luò)RTSP流回調(diào)13</p><
12、;p> 3.4.6 云臺(tái)方向15</p><p> 3.5 異常分析16</p><p><b> 4 系統(tǒng)測(cè)試17</b></p><p> 4.1 測(cè)試方法17</p><p> 4.2 測(cè)試過程17</p><p> 4.2.1 登錄注冊(cè)及忘記密碼測(cè)試17<
13、;/p><p> 4.2.2 設(shè)置19</p><p> 4.2.3 Camera及移動(dòng)設(shè)備列表20</p><p> 4.2.4 云臺(tái)控制功能測(cè)試21</p><p> 4.2.5 云臺(tái)遠(yuǎn)程語音功能測(cè)試22</p><p> 4.2.6 測(cè)試總結(jié)22</p><p><b
14、> 5 總結(jié)22</b></p><p><b> 參考文獻(xiàn)22</b></p><p><b> 致謝23</b></p><p><b> 摘 要</b></p><p> 本課題是基于Apple Darwin流媒體服務(wù)器整體方案
15、中的Android客戶端播放器部分,該客戶端主要功能是可以查看在線Camera設(shè)備、移動(dòng)設(shè)備、NVR所推送的實(shí)時(shí)流媒體視頻,以及遠(yuǎn)程控制在線Camera設(shè)備的方向和發(fā)送實(shí)時(shí)語音。其主要過程是,客戶端向流媒體消息管理服務(wù)器獲取在線設(shè)備列表,選中某個(gè)在線設(shè)備后,客戶端會(huì)發(fā)送播放請(qǐng)求給消息管理服務(wù)器,消息管理服務(wù)器將相應(yīng)的請(qǐng)求發(fā)送給相對(duì)應(yīng)的Camera設(shè)備,在收到消息后,Camera設(shè)備推送視頻流到流媒體服務(wù)器,再由流媒體服務(wù)器將視頻流分發(fā)到
16、該客戶端,客戶端解碼后可播放對(duì)應(yīng)的視頻。經(jīng)測(cè)試,設(shè)備的視頻流進(jìn)行顯示、播放,非常穩(wěn)定、易用。 對(duì)云臺(tái)得控制非常準(zhǔn)確,點(diǎn)擊相應(yīng)得方向后,云臺(tái)得反應(yīng)速度很快,遠(yuǎn)程語音播放清晰沒有雜音。</p><p><b> 關(guān)鍵詞</b></p><p> 流媒體;安卓客戶端;Apple Darwin;遠(yuǎn)程;</p><p><b> Abst
17、ract</b></p><p> With the rapid development of mobile Internet and the improvement of living standards, people require more and more safety in , as a result the syst
18、em is produced. This system is mainly used to meet the safety requirement, such as checking real-time videos, controlling camera, remote telephone, recording video and so on. </p><p> In this paper, AHP(ana
19、lytic hierarchy process) is adopted to divide the whole project into five hierarchies. Starting from the basic explanation of the project to the meaning, requirement and the significations of realizing it, the paper demo
20、nstrates the algorithmic logic and the prospect and feasibility of it. Also, the paper is divided into different parts. Is also studies the platform formation of the streaming media server based on Apple Darwin. This pap
21、er mainly focuses on the framework dev</p><p><b> Key words</b></p><p> Stream Media;Android Client;Apple Darwin;Remote;</p><p> 1 系統(tǒng)概述和可行性分析</p><p><
22、b> 1.1 系統(tǒng)概述</b></p><p> 隨著手機(jī)的普及很多新興行業(yè)崛地而起,發(fā)展十分迅速也引發(fā)了很多互聯(lián)網(wǎng)的操作。發(fā)展安全性、實(shí)時(shí)性成了互聯(lián)網(wǎng)需要調(diào)整的目標(biāo),在信息和通訊技術(shù)上不斷開拓,構(gòu)筑開放共享、敏捷高效、安全可信的信息化架構(gòu)系統(tǒng)。通過系統(tǒng)集成,硬件數(shù)據(jù)共享接口實(shí)現(xiàn)人們的要求。</p><p> 在移動(dòng)互聯(lián)網(wǎng)的飛速成長(zhǎng)下,移動(dòng)客戶端的使用數(shù)據(jù)量正在的逐
23、步的逼近PC端,而這一現(xiàn)象主要的推力應(yīng)歸公于手機(jī)APP應(yīng)用的迅速發(fā)展。不僅如此,WIFI的覆蓋范圍不斷拓寬,這也使得移動(dòng)端APP應(yīng)用的發(fā)展空間有了更大的平臺(tái),而這點(diǎn)一直是PC端比較難超越的限制。手機(jī)客戶端豐富的應(yīng)用程序從各方面影響著日常生活。隨著智能手機(jī)的快速發(fā)展,移動(dòng)應(yīng)用程序鋪天蓋地的發(fā)展起來,日常生活已經(jīng)離不開手機(jī)APP。</p><p> 智能家居伴隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,實(shí)現(xiàn)了用戶對(duì)互聯(lián)網(wǎng)的粘連特性。智能
24、家居以住宅為平臺(tái),利用綜合布線技術(shù)、網(wǎng)絡(luò)通信技術(shù)、安全防范技術(shù)、自動(dòng)控制技術(shù)、音視頻技術(shù)將家居生活有關(guān)的設(shè)施集成,構(gòu)建高效的住宅設(shè)施與家庭日程事務(wù)的管理系統(tǒng),提升家居安全性、便利性、舒適性、藝術(shù)性,并實(shí)現(xiàn)環(huán)保節(jié)能的居住環(huán)境。</p><p> 在快速發(fā)展的互聯(lián)網(wǎng)前提下,衍生了安卓與智能家居的誕生。現(xiàn)在市面上廣泛推出的螢石、小米、Wulian等都已經(jīng)在實(shí)現(xiàn)智能家居的發(fā)展。在互聯(lián)網(wǎng)的支撐下,智能家居可以實(shí)現(xiàn)隨時(shí)隨地
25、實(shí)現(xiàn)將信息、數(shù)據(jù)等通過智能家居實(shí)現(xiàn)主動(dòng)調(diào)用信息,主動(dòng)向家居發(fā)出請(qǐng)求從而達(dá)到智能家居的移動(dòng)化效果。</p><p> 在該課題中,基于Apple Darwin開發(fā)的安卓播放器主要用于智能家居對(duì)攝像頭以及對(duì)移動(dòng)設(shè)備的控制,用戶可以根據(jù)開發(fā)的APP進(jìn)行對(duì)攝像頭的控制、錄音、操控等功能。目前廣泛應(yīng)用于幼兒園監(jiān)控、學(xué)校監(jiān)控、家庭查看等。</p><p> 伴隨移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,移動(dòng)客戶端的使
26、用數(shù)據(jù)量正在的逐步的逼近PC端,而這一現(xiàn)象主要的推力應(yīng)歸公于手機(jī)APP應(yīng)用的迅速發(fā)展。不僅如此,WIFI的覆蓋范圍不斷拓寬,這也使得移動(dòng)端APP應(yīng)用的發(fā)展空間有了更大的平臺(tái),而這點(diǎn)一直是PC端比較難超越的限制。手機(jī)客戶端豐富的應(yīng)用程序從各方面影響著日常生活。隨著智能手機(jī)的快速發(fā)展,移動(dòng)應(yīng)用程序鋪天蓋地的發(fā)展起來,日常生活已經(jīng)離不開手機(jī)APP。</p><p> 本系統(tǒng)采用當(dāng)下最為流行的Android操作系統(tǒng)作為
27、客戶端端的操作系統(tǒng)平臺(tái),開發(fā)工具使用Android Studio,采用開源的Client開源流媒體播放器提供的SDK接口進(jìn)行開發(fā)。</p><p><b> 1.2 可行性分析</b></p><p> (1)經(jīng)濟(jì)可行性分析:</p><p> 本系統(tǒng)主要用于安卓端,做為智能家居生活所需的基礎(chǔ)組件開發(fā),根據(jù)網(wǎng)絡(luò)ping通設(shè)備后進(jìn)行連接操作
28、,并對(duì)連接的設(shè)備、攝像頭等可以進(jìn)行基本的操作和處理。在經(jīng)濟(jì)上,做為智能家居的基本組件,價(jià)格低廉,可以依靠網(wǎng)絡(luò)為第二發(fā)展路徑,保證了操作的完整性,且可移動(dòng),可行性發(fā)展良好。</p><p> ?。?)用戶使用可行性分析:</p><p> 本系統(tǒng)研發(fā)成功之后安裝APP在手機(jī)端展示使用,在用戶擁有APP以及網(wǎng)絡(luò)連接成功的許可下,對(duì)智能家居組件可以實(shí)現(xiàn)基本的操作,本系統(tǒng)主要用于對(duì)安卓播放器的使
29、用,對(duì)播放器進(jìn)行配置、錄音、移動(dòng)攝像頭方向等,可以進(jìn)行一個(gè)基本的操作。用戶只要在手機(jī)上安裝APP客戶端就可以使用本系統(tǒng),方便而實(shí)用。</p><p> 2 開發(fā)環(huán)境及主要技術(shù)分析</p><p> 2.1 開發(fā)工具Android Studio</p><p> Android Studio是Google官方基于Intelli JIDEA開發(fā)的一款A(yù)ndroid
30、應(yīng)用開發(fā)工具,Android Studio提供了集成的Android開發(fā)工具用于開發(fā)和調(diào)試。在IDEA的基礎(chǔ)上,Android Studio提供:基于Gradle的構(gòu)建支持;Android 專屬的重構(gòu)和快速修復(fù);提示工具以捕獲性能、可用性、版本兼容性等問題;支持ProGuard和應(yīng)用簽名;基于模板的向?qū)砩沙S玫腁ndroid應(yīng)用設(shè)計(jì)和組件;功能強(qiáng)大的布局編輯器,可以讓你拖拉UI控件并進(jìn)行效果預(yù)覽。</p><p&
31、gt; 2.2 開發(fā)環(huán)境Android平臺(tái)</p><p> Android是一組面向移動(dòng)設(shè)備的軟件包,它包含一個(gè)操作系統(tǒng)、中間件和關(guān)鍵應(yīng)用程序、Android SDK的預(yù)覽版提供必需的開發(fā)工具和應(yīng)用程序接口,基于這些,我們就可以使用編程語言在Android平臺(tái)上開發(fā)應(yīng)用程序了。</p><p> Android系統(tǒng)架構(gòu)基本分為應(yīng)用(Application)、應(yīng)用框架(Applica
32、tion Framework)、庫函數(shù)(Libraries)、運(yùn)行時(shí)環(huán)境(Android Runtime)、Linux內(nèi)核(Linux Kernel)。</p><p> Android平臺(tái)提供了一個(gè)自由開發(fā)的環(huán)境,不會(huì)受到各種規(guī)則的阻擾。在這種環(huán)境下開發(fā)人員在此基礎(chǔ)上會(huì)開發(fā)出各種別致的應(yīng)用程序,但同時(shí)也帶來一個(gè)大的難題,如何控制血腥、暴力、情色方面的程序和游戲。</p><p> 2
33、.3 開發(fā)語言JAVA</p><p> Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。</p><p> Java具有簡(jiǎn)單性、面向?qū)ο蟆⒎植际?、健壯性、安全性、?/p>
34、臺(tái)獨(dú)立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn)Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。</p><p> 2.4 RTSP協(xié)議</p><p> RTSP(Real Time Streaming Protocol)實(shí)時(shí)流媒體協(xié)議是用于在協(xié)議客戶端和協(xié)議服務(wù)器端之間創(chuàng)建實(shí)時(shí)流回話的一個(gè)協(xié)商過程,該協(xié)議是TCP/IP協(xié)議棧體系里面的一種應(yīng)用層的傳輸協(xié)議。協(xié)議
35、客戶端能夠利用實(shí)時(shí)流媒體協(xié)議來對(duì)協(xié)議客戶端以及協(xié)議服務(wù)器之間存在的多條流媒體串流進(jìn)行控制,這樣就能夠?qū)崿F(xiàn)對(duì)于音視頻流數(shù)據(jù)信息的點(diǎn)播以及傳輸控制等操作。</p><p> 當(dāng)我們需要?jiǎng)?chuàng)建并且對(duì)一個(gè)或多個(gè)時(shí)間的同步且連續(xù)的音視頻的媒體數(shù)據(jù)流控制的時(shí)候,我們需要用到RTSP協(xié)議,實(shí)際上就是實(shí)時(shí)流協(xié)議。為了能夠?qū)崿F(xiàn)實(shí)時(shí)音視頻數(shù)據(jù)的按需分配流和受控(快進(jìn),暫停),這套協(xié)議之中給我們提供了能夠進(jìn)行實(shí)現(xiàn)的框架。這樣的實(shí)時(shí)流控
36、制協(xié)議可以用在對(duì)多個(gè)數(shù)據(jù)發(fā)送的會(huì)話,通過UDP或者TCP方式,以及基于RTP發(fā)送方式來實(shí)現(xiàn)。</p><p> RTSP協(xié)議在交互過程中的步驟如下:請(qǐng)求服務(wù)端將相關(guān)的服務(wù)請(qǐng)求發(fā)給服務(wù)提供端,當(dāng)服務(wù)提供端受到了相關(guān)的清求之后對(duì)其進(jìn)行處理,然后把回復(fù)消息發(fā)送到請(qǐng)求服務(wù)端,請(qǐng)求服務(wù)端對(duì)回復(fù)進(jìn)行接收然后對(duì)其進(jìn)行處理。請(qǐng)求服務(wù)端既能是客戶端又能為服務(wù)器,同樣的,服務(wù)提供端既可以是客戶端又能為服務(wù)器。在進(jìn)行交互的過程中,發(fā)
37、送的請(qǐng)求信息中主要包括請(qǐng)求的執(zhí)行方法和所需操作的參數(shù)。RTSP協(xié)議方法的詳細(xì)說明如表2-1所示。</p><p> 表2-1 RTSP協(xié)議的方法</p><p> 2.5 H.264編解碼規(guī)范</p><p> 標(biāo)準(zhǔn)化的視頻壓縮技術(shù)的出現(xiàn)使得圖像技術(shù)得到了更為廣泛的應(yīng)用,例如DVD視頻和數(shù)字電視徹底改變了家庭娛樂以及廣播電視的傳統(tǒng)模式。圖像視頻在互聯(lián)網(wǎng)中的應(yīng)用
38、與MPEG標(biāo)準(zhǔn)中的MPEG4有密不可分的聯(lián)系,ITU-T H.263標(biāo)準(zhǔn)是當(dāng)前大多數(shù)視頻會(huì)議使用的視頻壓縮標(biāo)準(zhǔn)。</p><p> MPEG4視覺標(biāo)準(zhǔn)和H.263標(biāo)準(zhǔn)是在1995年開始制定的,視頻編碼以及視頻壓縮技術(shù)是這兩種標(biāo)準(zhǔn)建立的技術(shù)基礎(chǔ),對(duì)此類標(biāo)準(zhǔn)進(jìn)行負(fù)責(zé)的是電影專家集團(tuán)以及視頻編碼專家組。在這兩種標(biāo)準(zhǔn)的開發(fā)進(jìn)行到后期的時(shí)候,出現(xiàn)了一套比和更加優(yōu)秀的新的標(biāo)準(zhǔn),也就是高級(jí)視頻編碼標(biāo)準(zhǔn),這套標(biāo)準(zhǔn)所提供的圖像視
39、頻壓縮效果更加優(yōu)秀,同時(shí)其在保證比特率非常低的同時(shí)還保證了高品質(zhì)。</p><p> 在2001年,國(guó)際標(biāo)準(zhǔn)化組織中的運(yùn)動(dòng)圖像專家組(MPEG)逐步認(rèn)知到H.26L標(biāo)準(zhǔn)潛在的優(yōu)點(diǎn),于是聯(lián)合了視頻編碼專家組以及動(dòng)態(tài)圖像專家組共同成立了一個(gè)聯(lián)合視頻組,并對(duì)的優(yōu)化以及未來的發(fā)展進(jìn)行深入的研究。實(shí)現(xiàn)了把“模型”發(fā)展成一個(gè)更加完善和健全的國(guó)際標(biāo)準(zhǔn)協(xié)議規(guī)范草案,高級(jí)視頻編碼就是這套新標(biāo)準(zhǔn)的官方名稱。是這套新標(biāo)準(zhǔn)之前的擬定工
40、作名稱,是其國(guó)際電聯(lián)證件號(hào)碼,這兩個(gè)早已經(jīng)先入為主,家喻戶曉。</p><p> H.264編解碼協(xié)議規(guī)范可以用四個(gè)方面概括其技術(shù)特點(diǎn),第一個(gè)方面是關(guān)注實(shí)用性問題,摒棄了原本這類編解碼技術(shù)里面的一些存在著缺陷的編碼方案,如機(jī)遇內(nèi)容的編碼等,以更加簡(jiǎn)潔的格式,以提升編碼效率為目的,從而運(yùn)用合適的技術(shù)。第二方面則是使用了多種的新算法和新技術(shù),在混合編碼的基礎(chǔ)上,新增了4*4整數(shù)變換技術(shù)、基于內(nèi)容的變長(zhǎng)編碼技術(shù)及多幀
41、預(yù)測(cè)和幀內(nèi)預(yù)測(cè)技術(shù)等。第三方面,對(duì)于算法而言,突出了信道的特點(diǎn)。從分層的角度來看,信道編碼和信源編碼在形式上采取了分離。第四方面則是使用了針對(duì)IP以及無線網(wǎng)絡(luò)的相關(guān)策略,為了方便那些經(jīng)過壓縮之后的視頻在丟包率較高和誤碼率較高的網(wǎng)絡(luò)環(huán)境之中進(jìn)行傳輸,使用了一些用來對(duì)差錯(cuò)進(jìn)行消除的工具。</p><p> 所具有的主要優(yōu)點(diǎn)如下:圖像質(zhì)量非常高。H.264標(biāo)準(zhǔn)想要實(shí)現(xiàn)的是在對(duì)圖像進(jìn)行還原的過程之中能夠保持較高質(zhì)量,同
42、時(shí)還為此采用了一系列的算法,其目的為實(shí)現(xiàn)圖像的高質(zhì)量;為了能夠和不同的信道相適應(yīng),以及各種應(yīng)用形式,區(qū)分各種圖像層次從而采用相應(yīng)的算法;在熵編碼等步驟中,為達(dá)到較低比特率的目標(biāo)從而采用節(jié)約碼流的算法;系統(tǒng)的健壯性增加,H.264提供了掩蓋錯(cuò)誤的組件并應(yīng)用了環(huán)路濾波結(jié)構(gòu)。</p><p><b> 2.6 HLS協(xié)議</b></p><p> HLS協(xié)議即HTTP
43、Live Streaming。一個(gè)可實(shí)現(xiàn)流媒體的直播和點(diǎn)播的基于HTTP的流媒體傳輸協(xié)議。HLS點(diǎn)播與分段HTTP點(diǎn)播十分相似,其差異就在于HLS點(diǎn)播的分段很小。</p><p> HLS協(xié)議與其他流媒體協(xié)議差異最大的地方就是在流媒體數(shù)據(jù)傳輸時(shí),客戶端獲取到的,并非完整的數(shù)據(jù)流。HLS協(xié)議實(shí)現(xiàn)直播的原理是服務(wù)器將流媒體數(shù)據(jù)進(jìn)行切片,一段流媒體數(shù)據(jù)被分為多個(gè)連續(xù),短時(shí)長(zhǎng)的TS文件,客戶端連續(xù)下載播放TS文件,服務(wù)
44、器無時(shí)無刻都在進(jìn)行TS切片操作,新生成的流媒體數(shù)據(jù)馬上就被服務(wù)器切片,客戶端只需要按順序播放TS文件即可實(shí)現(xiàn)直播。綜上所述,我們可以理解為HLS實(shí)現(xiàn)直播的方式是通過點(diǎn)播的形式。而HLS的不足在于采用了切片技術(shù)不可避免直播時(shí)的延遲會(huì)比其他流媒體直播協(xié)議高。</p><p><b> 2.7 SDP協(xié)議</b></p><p> 會(huì)話描述協(xié)議SDP(Session D
45、eseription Protocol),SDP協(xié)議本身屬于一種文本性質(zhì)的協(xié)議,該協(xié)議比較簡(jiǎn)單,且其語法能夠進(jìn)行擴(kuò)展。SDP文件就是SDP協(xié)議的文件形態(tài),服務(wù)器在提供音視頻流數(shù)據(jù)的同時(shí)還會(huì)產(chǎn)生對(duì)音視頻媒體屬性進(jìn)行描述的SDP文件,這些音視頻媒體的屬性包含了音視頻在對(duì)數(shù)據(jù)進(jìn)行傳輸?shù)臅r(shí)候所采用的編碼協(xié)議規(guī)范,音視頻媒體流的數(shù)量,協(xié)議版本號(hào)信息,流式數(shù)據(jù)服務(wù)器的具體地址等。客戶端請(qǐng)求到了音視頻流數(shù)據(jù)之后,能夠通過對(duì)SDP協(xié)議描述的媒體屬性信息
46、進(jìn)行解析,從而實(shí)現(xiàn)配置客戶端播放器軟件。</p><p> 2.8 G711A音頻</p><p> G.711是國(guó)際電信聯(lián)盟ITU-T定制出來的一套語音壓縮標(biāo)準(zhǔn),它代表了對(duì)數(shù)PCM抽樣標(biāo)準(zhǔn),主要用于電話。它主要用脈沖編碼調(diào)制對(duì)音頻采樣,采樣率為8k每秒。它利用一個(gè)64Kbps未壓縮通道傳輸語音訊號(hào)。起壓縮率為1:2,即把16位數(shù)據(jù)壓縮成8位。G.711是主流的波形聲音編解碼器。<
47、;/p><p> G.711標(biāo)準(zhǔn)下主要有兩種壓縮算法。一種是Microlaw Algorithm,主要運(yùn)用于北美和日本;另一種是A-law algorithm,主要運(yùn)用于歐洲和世界其他地區(qū)。其中,后者是特別設(shè)計(jì)用來方便計(jì)算機(jī)處理的。</p><p><b> 2.9 TS流簡(jiǎn)介</b></p><p> TS一般我們認(rèn)為是MPEG-2TS標(biāo)準(zhǔn)
48、,它是一種非常成熟的數(shù)據(jù)傳輸技術(shù),它是對(duì)音視頻數(shù)據(jù)復(fù)用的一種說明,音視頻數(shù)據(jù)經(jīng)過TS封裝之后,再通過網(wǎng)絡(luò)IP協(xié)議棧進(jìn)行二次封裝,然后就可以傳輸了。但如果需要進(jìn)行一些互動(dòng)性的內(nèi)容,就需要對(duì)它進(jìn)行擴(kuò)展。TS over IP的傳輸過程如圖2-2TS的傳輸過程所示。</p><p> 圖2-2 TS over IP的傳輸過程</p><p> 這種傳輸方式同樣采用了C/S的方式,另外由于應(yīng)用在
49、IPTV領(lǐng)域,控制層可以使用RTSP協(xié)議或者HTTP協(xié)議。在DSS服務(wù)器中,為了減少網(wǎng)絡(luò)抖動(dòng)更好地控制傳輸流量,我們對(duì)UDP協(xié)議數(shù)據(jù)包又增加了關(guān)于RTP協(xié)議數(shù)據(jù)封裝。這樣系統(tǒng)就能夠有效的減少網(wǎng)絡(luò)丟包,視頻卡頓等影響客戶體驗(yàn)的現(xiàn)象。</p><p> 2.10 流媒體技術(shù)</p><p> 目前,流媒體傳輸技術(shù)大致上可以分為兩類,一種是流實(shí)時(shí)傳輸,另一種是流式的順序傳輸。</p&g
50、t;<p> 順序傳輸就是說按照數(shù)據(jù)的順序進(jìn)行下載,所以用戶可以邊下邊看,但是服務(wù)器的數(shù)據(jù)推送和用戶對(duì)數(shù)據(jù)的接收不是同時(shí)的,而是服務(wù)器將數(shù)據(jù)推送后,用戶經(jīng)過一定的網(wǎng)絡(luò)延時(shí)才能接收到并且使用。所以這種傳輸方式用戶看到的視頻并不是實(shí)時(shí)的而是之前一段時(shí)間推送的,中間存在一定時(shí)間間隔。在這種情況下用戶只能觀看已經(jīng)下好的數(shù)據(jù)而不能跳躍時(shí)間看文件后面的節(jié)目。因此對(duì)畫面質(zhì)量要求高的傳輸可以采用這種模式,但是流式傳輸可以保證比較好的傳輸
51、質(zhì)量。顯而易見,流式傳輸更適合在網(wǎng)絡(luò)上用于點(diǎn)播或者直播音視頻節(jié)目。</p><p> 相反的實(shí)時(shí)流式傳輸這種傳輸模式,音視頻信息可以通過網(wǎng)絡(luò)進(jìn)行實(shí)時(shí)的使用和播放。在播放數(shù)據(jù)過程中可以對(duì)觀看進(jìn)度進(jìn)行對(duì)節(jié)目的實(shí)時(shí)控制比如快進(jìn)或者拖放,然而使用這種模式進(jìn)行傳輸不能很好的保證接受質(zhì)量,會(huì)發(fā)生數(shù)據(jù)丟包等情況影響收看質(zhì)量。</p><p><b> 3 系統(tǒng)分析與設(shè)計(jì)</b>
52、</p><p> 3.1 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)</p><p> 3.1.1 客戶端與Darwin服務(wù)器關(guān)系</p><p> 客戶端為Apple Darwin中的一部分,主要是關(guān)于開源流媒體云平臺(tái)客戶端的實(shí)現(xiàn),其主要是以Android Studio為開發(fā)工具在Android平臺(tái)上進(jìn)行運(yùn)行部署的語言環(huán)境,主要功能包括云平臺(tái)設(shè)備列表獲取、設(shè)備實(shí)時(shí)碼流請(qǐng)求與播放、設(shè)
53、備云臺(tái)控制、設(shè)備語音對(duì)講。其中客戶端與Darwin的關(guān)系如下圖3-1所示:</p><p> 圖3-1 流媒體系統(tǒng)結(jié)構(gòu)圖</p><p> 3.1.2 Darwin流媒體服務(wù)器核心流程</p><p> Darwin流媒體服務(wù)器通過調(diào)用模塊的特定角色,來接受客戶端的請(qǐng)求,并進(jìn)行相應(yīng)的響應(yīng)。每個(gè)角色都用來處理一個(gè)特定的任務(wù),一個(gè)模塊可以注冊(cè)多個(gè)任務(wù),Darwin
54、流媒體服務(wù)器就是通過模塊之間的相互協(xié)調(diào)而進(jìn)行工作。</p><p> Darwin流媒體服務(wù)器在啟動(dòng)的時(shí)候,首先裝載的是沒有被編譯到服務(wù)器里面的動(dòng)態(tài)模塊,之后再裝載被編譯為Darwin流媒體服務(wù)器一部分的靜態(tài)模塊。當(dāng)在各個(gè)流媒體服務(wù)器模塊被裝載完成之后,Darwin流媒體服務(wù)器會(huì)調(diào)用每個(gè)Darwin流媒體服務(wù)器模塊里面的注冊(cè)角色,這個(gè)角色必須保證被每個(gè)Darwin流媒體服務(wù)器模塊所支持。通過調(diào)用這個(gè)注冊(cè)角色,每
55、個(gè)Darwin流媒體服務(wù)器模塊會(huì)使用注冊(cè)角色里面的QTSS_AddRole函數(shù)來指定自己支持的其它角色,注冊(cè)了這些角色的模塊會(huì)被Darwin流媒體服務(wù)器以初始化角色來調(diào)用。如分配內(nèi)存和初始化全局的數(shù)據(jù)結(jié)構(gòu),這些初始化任務(wù)都會(huì)被注冊(cè)了初始化角色的模塊執(zhí)行。在流媒體服務(wù)器進(jìn)行關(guān)閉操作的時(shí)候,服務(wù)器調(diào)用每個(gè)注冊(cè)關(guān)閉角色的模塊。如一些收拾現(xiàn)場(chǎng)的任務(wù),還有釋放全局的數(shù)據(jù)結(jié)構(gòu),這些任務(wù)都會(huì)在處理關(guān)閉角色的時(shí)候,會(huì)被關(guān)閉角色的模塊所執(zhí)行。</p
56、><p> 圖3-2 RTSP請(qǐng)求處理流程圖</p><p> 就在所有注冊(cè)了初始化角色的Darwin流媒體服務(wù)器模塊被調(diào)用了之后,就己經(jīng)為接收RTSP請(qǐng)求做好準(zhǔn)備了,這些請(qǐng)求就是客戶端的RTSP請(qǐng)求。當(dāng)Darwin流媒體服務(wù)器收到一個(gè)RTSP請(qǐng)求就會(huì)創(chuàng)建一個(gè)RTSP請(qǐng)求對(duì)象(RTSPSession),該RTSPSession會(huì)被加入到任務(wù)隊(duì)列中。接著Darwin流媒體服務(wù)器會(huì)根據(jù)預(yù)先定義
57、好的順序,調(diào)用各個(gè)模塊的相關(guān)角色來處理任務(wù)隊(duì)列中的請(qǐng)求。這個(gè)調(diào)用過程如圖3-2所示。</p><p> 當(dāng)在處理RTSP請(qǐng)求的時(shí)候,RTSP過濾器角色是Darwin流媒體服務(wù)器調(diào)用的第一個(gè)角色。它會(huì)調(diào)用所有注冊(cè)了RTSP過濾角色的模塊,并將RTSP請(qǐng)求對(duì)象(RTSPSeesion)作為參數(shù)傳遞給這些注冊(cè)了RTSP過濾器角色的模塊。每個(gè)RTSP過濾器角色都可以通過改變qtssRTSPReqFullRequest屬
58、性的值,來改變滿足請(qǐng)求的文件夾,如一個(gè)RTSPFilter角色可以把/foo/foo.mov改為/bar/bar.mov。當(dāng)有某個(gè)注冊(cè)了RTSPFllter角色的模塊對(duì)客戶端進(jìn)行了響應(yīng),會(huì)導(dǎo)致流媒體服務(wù)器跳過其它注冊(cè)了RTSPFilter角色和RTSP角色的模塊的處理,然后立即調(diào)用該模塊的RTSPPostProcessor角色。</p><p> 如果沒有對(duì)客戶端進(jìn)行響應(yīng),當(dāng)流媒體服務(wù)器對(duì)RTSP請(qǐng)求解析完成之
59、后,服務(wù)器會(huì)以RTSP Route角色調(diào)用所有注冊(cè)了該角色的模塊,每個(gè)RTSP Route角色都可以使用RTSP對(duì)象中的屬性值來確定是否要改變qtssRTSPReqRootDir屬性的值,進(jìn)而改變用于處理當(dāng)前請(qǐng)求的目錄。當(dāng)某個(gè)注冊(cè)了RTSP Route角色的模塊對(duì)客戶端進(jìn)行了響應(yīng),同樣會(huì)導(dǎo)致服務(wù)器跳過其它注冊(cè)了RTSP Route角色和RTSP角色的模塊的處理,然后調(diào)用該模塊的RTSP Postprocessor角色。</p>
60、;<p> 同樣沒有模塊對(duì)客戶端進(jìn)行響應(yīng),流媒體服務(wù)器就會(huì)調(diào)用每個(gè)注冊(cè)RTSP Preproeessor角色的模塊。RTSP Preprocessor角色通過qtssRTSPReqAbsoluteURL屬性值來確定當(dāng)前請(qǐng)求和模塊處理的請(qǐng)求的類型是否相匹配。如果請(qǐng)求的類型匹配,則RTSP Preproeessor角色就調(diào)用函數(shù)QTSS_Write或者QTSS_WriteV來向客戶端發(fā)送相應(yīng)的流媒體數(shù)據(jù)包。同樣任何一個(gè)注冊(cè)了
61、RTSP Preprocessor角色的模塊對(duì)客戶端進(jìn)行了響應(yīng),都會(huì)導(dǎo)致服務(wù)器跳過注冊(cè)了RTSP Preprocessor角色和RTSP角色的所有模塊,然后調(diào)用該模塊的RTSP Postprocessor角色。</p><p> 如果注冊(cè)了RTSP Preprocessor角色的模塊沒有對(duì)RTSP的請(qǐng)求進(jìn)行響應(yīng),則Darwin流媒體服務(wù)器就調(diào)用成功注冊(cè)了RTSP Request角色的模塊。RTSP Reques
62、t角色負(fù)責(zé)響應(yīng)所有沒有被RTSP Preprocessor角色或者注冊(cè)了該角色模塊處理的RTSP請(qǐng)求。</p><p> 在RTSP Request角色對(duì)RTSP請(qǐng)求進(jìn)行處理完成之后,服務(wù)器就調(diào)用注冊(cè)了RTSP Postprocessor角色的模塊。RTSP Postprocessor角色通常執(zhí)行一些統(tǒng)計(jì)任務(wù),比如記錄各種統(tǒng)計(jì)信息。</p><p> 處理RTSP Preprocess
63、or或者RTSP Request角色的模塊可能需要為有些RTSP請(qǐng)求生成一些流媒體數(shù)據(jù)包。通過調(diào)用模塊的QTSS_Play函數(shù)來實(shí)現(xiàn),這個(gè)函數(shù)會(huì)使模塊的RTP Send Packets角色被調(diào)用,過程如圖3-3所示。</p><p> 圖3-3 RTSP Request角色處理流程圖</p><p> 3.2 Android客戶端結(jié)構(gòu)分析</p><p> 本
64、課題主要通過網(wǎng)絡(luò)流數(shù)據(jù)接收線程->編碼數(shù)據(jù)回調(diào)||緩存->寫文件||解碼線程->播放線程得到視頻流信息為一條主線,前端框架技術(shù)主要運(yùn)用Gridlayout、Recyclerview、Cardview、Swipeback幾種構(gòu)成。后端框架主要運(yùn)用okhttp3、okhttp、glide、Gson等構(gòu)成,在本課題后文第三方工具介紹中Y有詳解。主要運(yùn)用的協(xié)議有實(shí)時(shí)傳輸協(xié)議、實(shí)時(shí)控制協(xié)議為基礎(chǔ)以UDP協(xié)議、TCP協(xié)議為輔助完成
65、視頻協(xié)議的解析與調(diào)用,如圖3-4Android客戶端系統(tǒng)設(shè)計(jì)結(jié)構(gòu)圖。</p><p> 圖3-4 Android客戶端系統(tǒng)設(shè)計(jì)結(jié)構(gòu)圖</p><p><b> 3.3 軟件設(shè)計(jì)</b></p><p> 3.3.1 客戶端軟件總體設(shè)計(jì)</p><p> 系統(tǒng)整個(gè)流程如下圖3-5所示。主要通過登錄之后進(jìn)行操作,登錄
66、成功后得到主界面列表,有2個(gè)模塊和一個(gè)操作,主要有Camera攝像機(jī)列表、移動(dòng)設(shè)備列表。獲取之后對(duì)視頻源進(jìn)行操作。同時(shí)主界面提供將設(shè)置,與Apple Darwin云平臺(tái)進(jìn)行交互配置端口。</p><p> 圖3-5 客戶端系統(tǒng)設(shè)計(jì)流程圖</p><p> 客戶端主要先登錄,登錄失敗重新返回登錄頁面,登錄成功進(jìn)入主頁面,登錄成功后第一個(gè)頁面可以進(jìn)行設(shè)置,設(shè)置主要填寫Darwin云平臺(tái)的地
67、址與Darwin云平臺(tái)的端口,保存后通過與云平臺(tái)的地址和端口可以訪問得到移動(dòng)設(shè)備列表。第二個(gè)頁面通過調(diào)用攝像頭的硬件許可接口得到Camera列表,選擇一個(gè)攝像機(jī),調(diào)用攝像機(jī)的接口,啟動(dòng),請(qǐng)求CMS啟動(dòng)攝像機(jī)視頻,通過RTSP協(xié)議獲取RTSP地址,得到實(shí)時(shí)傳輸?shù)囊曨l流,解析視頻格式流。再根據(jù)視頻視頻對(duì)攝像機(jī)進(jìn)行控制。第三個(gè)頁面,連接獲取Darwin平臺(tái)提供的音視頻服務(wù),通過服務(wù)可以選擇直播信息源,選擇后得到視頻信息與云平臺(tái)進(jìn)行連接,同時(shí)通
68、過HTTP協(xié)議與M5G信令進(jìn)行交互。得到信息與獲取RTSP地址,得到實(shí)時(shí)傳輸?shù)囊曨l流進(jìn)行解析視頻格式流。獲取到視頻信息后對(duì)攝像機(jī)進(jìn)行控制。</p><p> 3.3.2 功能時(shí)序圖</p><p> 登錄界面到主界面,啟動(dòng)應(yīng)用進(jìn)入歡迎頁面,進(jìn)行網(wǎng)絡(luò)連接,請(qǐng)求登錄頁面進(jìn)行登錄,輸入手機(jī)號(hào)和密碼與文件進(jìn)行比對(duì)。比對(duì)之后成功則返回主界面進(jìn)入Camera移動(dòng)設(shè)備列表頁面,比對(duì)失敗則直接退出系統(tǒng)
69、,如下圖3-6歡迎界面跳轉(zhuǎn)登錄界面邏輯時(shí)序圖所示。</p><p> 圖3-6 歡迎界面跳轉(zhuǎn)登錄界面邏輯時(shí)序圖</p><p> 主界面到Camera攝像機(jī)列表界面即主界面通過調(diào)用MainActivity發(fā)出請(qǐng)求通過CameraFragment調(diào)用onlineCameraAdapter請(qǐng)求在線的開放接口,通過okhttp3協(xié)議請(qǐng)求數(shù)據(jù),將得到的數(shù)據(jù)形成一個(gè)listview在頁面上進(jìn)行展
70、示,如果獲取數(shù)據(jù)失敗則說明數(shù)據(jù)異常。如果沒有獲取到設(shè)備說明沒有在線的攝像頭可以進(jìn)行調(diào)用選擇,如下圖3-7主頁面跳轉(zhuǎn)Camera攝像機(jī)列表邏輯時(shí)序圖所示。</p><p> 圖3-7 主頁面跳轉(zhuǎn)Camera攝像機(jī)列表邏輯時(shí)序圖</p><p> Camera設(shè)備列表查看攝像頭對(duì)展示的列表進(jìn)行選擇得到一個(gè)可以查看的攝像機(jī)向CMS發(fā)出請(qǐng)求采集數(shù)據(jù),請(qǐng)求同意后啟動(dòng)視頻,對(duì)獲取到的攝像機(jī)開放的接
71、口進(jìn)行RTSP解析,推送數(shù)據(jù)源進(jìn)行展示。通過回調(diào)方法進(jìn)行穩(wěn)定的數(shù)據(jù)源的輸出,如下圖3-8Camera設(shè)備列表查看邏輯時(shí)序圖所示。</p><p> 圖3-8 Camera設(shè)備列表查看邏輯時(shí)序圖</p><p> 主頁面到移動(dòng)設(shè)備頁面即在主頁面通過點(diǎn)擊移動(dòng)設(shè)備列表界面到FramentManager進(jìn)行管理,通過Andriod進(jìn)行跳轉(zhuǎn)到AndriodFragment進(jìn)而通過okhttp發(fā)出
72、請(qǐng)求,得到開放的移動(dòng)設(shè)備攝像源,再通過expandListAdapter整合成list數(shù)據(jù)返回到頁面上進(jìn)行填充。如果數(shù)據(jù)請(qǐng)求失敗說明系統(tǒng)異常。如果沒有數(shù)據(jù)則說明無直播信息,如下圖3-9主頁面跳轉(zhuǎn)移動(dòng)設(shè)備邏輯時(shí)序圖所示。</p><p> 圖3-9 主頁面跳轉(zhuǎn)移動(dòng)設(shè)備邏輯時(shí)序圖</p><p> 在移動(dòng)設(shè)備頁面通過移動(dòng)設(shè)備列表頁面選擇一個(gè)移動(dòng)設(shè)備,通過得到移動(dòng)設(shè)備信息進(jìn)入AndriodF
73、ragement得到視頻源,通過適配器得到數(shù)據(jù)源,對(duì)數(shù)據(jù)源進(jìn)行解析返回匹配的數(shù)據(jù)格式進(jìn)行直播,播放直播信息,調(diào)用回調(diào)函數(shù)穩(wěn)定得到視頻源,如下圖3-10移動(dòng)設(shè)備頁面跳轉(zhuǎn)查看頁面邏輯時(shí)序圖所示。</p><p> 圖3-10 移動(dòng)設(shè)備頁面跳轉(zhuǎn)查看頁面邏輯時(shí)序圖</p><p> 進(jìn)入主頁面點(diǎn)擊設(shè)置按鈕跳轉(zhuǎn)到設(shè)置頁面信息。對(duì)設(shè)置頁面的IP和端口進(jìn)行填寫。點(diǎn)擊保存對(duì)配置文件里面的配置進(jìn)行修改,
74、修改成功則返回主界面,修改失敗則退出應(yīng)用,如下圖3-11主頁面跳轉(zhuǎn)設(shè)置頁面邏輯時(shí)序圖所示。</p><p> 圖3-11 主頁面跳轉(zhuǎn)設(shè)置頁面邏輯時(shí)序圖</p><p> 3.4 客戶端解碼設(shè)計(jì)</p><p><b> 3.4.1 直播</b></p><p> 直播在采集模塊中采集網(wǎng)絡(luò)流時(shí)提到過,也是直接調(diào)用類
75、Class PlayerManager接口實(shí)現(xiàn):</p><p> 開始播放需要調(diào)StartPlay函數(shù),需要傳遞szURL(播放地址參數(shù))、HWND(播放流)。調(diào)用成功后需要對(duì)播放器進(jìn)行一個(gè)配置屬性,當(dāng)播放完畢后關(guān)閉流,調(diào)用停止播放函數(shù)。</p><p> int CSourceManager::StartPlay(char* szURL,HWND hShowWnd);</p&
76、gt;<p> 圖3-12 流播放函數(shù)流程圖</p><p> 3.4.2 獲取直播列表</p><p> 進(jìn)入直播頁面之后會(huì)調(diào)用Androidfragment中的刷新頁面的方法onRefresh()方法,該方法將調(diào)用getDevice()方法通過服務(wù)器端口號(hào)和地址找到相對(duì)應(yīng)得CMS服務(wù)器,CMS響應(yīng),即調(diào)用RTSPliveVO.getDarwin().getBody.
77、getDevice();將所有的信息封裝在一個(gè)里面,隨即用liveVOAdapter得到屏幕大小,直播條數(shù),空間大小,長(zhǎng)寬高等等信息,如圖3-13直播流程圖所示。</p><p> 圖3-13 直播流程圖</p><p> 3.4.3 DirectShow采集庫中的回調(diào)</p><p> DirectShow采集庫中的回調(diào)機(jī)制有Darwin Client中Di
78、rectShow采集音視頻流程及幾種采集方式,兩種模式都是通過統(tǒng)一的設(shè)置回調(diào)函數(shù)接口函數(shù)實(shí)現(xiàn):</p><p> WINAPI SetDShowCaptureCallback();</p><p> 回調(diào)函數(shù)的設(shè)置函數(shù)通常都帶有一個(gè)設(shè)置參數(shù),該設(shè)置參數(shù)通常是一個(gè)指針變量,主要用于在</p><p> 回調(diào)函數(shù)體中進(jìn)行調(diào)用控制;最常用的做法是:將其設(shè)置為當(dāng)前類的
79、實(shí)例指針this,通過該指針調(diào)用不同的實(shí)例類的處理函數(shù)對(duì)回調(diào)數(shù)據(jù)進(jìn)行處理,如3-14圖采集庫回調(diào)函數(shù)流程圖。</p><p> 圖3-14 采集庫回調(diào)函數(shù)流程圖</p><p> 3.4.4 LibEasyPlayer庫中的回調(diào)</p><p> LibEasyPlayer庫提供的設(shè)置回調(diào)函數(shù)的接口主要來自其所依賴的庫RTSPClient,該回調(diào)函數(shù)主要是回調(diào)
80、網(wǎng)絡(luò)接收的RTSP流解析的音視頻編碼流數(shù)據(jù),用于轉(zhuǎn)發(fā)或者解碼播放,具體實(shí)現(xiàn)如圖3-15LibEasyPlayer庫中的回調(diào)流程圖;</p><p> 圖3-15 LibEasyPlayer庫中的回調(diào)流程圖</p><p> 3.4.5 網(wǎng)絡(luò)RTSP流回調(diào) </p><p> 流回調(diào)函數(shù)在客戶端中提供了設(shè)置接口函數(shù),底層用libEasyPlayer提供
81、的接口函數(shù)中進(jìn)行設(shè)置,對(duì)應(yīng)RTSPClient庫提供的接口函數(shù)進(jìn)行設(shè)置,客戶端中的回調(diào)設(shè)置函數(shù)接口。</p><p> 回調(diào)接口主要傳遞參數(shù)szURL(播放地址參數(shù))、HWND(播放流)、RENDER_FORMAT(播放格式化對(duì)象)、rtpovertcp(rtp控制對(duì)象)、username,(用戶名)、password(密碼)、MediaSourceCallBack(設(shè)置回調(diào)機(jī)制)、userPtr(構(gòu)建使用者)
82、。當(dāng)接口參數(shù)傳遞完畢開始關(guān)閉回調(diào)函數(shù),如果返回的資源數(shù)大于0時(shí)則關(guān)閉返回-1回去表示回調(diào)成功。</p><p> 接口中主要是有流對(duì)于Player_OpenStream對(duì)象需要傳遞一樣的參數(shù)只是返回值不同,流底層進(jìn)行了二次封裝返回rtp協(xié)議控制完成信號(hào)。libEasyPlayer中主要的功能在類CChannelManager中實(shí)現(xiàn),該類提供了回調(diào)設(shè)置函數(shù)接口。</p><p> 主要參
83、數(shù)url(播放地址參數(shù))、HWND(播放流)、RENDER_FORMAT(播放格式化對(duì)象)、rtpovertcp(rtp控制對(duì)象)、username(用戶名)、password(密碼)、MediaSourceCallBack(設(shè)置回調(diào)機(jī)制)、userPtr(構(gòu)建使用者)。這個(gè)時(shí)候后臺(tái)啟動(dòng)一個(gè)線程隊(duì)列,線程隊(duì)列判斷是否超時(shí),不超時(shí)返回-1。解析播放地址參數(shù)。對(duì)地址參數(shù)和服務(wù)進(jìn)行循環(huán)解析根據(jù)MAX_CHANNEL_NUM。當(dāng)線程處理成功時(shí)直
84、接調(diào)出循環(huán)確認(rèn)成功,如果判斷線程處理失敗重新調(diào)用RTSP_Init初始化方法進(jìn)行初始化,然后RTSP_SetCallback調(diào)用RTSP控制協(xié)議進(jìn)行控制同時(shí)換為NVSource,屏蔽聲音。RTSP_OpenStream輸出流重新調(diào)用打開,參數(shù)重新進(jìn)行實(shí)例化輸出一遍最后CreatePlayThread調(diào)用線程序列進(jìn)行判斷記錄LeaveCriticalSection回調(diào)次數(shù),以保證循環(huán)完成后調(diào)出循環(huán),如圖3-16流回調(diào)函數(shù)流程圖所示。<
85、;/p><p> 圖3-16 流回調(diào)函數(shù)流程圖</p><p> 其中,調(diào)用的RTSPClient庫函數(shù)接口RTSP_SetCallback(pRealtimePlayT hread [iNvsIdx].nvsHandle,RTSPSourceCallBack)實(shí)現(xiàn)網(wǎng)絡(luò)流編碼數(shù)據(jù)的回調(diào)函數(shù)的設(shè)置;在以上代碼中,除了初始化RTSPClient庫的操作以及設(shè)置回調(diào)函數(shù)外,還創(chuàng)建了兩個(gè)線程,分別
86、用于解碼和播放。</p><p> 對(duì)于解碼,首先創(chuàng)建線程池隊(duì)列,隊(duì)列里面有解碼線程,首先對(duì)于播放線程必須要在解碼線程前創(chuàng)建,然后判斷當(dāng)播放線程指針指向解碼線程是否成功的標(biāo)識(shí)時(shí)來判斷是否創(chuàng)建新的解碼線程還是進(jìn)行下一步,如果解碼成功線程休眠等待解碼線程解碼完畢播放線程開始進(jìn)行調(diào)用。當(dāng)播放線程完成播放后兩個(gè)線程結(jié)束。</p><p> 需要重要說明的是,在類CChannelManager中
87、一個(gè)重要的成員結(jié)構(gòu)體指針變量pRealtimePlayThread,該變量是貫穿整個(gè)程序流程,涉及到網(wǎng)絡(luò)流數(shù)據(jù)接收線程->編碼數(shù)據(jù)回調(diào)||緩存->寫文件||解碼線程->播放線程整個(gè)流程,在其中扮演了重要的角色。</p><p> 其中,編碼數(shù)據(jù)和解碼數(shù)據(jù)分別緩存在隊(duì)列結(jié)構(gòu)pAVQueue和數(shù)組yuvFrame中,程序中用這個(gè)結(jié)構(gòu)做了2級(jí)緩存,保證接收和解碼播放過程的流暢性,其中,解碼數(shù)據(jù)緩存只
88、有3幀,確保播放的實(shí)時(shí)性,當(dāng)然在機(jī)器性能或者網(wǎng)絡(luò)資源不夠的情況下可能出現(xiàn)卡幀或者花屏的情況,當(dāng)然,程序中采用了先進(jìn)的丟幀機(jī)制,確?;ㄆ恋那闆r最大限度的減少。</p><p> 此外,pRealtimePlayThread這個(gè)結(jié)構(gòu)指針,創(chuàng)建的是一個(gè)最大64的數(shù)組,也就是相當(dāng)于的64個(gè)CChannelManager類的實(shí)例的Player對(duì)應(yīng)的處理(當(dāng)然,類實(shí)例只有一個(gè)CChannelManager*g_pChann
89、elManager),如圖3-17播放解碼流程圖所示。</p><p> 圖3-17 播放解碼流程圖</p><p> 3.4.6 云臺(tái)方向</p><p> 通過點(diǎn)擊界面的上下左右的按鈕獲取點(diǎn)擊監(jiān)聽事件調(diào)用setOnTouchListener()方法,根據(jù)點(diǎn)擊方向獲取方向值“Up”、“Down”、“Left”、“Right”,轉(zhuǎn)換成字符串,調(diào)用sendCon
90、trolCommand()方法將方向值封裝在一個(gè)url字符串中通過Okhttp網(wǎng)絡(luò)框架將url發(fā)送到CMS,再有CMS發(fā)送信令給Camera,Camera收到信令后隨即作出對(duì)應(yīng)的命令操作,在這個(gè)同時(shí)會(huì)反應(yīng)給Darwin服務(wù)器視頻流,客戶端會(huì)受到視頻流并且顯示,如圖3-18云臺(tái)控制流程圖。</p><p> 圖3-18 云臺(tái)控制流程圖</p><p><b> 3.5 異常分析
91、</b></p><p> 通過MobclickAgent實(shí)現(xiàn)類調(diào)用onResume函數(shù)和onPause函數(shù)實(shí)現(xiàn)記錄異常數(shù)據(jù)的功能。通過對(duì)接SDK的功能實(shí)現(xiàn)統(tǒng)計(jì)bug。當(dāng)APP發(fā)生異常退出時(shí),可通過友盟統(tǒng)計(jì)得到異常錯(cuò)誤如圖3-19友盟異常統(tǒng)計(jì)數(shù)據(jù)圖。</p><p> 圖3-19 友盟異常統(tǒng)計(jì)數(shù)據(jù)圖</p><p><b> 4 系統(tǒng)測(cè)試
92、</b></p><p><b> 4.1 測(cè)試方法</b></p><p> 軟件開發(fā)的最基本要求是按時(shí)、高質(zhì)量的發(fā)布軟件產(chǎn)品,而軟件測(cè)試是軟件質(zhì)量保證的最重要的手段之一。對(duì)軟件產(chǎn)品測(cè)試的方法有很多,主要分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試,靜態(tài)測(cè)試主要是單元測(cè)試中最重要的手段之一,適用于新開發(fā)的和重用的代碼。通常在代碼完成并無錯(cuò)誤的通過編譯或匯編后進(jìn)行,采用工具
93、掃描分析、代碼評(píng)審等方法。動(dòng)態(tài)測(cè)試需要設(shè)計(jì)更充分的測(cè)試用例以驗(yàn)證業(yè)務(wù)邏輯合理性和單元的實(shí)際表現(xiàn)行為。在對(duì)本系統(tǒng)的測(cè)試中,主要使用動(dòng)態(tài)測(cè)試進(jìn)行測(cè)試。</p><p> 在動(dòng)態(tài)測(cè)試中分為白盒測(cè)試和黑盒測(cè)試,白盒測(cè)試主要測(cè)試程序的代碼結(jié)構(gòu),黑盒測(cè)試主要測(cè)試軟件的功能。本次測(cè)試使用黑盒測(cè)試測(cè)試系統(tǒng)的所有功能。</p><p><b> 4.2 測(cè)試過程</b></p
94、><p> 將AppleDarwin先配置云平臺(tái)服務(wù)器,并對(duì)接一些Camera設(shè)備部署在云平臺(tái)服務(wù)器上,在客戶端上首先登錄,與設(shè)置中的文件名相同可進(jìn)入主界面進(jìn)行測(cè)試。</p><p> 4.2.1 登錄注冊(cè)及忘記密碼測(cè)試</p><p> 登陸界面測(cè)試:打開客戶端首頁可以進(jìn)行登錄操作如圖4-1登陸界面所示。登錄頁面主要通過手機(jī)號(hào)或者郵箱進(jìn)行登錄驗(yàn)證,當(dāng)填寫存在的手
95、機(jī)號(hào),錯(cuò)誤的密碼,結(jié)果提示密碼錯(cuò)誤。當(dāng)填寫不存在的手機(jī)號(hào),隨意的密碼,結(jié)果提示:用戶不存在。當(dāng)填寫正確的手機(jī)號(hào),正確的密碼,結(jié)果提示:登錄成功,跳轉(zhuǎn)到主頁面。結(jié)果跳轉(zhuǎn)到主頁面與測(cè)試用例相符。</p><p><b> 表4-1 登陸測(cè)試</b></p><p><b> 圖4-1 登陸界面</b></p><p>
96、注冊(cè)界面測(cè)試:在登錄頁面有立即注冊(cè)的功能,點(diǎn)擊立即注冊(cè)打開頁面如圖4-2注冊(cè)界面所示。</p><p> 填寫手機(jī)號(hào),點(diǎn)擊獲取驗(yàn)證碼,得到手機(jī)驗(yàn)證碼。填寫密碼,確認(rèn)密碼是否一致,密碼一致,對(duì)密碼進(jìn)行MD5算法加密再進(jìn)行登錄,當(dāng)填寫兩個(gè)不一樣的密碼,結(jié)果提示兩次密碼不一致,與測(cè)試用例相符。當(dāng)填寫同一密碼,規(guī)范手機(jī)號(hào),結(jié)果提示:注冊(cè)成功,與測(cè)試用例相符。</p><p><b>
97、 表4-2 注冊(cè)測(cè)試</b></p><p><b> 圖4-2 注冊(cè)界面</b></p><p> 忘記密碼界面:點(diǎn)擊忘記密碼跳轉(zhuǎn)到該頁面如圖4-3忘記密碼頁面所示。輸入手機(jī)號(hào),獲取該手機(jī)號(hào)的驗(yàn)證碼。如果沒有該手機(jī)號(hào),則返回。如果手機(jī)號(hào)存在則繼續(xù)。輸入新密碼,確認(rèn)密碼,新密碼與確認(rèn)密碼一樣重置成功,重新進(jìn)行登錄。</p><p&g
98、t; 表4-3 忘記密碼測(cè)試</p><p> 圖4-3 忘記密碼頁面</p><p><b> 4.2.2 設(shè)置</b></p><p> 設(shè)置模塊如圖4-4設(shè)置界面顯所示。添加服務(wù)器IP,添加服務(wù)器端口,與云平臺(tái)客戶端進(jìn)行對(duì)接,完成配置進(jìn)行保存。</p><p><b> 表4-4 設(shè)置測(cè)試<
99、;/b></p><p><b> 圖4-4 設(shè)置</b></p><p> 4.2.3 Camera及移動(dòng)設(shè)備列表</p><p> Camera列表:獲取硬件攝像機(jī)移動(dòng)廠家給的對(duì)接服務(wù),通過后臺(tái)完成對(duì)接得到攝像機(jī),并控制攝像機(jī)的音視頻、對(duì)講等動(dòng)作。如圖4-5Camera列表顯示。</p><p> 表4
100、-5 Camera列表測(cè)試</p><p> 圖4-5 Camera列表</p><p> 移動(dòng)設(shè)備列表:在設(shè)置中完成了與云平臺(tái)的對(duì)接,以Andriod手機(jī)作為攝像機(jī)的視頻源接入到Darwin的云平臺(tái)對(duì)外視頻服務(wù)上得到移動(dòng)設(shè)備列表。如圖4-6移動(dòng)設(shè)備列表所示。</p><p> 表4-6 移動(dòng)設(shè)備列表測(cè)試</p><p> 圖4-6
101、移動(dòng)設(shè)備列表</p><p> 4.2.4 云臺(tái)控制功能測(cè)試</p><p> 選取一個(gè)在線Camera設(shè)備點(diǎn)擊可以設(shè)備所推送的視頻流,并可以對(duì)設(shè)備進(jìn)行實(shí)時(shí)控制即可以通過手機(jī)屏幕上面的上下左右進(jìn)行控制攝像頭的方向進(jìn)行控制云臺(tái)方向。測(cè)試點(diǎn)擊相應(yīng)按鈕查看圖像是否上下左右移動(dòng)如圖4-7云臺(tái)控制界面所示。</p><p> 表4-7 云臺(tái)控制方向功能測(cè)試</p&
102、gt;<p> 圖4-7 云臺(tái)控制界面</p><p> 4.2.5 云臺(tái)遠(yuǎn)程語音功能測(cè)試</p><p> 選取一個(gè)在線Camera設(shè)備點(diǎn)擊可以設(shè)備所推送的視頻流,并可以對(duì)設(shè)備進(jìn)行遠(yuǎn)程對(duì)講、發(fā)聲達(dá)到智能家居實(shí)現(xiàn)的實(shí)時(shí)傳輸、實(shí)時(shí)控制的效果。還可以通過手機(jī)屏幕上面的上下左右進(jìn)行控制攝像頭的方向進(jìn)行查看。測(cè)試點(diǎn)擊遠(yuǎn)程語音按鈕觀察云臺(tái)設(shè)備是否播放發(fā)送的語音。</p>
103、;<p> 表4-8 云臺(tái)遠(yuǎn)程語音功能測(cè)試</p><p> 4.2.6 測(cè)試總結(jié)</p><p> 在本次測(cè)試中主要是用黑盒測(cè)試通過上述一系列的測(cè)試過程,黑盒測(cè)試是常用的軟件測(cè)試的方法,用這種方法測(cè)試時(shí),把被測(cè)試程序當(dāng)作一個(gè)黑盒,在不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性,測(cè)試者只知道該程序的輸入和輸出之間的關(guān)系或程序的功能的情況下,依靠能反應(yīng)這一關(guān)系和程序功能需求規(guī)格的說明書,
104、來確定測(cè)試用例和推斷測(cè)試結(jié)構(gòu)的正確性。軟件的黑盒測(cè)試被用來證實(shí)軟件功能的爭(zhēng)正確性和可操作性。其應(yīng)用領(lǐng)域十分廣泛,因此掌握好黑盒測(cè)試很重要。經(jīng)過測(cè)試本課題中的基本功能已經(jīng)全部實(shí)現(xiàn)。得到理想的結(jié)果,通過測(cè)試也知道軟件所存在的不足并加以改進(jìn)使軟件更加好用。</p><p><b> 5 總結(jié)</b></p><p> Apple Darwin是蘋果公司發(fā)布的開源代碼,在
105、編寫系統(tǒng)的時(shí)候?qū)夹g(shù)的了解非常重要。在一開始做需求分析的時(shí)候反復(fù)與導(dǎo)師討論,對(duì)于視頻控制時(shí),所采用的TCP/UDP等協(xié)議進(jìn)行了一個(gè)深入的探究,在研究實(shí)時(shí)傳流的時(shí)候,也需要對(duì)RTSP做一個(gè)確切的解讀。</p><p> Apple Darwin的開源框架在使用時(shí)調(diào)用實(shí)時(shí)控制協(xié)議、實(shí)時(shí)傳輸協(xié)議的目的是和云平臺(tái)構(gòu)建一個(gè)實(shí)時(shí)傳輸且能夠在控制攝像頭時(shí)及時(shí)更新和調(diào)用數(shù)據(jù),有很多欠缺的技術(shù)同時(shí)在需求方面需要反復(fù)斟酌拿到最好的
106、解決方案。所以在后期完成系統(tǒng)方面,也學(xué)習(xí)到了很多知識(shí)。</p><p> 整體設(shè)計(jì)方案主要來源于和團(tuán)隊(duì)的合作與溝通,因?yàn)橥瓿蛇@個(gè)的基礎(chǔ)不止在于自己的系統(tǒng)還需要團(tuán)隊(duì)合作搭建一套完整的開源流媒體框架。最初在一起討論的結(jié)果得知大體框架是有客戶端發(fā)送命令到CMS,再由CMS處理命令之后發(fā)送Camera,Camera收到命令開始傳流Darwin服務(wù)器,再由Darwin服務(wù)器通過RTSP協(xié)議傳入實(shí)時(shí)流給客戶端端,所以需要大
107、家互相提供接口,對(duì)于Camera的調(diào)用和使用需要去開放RTSP接口能讓這個(gè)系統(tǒng)進(jìn)行錄音、控制等才能完整的實(shí)現(xiàn)一套完整的流程。</p><p> 總之,在完成畢業(yè)論文上讓我深刻體會(huì)到了技術(shù)的學(xué)習(xí)、團(tuán)隊(duì)的合作、需求的設(shè)定、整體的設(shè)計(jì)都是不可缺少的,還有一個(gè)最重要的東西就是耐心。作為一個(gè)大四的畢業(yè)生,作為一個(gè)即將步入社會(huì)的軟件工程師,耐心是我們必不可少的,在遇到問題的時(shí)候不要慌張和泄氣,遇到問題解決問題才是我們應(yīng)該做
108、的,這也是在此次完成畢業(yè)設(shè)計(jì)我學(xué)到的能力。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 劉炎芬.流媒體技術(shù)及其應(yīng)用[J].山西科技,2014:4-5</p><p> [2] 韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點(diǎn)詳解 [J],2016:1125-1179</p><p> [3]
109、 馬躍,高春,董慶文等.流媒體音視頻切換矩陣的設(shè)計(jì)與實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2015:2534-2537</p><p> [4] 張偉,都志輝,李三立.達(dá)爾文流媒體服務(wù)器用戶認(rèn)證擴(kuò)展與應(yīng)用[J].小型微型計(jì)算機(jī)系統(tǒng) ,2014:706-710</p><p> [5] 劉衛(wèi)國(guó),姚昱禹.Android與J2ME平臺(tái)間即時(shí)通信的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android平臺(tái)的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于android的視頻播放器的設(shè)計(jì)與實(shí)現(xiàn)--畢業(yè)論文
- 基于android平臺(tái)的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于apple-darwin的流媒體消息管理服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文——基于android音樂播放器的設(shè)計(jì)
- 基于android的音樂播放器畢業(yè)論文
- 基于android的音樂播放器的設(shè)計(jì)-畢業(yè)論文
- 基于Android平臺(tái)的視頻播放客戶端的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于android平臺(tái)的音樂播放器-畢業(yè)論文
- 畢業(yè)論文——基于android平臺(tái)的音樂播放器
- 畢業(yè)論文--android在線音樂播放器設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-基于android的音樂播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于Android音樂播放器的設(shè)計(jì)與開發(fā)畢業(yè)論文.doc
- 畢業(yè)論文設(shè)計(jì) 基于android手機(jī)平臺(tái)的音樂播放器
- 基于android平臺(tái)的在線音樂客戶端設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文
- 軟件工程畢業(yè)論文-基于android的音樂播放器的設(shè)計(jì)與實(shí)現(xiàn)2
- 基于android手機(jī)平臺(tái)的音樂播放器-畢業(yè)論文
- 基于android開發(fā)音樂播放器的設(shè)計(jì)-畢業(yè)論文
- 基于android手機(jī)平臺(tái)的音樂播放器【畢業(yè)論文】
- 畢業(yè)論文基于android手機(jī)平臺(tái)的音樂播放器
評(píng)論
0/150
提交評(píng)論