freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于rtp的linux實(shí)時(shí)語(yǔ)音通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文-wenkub

2023-03-09 10:16:16 本頁(yè)面
 

【正文】 .......... 3 網(wǎng)絡(luò)教學(xué)的發(fā)展 [5] ................................ 錯(cuò)誤 !未定義書(shū)簽。 第二章 技術(shù)基礎(chǔ) ..................................................... 3 C/S 體系結(jié)構(gòu) ...................................................... 5 傳統(tǒng)的二層 C/S 體系結(jié)構(gòu) ......................... 錯(cuò)誤 !未定義書(shū)簽。 B/S 結(jié)構(gòu)的特點(diǎn) ................................. 錯(cuò)誤 !未定義書(shū)簽。 簡(jiǎn)介 [9] ....................................... 錯(cuò)誤 !未定義書(shū)簽。 ADO 技術(shù) [12] ..................................... 錯(cuò)誤 !未定義書(shū)簽。 目的 ........................................... 錯(cuò)誤 !未定義書(shū)簽。 使用可行性 ..................................... 錯(cuò)誤 !未定義書(shū)簽。 環(huán)境設(shè)備需求 ................................... 錯(cuò)誤 !未定義書(shū)簽。 系統(tǒng)數(shù)據(jù)描述 ................................... 錯(cuò)誤 !未定義書(shū)簽。這些都是實(shí)現(xiàn)實(shí)時(shí)語(yǔ)音通話應(yīng)達(dá)到的要求。 第三章:介紹了 linux 下基于 RTP 的實(shí)時(shí)語(yǔ)音通信系統(tǒng)實(shí)現(xiàn)的基本原理和總體架構(gòu)。 第七章:總結(jié)與展望。 IPv6解決了 IPv4 地址資源有限,不能控制帶寬等問(wèn)題, RSVP(資源預(yù)留協(xié)議 ), RTP/RTCP(實(shí)時(shí)傳輸 /控制協(xié)議)使 Inter 從理論上具備了處理實(shí)時(shí) 業(yè)務(wù)的能力,解決了媒體同步問(wèn)題和滿足多媒體通信業(yè)務(wù)的要求。會(huì)議使用的音頻傳輸軟件主要是 Vat( Visual Audio Tool) ,它是由 LBNL( Lawrence Berkeley National Laboratory)網(wǎng)絡(luò)研究小組開(kāi)發(fā)的一個(gè)音頻會(huì)議工具,該小組還開(kāi)發(fā)了視頻工具 vic和白板工具 wb。 在國(guó)內(nèi),清華電子工程系網(wǎng)絡(luò)研究所多媒體通信課題組也在這方面做了大量的研究,并開(kāi)發(fā)出了 Coolaudio、 CoolVideo、 CoolMeeting 等一系列軟件。但是總的來(lái)說(shuō),國(guó)內(nèi)的研究 水平要遠(yuǎn)遠(yuǎn)落后于國(guó)外。這些都是實(shí)現(xiàn)實(shí)時(shí)語(yǔ)音通話應(yīng)達(dá)到的要求。因此傳統(tǒng)的 TCP/IP 協(xié)議傳輸實(shí)時(shí)音頻、視頻數(shù)據(jù)的能力比較差。 TCP 協(xié)議是面向連接的協(xié)議,它的重傳機(jī)制和擁塞控制機(jī)制都是不適合用于實(shí)時(shí)多媒體傳輸?shù)摹? ( 2) .TCP 的重傳機(jī)制 在 TCP/IP 協(xié)議中,當(dāng)發(fā)送方收不到接收方發(fā)來(lái)的確認(rèn),并超過(guò)一定的時(shí)間,就認(rèn)定該數(shù)據(jù)已丟失,這時(shí)它將重傳丟失的數(shù)據(jù)包。正確的擁塞控制應(yīng)該是變換音頻、視頻信息的編碼方式,調(diào)節(jié)視頻信息的幀頻或者圖像的大小。 UDP 是一種面向無(wú)連接的數(shù)據(jù)報(bào)方式,當(dāng)通信一旦開(kāi)始,發(fā)送方就不斷地發(fā)送數(shù)據(jù)而不需要接收端做出確認(rèn)信息。但是 UDP 傳輸?shù)牟豢煽繋?lái)丟包、亂序等問(wèn)題,所以如果在應(yīng)用層采用合適的封裝方式并增加一些有利于媒體播放的信息進(jìn)行傳輸,可以使得接收端在一定程度上彌補(bǔ)傳輸帶來(lái)的損失,這就是引入 RTP的原因。通常 RTP 算法并不作為一個(gè)獨(dú)立的網(wǎng)絡(luò)層來(lái)實(shí)現(xiàn),而是作為應(yīng)用程序代碼的一部分。 RFC3550 不僅定義了 RTP,而且定義了配套的相關(guān)協(xié)議 RTCP( Realtime Transport Control Protocol,即實(shí)時(shí)傳輸控制協(xié)議)。 RTP 為交互式 音頻、視頻等具有實(shí)時(shí)特性的數(shù)據(jù)提供端到端的傳輸。 在 IP網(wǎng)絡(luò)上, RTP 協(xié)議一般是運(yùn)行在 UDP 之上。因此,在實(shí)際應(yīng)用中, RTP/RTCP/UDP 用于音頻、視頻媒體,而 TCP用于數(shù)據(jù)和控制信令的傳輸。下圖表示了RTP 與各種網(wǎng)絡(luò)協(xié)議的關(guān)系。這個(gè)地址和端口的信息要發(fā)布給各個(gè)與會(huì)者。為嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計(jì) ) 7 了克服這些不利因素, RTP 包頭攜帶時(shí)間戳和序列號(hào),這樣接收方就可以重建源產(chǎn)生的計(jì)時(shí)信息,語(yǔ)音報(bào)文可以按照 20 毫秒的間隔連續(xù)回放了。因此每個(gè)與會(huì)者的應(yīng)用程序都周期性地廣播含有自己名字的 RTCP 接收?qǐng)?bào)告。 ( 2)音頻和視頻會(huì)議 如果在一個(gè)會(huì)議里同時(shí)有音頻和視頻,它們將采用獨(dú)立的 RTP 會(huì)話來(lái)傳送,兩個(gè)媒體流的 RTCP 報(bào)文采用不同的 UDP 端口對(duì)或多播地 址。 ( 3)混合器和轉(zhuǎn)換器 當(dāng)某一與會(huì)者采用低速鏈路接入會(huì)議,而大部分與會(huì)者采用高速鏈路接入,如果讓每個(gè)與會(huì)者使用窄帶,低質(zhì)量的語(yǔ)音編碼器,這顯然不是一個(gè)很好的解決辦法,這時(shí)就需要使用“混合器”。 “轉(zhuǎn)換器”( Translators)也是一種 RTP 層的中繼設(shè)備,當(dāng)某些與會(huì)者不能通過(guò)多播( multicast)方式直接連接到會(huì)與,比如它們處在不讓任何 IP 包通過(guò)的應(yīng)用級(jí)防火墻之后,這時(shí)就需要用到“轉(zhuǎn)換器” 。轉(zhuǎn)換器的一個(gè)應(yīng)用例子是嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計(jì) ) 8 連接一些只能使用 IP/UDP 的主機(jī)和只能使用 STII 主機(jī),或者對(duì)單個(gè)信源的視頻流進(jìn)行逐包的編碼翻譯,而不作重新同步或混合。在 linux 平臺(tái)上,音頻采集采用 ALSA( Advanced Linux Sound Architecture )的 lib 庫(kù),利用網(wǎng)上現(xiàn)有的 oRTP 庫(kù)實(shí)現(xiàn)基于 RTP 的實(shí)時(shí)語(yǔ)音傳輸。 系統(tǒng)實(shí)現(xiàn)的基本原理和框架結(jié)構(gòu) 本系統(tǒng)主要實(shí)現(xiàn)音頻數(shù)據(jù)的實(shí)時(shí)傳輸通話。 下面圖 : 實(shí)時(shí)語(yǔ)音通信模塊實(shí)現(xiàn)過(guò)程 見(jiàn)下圖 : 圖 基本框架流程圖 本系統(tǒng)核心模塊是語(yǔ)音通話模塊的實(shí)現(xiàn),下面是語(yǔ)音通話模塊的流程圖: 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計(jì) ) 12 語(yǔ)音通話模塊的流程圖 第四章 linux 音頻編程 音頻編程簡(jiǎn)介 音頻信號(hào)是一種連續(xù)變化的模擬信號(hào),但計(jì)算機(jī)只能處理和記錄二 進(jìn)制的數(shù)字信號(hào),由自然音源得到的音頻信號(hào)必須經(jīng)過(guò)一定的變換,成為數(shù)字音頻信號(hào)之后,才能送到計(jì)算機(jī)中作進(jìn)一步的處理。 數(shù)字音頻涉及到的概念非常多,對(duì)于在 Linux 下進(jìn)行音頻編程的程序員來(lái)說(shuō),最重要的是理解聲音數(shù)字化的兩個(gè)關(guān)鍵步驟:采樣和量化。正常人聽(tīng)覺(jué)的頻率范圍大約在20Hz~20kHz 之間,根據(jù)奈奎斯特采樣理論,為了保證聲音不失真,采樣頻率應(yīng)該在 40kHz左右。我們首先要知道:電腦中的聲音文件是用數(shù)字 0和 1來(lái) 表示的。采集卡的位客觀地反映了數(shù)字聲音信號(hào)對(duì)輸入聲音信號(hào)描述的準(zhǔn)確程度。采樣位數(shù)越高,信號(hào)的動(dòng)態(tài)范圍越大,數(shù)字化后的音頻信號(hào)就越可能接近原始信號(hào),但所需要的存貯空間也越大。在 Linux 上進(jìn)行音頻編程的本質(zhì)就是要借助于驅(qū)動(dòng)程序,來(lái)完成對(duì)聲卡的各種操作。由于 Hannu 的“逃跑”, RH 資助 Alan Cox 增強(qiáng) Hannu 開(kāi)發(fā)的驅(qū)動(dòng)程序,并使它們完全模塊化。它可以驅(qū)動(dòng)很多聲卡并且可以用在很多 UNIX 系統(tǒng)中。它包含內(nèi)核驅(qū)動(dòng)集合, API 庫(kù)和工具對(duì)Linux 聲音進(jìn)行支持。為提供向后兼容, ALSA 提供內(nèi)核模塊模仿 OSS/Free 驅(qū)動(dòng),所以大多數(shù)的程序不需要改動(dòng)。 //構(gòu)造函數(shù) CWavPlayer(CWavPlayer amp。 //音頻播放 void read_wav_header(int fd)。 //打開(kāi)音頻設(shè)備 void wav_record(uint16_t dtimes, int fd)。 //設(shè)置設(shè)備參數(shù) void alsa_record(char *sendBuffer)。other)。} private: uint32_t sample_rate。 //周期長(zhǎng)度( bytes) 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計(jì) ) 16 uint32_t bit_per_frame。 //the point of struct }。handle, default, mode, 0)) 0) { std::cerr snd_pcm_open: std::endl。 ,參數(shù)設(shè)置不當(dāng)將會(huì)導(dǎo)致音頻設(shè)備無(wú)法正常工作。 ( 3)楨 (frame):楨記錄了一個(gè)聲音單元,其長(zhǎng)度為樣本長(zhǎng)度與通道數(shù)的乘積 。而在非交錯(cuò)模式下,首先記錄的是一個(gè)周期內(nèi)所有楨的左聲道樣本,再記錄右聲道樣本,數(shù)據(jù)是以連續(xù)通道的方式存儲(chǔ)。hw_params)。 break 。 break 。sample_rate, amp。buffer_time, 0) 0) { 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計(jì) ) 18 std::cerr Error snd_pcm_hw_params_get_buffer_time_max/n。 if (snd_pcm_hw_params_set_buffer_time_near(handle, hw_params, amp。period_time, 0) 0) { std::cerr Error snd_pcm_hw_params_set_period_time_near/n。period_size, amp。format)。 //計(jì)算周期長(zhǎng)度 snd_pcm_hw_params_free(hw_params)。 size_t result = 0。 (size_t)r count)) { std::cerr Buffer Underrun std::endl。 } else if (r == ESTRPIPE) { std::cout Need suspend /n。 count = r。 snd_pcm_uframes_t period_size = ()。 snd_pcm_prepare(handle)。 snd_mixer_elem_t *elem。mixer, 0)) 0) { std::cerr snd_mi。 int result。 exit(1)。 if (rc == EPIPE) { usleep(202100)。 } } } ,我們?cè)偬砑右粋€(gè)播放函數(shù),當(dāng)接收到音頻數(shù)據(jù)時(shí),向音頻設(shè)備寫(xiě)入數(shù)據(jù),這個(gè)函數(shù)在 class COrtpClient 中: void COrtpClient::play_wav(char *pBuffer) { int rc = 0。 exit(1)。 } else if (r == EPIPE) { std::cerr overrun occurred: std::endl。 //把采集到的音頻數(shù)據(jù)放到 sendBuffer 緩沖區(qū)里,通過(guò) RTP 封裝然后發(fā)送 if (r == EAGAIN || (r = 0 amp。 void CWavPlayer::alsa_record(char *sendBuffer) 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計(jì) ) 19 { int r = 0。 //獲取采樣位數(shù) bit_per_frame = bit_per_sample * channels。 snd_pcm_format_t format。 } snd_pcm_hw_params(handle, hw_params)。 exit(1)。 } if (buffer_time 500000) buffer_time = 500000。 //設(shè)置采樣率 uint32_t buffer_time, period_time。 //設(shè)置通道數(shù) int dir = 0。 break 。 //設(shè)備初始化 snd_pcm_hw_params_set_access(handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)。 明白了各參數(shù)含義及關(guān)系后,我們開(kāi)始設(shè)置參數(shù): void CWavPlayer::set_pcm_params() { snd_pcm_hw_params_t *hw_params。 ( 5)周期 (period):音頻設(shè)備一次處理所需要的楨數(shù),對(duì)于音頻設(shè)備的數(shù)據(jù)訪問(wèn)以及音頻數(shù)據(jù)的存儲(chǔ),都是以此為單位。 ( 1)樣本長(zhǎng)度 (sample):樣本是記錄音頻數(shù)據(jù)最基本的單位,常見(jiàn)的有 8 位和 16 位。 } } snd_pcm_open 是 Alsa 庫(kù)提供的打開(kāi)設(shè)備調(diào)用函數(shù),這里我們指定打開(kāi)缺省的音頻設(shè)備,并根據(jù)參數(shù) mode 將設(shè)備置為錄音或是播放狀態(tài),如果參數(shù) mode 是 SND_PCM_STREAM_ PLAYBACK,則為打開(kāi)播 放設(shè)備;如果參數(shù) mode 是 SND_PCM_STREAM_CAPTURE,則為打開(kāi)錄音設(shè)備。 : void CWavPlayer::open_pcm_devices(snd_pcm_str
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1