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

正文內(nèi)容

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

2025-03-18 10:16本頁面
  

【正文】 ++++ | synchronization source (SSRC) identifier | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | contributing source (CSRC) identifiers | | .... | +++++++++++++++++++++++++++++++++ 以上域具體意義如下: ( 1)版本 (V):2 比特 此域定義了 RTP 的版本 .此協(xié)議定義的版本是 2.(值 1被 RTP 草案版本使用 ,值 0 用在最初 vat語音工具使用的協(xié)議中 .) ( 2)填料 (P):1 比特 若填料比特被設(shè)置 ,此包包含一到多個附加在末端的填充比特 ,不是負(fù)載的一部分 .填料的最后一個字節(jié)包含可以忽略多少個填充比特 .填料可能用于某些具有固定長度的加密算法 ,或者在底層數(shù)據(jù)單元中傳輸多個 RTP 包 . ( 3)擴展 (X):1 比特 若設(shè)置擴展比特 ,固定頭 (僅 )后面跟隨一個頭擴展 . ( 4) CSRC 計數(shù) (CC):4 比 特 CSRC 計數(shù)包含了跟在固定頭后面 CSRC 識別符的數(shù)目 . ( 5)標(biāo)志 (M):1比特 標(biāo)志的解釋由具體協(xié)議規(guī)定 .它用來允許在比特流中標(biāo)記重要的事件 ,如幀范圍 .規(guī)定該標(biāo)志在靜音后的第一個語音包時置位 . 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計 ) 9 ( 6)負(fù)載類型 (PT):7 比特 此域定義了負(fù)載的格式 ,由具體應(yīng)用決定其解釋 .協(xié)議可以規(guī)定負(fù)載類型碼和負(fù)載格式之間一個默認(rèn)的匹配 .其他的負(fù)載類型碼可以通過非 RTP 方法動態(tài)定義 .RTP 發(fā)射機在任意給定時間發(fā)出一個單獨的 RTP負(fù)載類型 。 第三章 實時語音通信系統(tǒng)簡介 系統(tǒng)平臺 本系統(tǒng)是在 linux 下實現(xiàn)的,選 用 Ubuntu 作為軟件的實現(xiàn)平臺, vim 作為編寫工具,編程語言采用 C++。 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計 ) 11 Linux 是一位芬蘭的年輕人 Linus Benedict Torvalds 于 1991 年 10 月在赫爾辛基大學(xué)對外正式發(fā)布一套操作系統(tǒng),它一種 Unix 風(fēng)格的操作系統(tǒng),在源代碼級上兼容絕大部分 Unix 標(biāo)準(zhǔn),是一個支持多用戶、多進(jìn)程、多線程、功能強大而且 執(zhí)行穩(wěn)定的操作系統(tǒng)。目前 Linux 已經(jīng)得到了越來越多的應(yīng)用。采用在計算機以太網(wǎng)上進(jìn)行點對點的通信模式。接收方則對網(wǎng)絡(luò)層傳來的數(shù)據(jù)包解封,并交由 RTP 提取音頻數(shù)據(jù),然后進(jìn)行音頻解壓縮,再經(jīng)揚聲器播放出來。 數(shù)字音頻系統(tǒng)通過將聲波的波型轉(zhuǎn)換成一系列二進(jìn)制數(shù)據(jù),來實現(xiàn)對原始聲音的現(xiàn),實現(xiàn)這一步驟的設(shè)備常被稱為模 /數(shù)轉(zhuǎn)換器( A/D)。對于采樣過程中的每一個樣本來說,數(shù)字音頻系統(tǒng) 會分配一定存儲位來記錄聲波的振幅,一般稱之為采樣分辯率或者采樣精度,采樣精度越高,聲音還原時就會越細(xì)膩。采樣就是每隔一定時間就讀一次聲音信號的幅度,而量化則是將采樣得到的聲音信號幅度轉(zhuǎn)換為數(shù)字值,從本質(zhì)上講,采樣是時間上的數(shù)字化,而量化則是幅度上的數(shù)字化。采樣嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計 ) 13 頻率的選擇應(yīng)該遵循奈奎斯特( Harry Nyquist)采樣理論:如果對某一模擬信號進(jìn)行采樣,則采樣后可還原的最高信號頻率只有采樣頻率的一半,或者說只要采樣頻率高于輸入信號最高頻率的兩倍,就能從采樣信號系列重構(gòu)原始信號。常用的音頻采樣頻率有 8kHz、 、 、 16kHz、 、 、48kHz 等,如果采用更高的采樣頻率,還 可以達(dá)到 DVD 的音質(zhì)。這個數(shù)值越大,解析度就越高,錄制和回放的聲音就越真實。所以在電腦上錄音的本質(zhì)就是把模擬聲音信號轉(zhuǎn)換成數(shù)字信號。采集卡的位是指采集卡在采集和 播放聲音文件時所使用數(shù)字聲音信號的二進(jìn)制位數(shù)。 8 位代表 2 的 8 次方 256, 16 位則代表 2 的 16 次方 64K。 常用的采樣位數(shù)有 8位、 12 位和 16 位。 ( 3) .聲道數(shù) 聲道數(shù)是反映音頻數(shù)字化質(zhì)量的另一個重要因素,它有單聲道和雙聲道之分。 出于對安全性方面的考慮, Linux 下的應(yīng)用程序無法直接對聲卡這類硬件設(shè)備進(jìn)行操作,而是必須通過內(nèi)核提供的驅(qū)動程序才能完成。 目前 Linux 有三個主流的聲卡驅(qū)動程序集: OSS/Lite(也稱為 OSS/Free)、 OSS/Full(商業(yè)軟件)、 ALSA(自由軟件)。后來 Hannu 跑去開發(fā) Open Sound System(也就是上面所說的 OSS/Full)。現(xiàn)在 Alan Cox 是內(nèi)核聲卡驅(qū)程集的維護人。 OSS/Full 是由 4Front Technologies 開發(fā)并銷售的商業(yè)軟件。 OSS/Full 完全兼容以前基于 OSS/ Lite 開發(fā)的應(yīng)用程序。 ALSA 標(biāo)準(zhǔn)是一個先進(jìn)的 linux 聲音體系。 ALSA 包含一系列內(nèi)核驅(qū)動對不同的聲卡進(jìn)行支持,還提供了libasound 的 API 庫。與此相反 OSS/Free 驅(qū)動在內(nèi)核層次調(diào)用,需要指定設(shè)備名和調(diào)用 ioctl。 ALSA 擁有調(diào)用插件的能力對新設(shè)備提供擴展,包括那些用軟件模擬出來的虛擬設(shè)備。 ALSA 音頻編程 ALSA 庫的安裝 在 linux 終端下執(zhí)行: $ sudo aptget install libasound2dev 安裝完畢! 音頻數(shù)據(jù)的采集和播放的實現(xiàn) 一個典型的音頻程序應(yīng)該具有以下結(jié)構(gòu) : ( 1)打開音頻設(shè)備 ( 2)為設(shè)備設(shè)置參數(shù)(主要參數(shù)有三個:采樣率、采樣位數(shù)、通道數(shù)) ( 3)向音頻設(shè)備讀 /寫音頻數(shù)據(jù) ( 4)關(guān)閉設(shè)備 Alsa 庫為我們實現(xiàn)這些操作提供了豐富的接口,我們利用 Alsa 接口把語音的采集和播放封裝成一個類 class CWavPlayer,下面是 class CWavPlayer 的部分代碼: class CWavPlayer { 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計 ) 15 public: CWavPlayer(uint32_t sample_rate = 8000, uint16_t bit_per_sample = 16, uint16_t channels = 2)。other)。 public: void wav_play(int fd)。 void write_wav_header(int fd, int dtime = 20)。 void open_pcm_devices(snd_pcm_stream_t mode = SND_PCM_STREAM_PLAYBACK)。 //采集音頻數(shù)據(jù) void prepare_wav_params(const int dtime)。 //print the params of wav struct void set_pcm_params()。 void set_pcm_mixer()。operator=(CWavPlayer amp。 public: uint32_t get_chunk_byte() const { return chunk_byte。} snd_pcm_uframes_t get_period_size() const { return period_size。 //采樣率 uint16_t bit_per_sample。 //聲道 uint32_t chunk_byte。 //幀大小 snd_pcm_t *handle。 //周期 WAVHeader_t *wav。 下面介紹一下系統(tǒng)中語音的采集部分的實現(xiàn)。 if ((rc = snd_pcm_open(amp。 exit(1)。如果設(shè)備打開成功, pcm_handle 便指向該設(shè)備句柄。在設(shè)置參數(shù)前,我們需要了解一下各個參數(shù)的含義以及一些基本概念。 ( 2)通道數(shù) (channel):該參數(shù)為 1 表示單聲道, 2則是立體聲。 ( 4)采樣率 (rate):每秒鐘采樣次數(shù),該次數(shù)是針對楨而言。 交錯模式 (interleaved):是一種音頻數(shù)據(jù)的記錄方式,在交錯模式下,數(shù)據(jù)以連續(xù)嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計 ) 17 楨的形式存放,即首先記錄完楨 1的左聲道樣本和右聲道樣本(假設(shè)為立體聲格式),再開始楨 2的記錄。不過多數(shù)情況下,我們只需要使用交錯模式就 可以了。 snd_pcm_hw_params_malloc(amp。 snd_pcm_hw_params_any(handle, hw_params)。 //設(shè)置為交錯模式 switch(bit_per_sample/8) //設(shè)置采樣位數(shù) { case 1:snd_pcm_hw_params_set_format(handle, hw_params, SND_PCM_FORMAT_U8)。 case 2:snd_pcm_hw_params_set_format(handle, hw_params, SND_PCM_FORMAT_S16_LE)。 case 3:snd_pcm_hw_params_set_format(handle, hw_params, SND_PCM_FORMAT_S24_LE)。 } snd_pcm_hw_params_set_channels(handle, hw_params, channels)。 snd_pcm_hw_params_set_rate_near(handle, hw_params, amp。dir)。 if (snd_pcm_hw_params_get_buffer_time_max(hw_params, amp。 exit(1)。 period_time = buffer_time / 4。buffer_time, 0) 0) { std::cerr Error snd_pcm_hw_params_set_buffer_time_near/n。 } if (snd_pcm_hw_params_set_period_time_near(handle, hw_params, amp。 exit(1)。 snd_pcm_hw_params_get_period_size(hw_params, amp。dir)。 snd_pcm_hw_params_get_format(hw_params, amp。 bit_per_sample = snd_pcm_format_physical_width(format)。 //計算幀大小 chunk_byte = (uint32_t)period_size * bit_per_frame / 8。 } ,錄音過程實際上就是從音頻設(shè)備中讀取數(shù)據(jù)信息并保存。 size_t count = period_size。 while (count 0) { r = snd_pcm_readi(handle, sendBuffer, count)。amp。 snd_pcm_wait(handle, 1000)。 snd_pcm_prepare(handle)。 } else if (r 0) { std::cout Error snd_pcm_readi: snd_strerror(r) std::endl。 } 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計 ) 20 if (r 0) { result += r。 sendBuffer += r * bit_per_frame / 8。 snd_pcm_t *handle = ()。 //將 pBuffer 接收到得音頻數(shù)據(jù)寫入音頻設(shè)備 while((rc = snd_pcm_writei(handle, pBuffer, period_size)) 0) { std::cout rc = rc std::endl。 /* EPIPE means underrun */ //perror(underrun occurred\n)。 } else if (rc 0) { perror(error from writei\n)。 } 嘉應(yīng)學(xué)院畢業(yè)論文 (設(shè)計 ) 21 } } 音量調(diào)整相關(guān)操作 初始 化麥克風(fēng)及本機音量調(diào)節(jié)器相關(guān)代碼: void CWavPlayer::set_pcm_mixer() { snd_mixer_t *mixer。 long minVolume, maxVolume。 if ((result = snd_mixer_open(a
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1