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

正文內(nèi)容

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

2023-03-09 10:16:16 本頁面
 

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