亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1795 | 回復(fù): 0
打印 上一主題 下一主題

C++音視頻開發(fā)應(yīng)用模式(采集、編碼、解碼...) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-20 09:44 |只看該作者 |倒序?yàn)g覽

   在即時通訊應(yīng)用中,根據(jù)應(yīng)用場景的不同,需要對音頻輸入源進(jìn)行選擇,不同的應(yīng)用場景對應(yīng)不同的音頻工作模式。需要支持多種音頻工作(采集)模式,包括:

1、發(fā)言模式(默認(rèn)):自動選擇麥克風(fēng)為音頻輸入源設(shè)備,用戶說話的聲音被麥克風(fēng)采集,啟動音頻特效處理(包括:回音消除、靜音檢測、噪音抑制、自動增溢),該模式通常應(yīng)用于互動交流,用戶發(fā)言討論等場合;

2、放歌模式:自動選擇立體聲混音輸入源設(shè)備,本地計算機(jī)所播放的聲音被采集,同時SDK內(nèi)部會自動屏蔽其它用戶的聲音(如果不屏蔽,則用戶的聲音會被采集下來,并回傳給用戶,用戶那邊將會聽到回音),SDK內(nèi)部會自動關(guān)閉音頻特效處理,該模式通常應(yīng)用于向其他用戶放歌,而不用關(guān)心其他用戶發(fā)言的場合;

3、卡拉OK模式:自動選擇立體聲混音和麥克風(fēng)兩個輸入源設(shè)備(該特性與硬件相關(guān),有些聲卡不支持同時采集麥克風(fēng)和立體聲混音),本地計算機(jī)所播放的聲音和用戶說話的聲音將會被采集,同時SDK內(nèi)部會自動屏蔽其它用戶的聲音,SDK內(nèi)部會自動關(guān)閉音頻特效處理,該模式通常應(yīng)用于向其他用戶放歌,同時自己用麥克風(fēng)伴唱,而不用關(guān)心其它用戶發(fā)言的場合;

4、線路輸入模式:自動選擇線路輸入源設(shè)備,通過線路輸入的聲音將被采集(通常是指將外部的DV、DVD、TV等設(shè)備的音頻輸出端子接入聲卡的LineIn口的應(yīng)用),SDK內(nèi)部會自動關(guān)閉音頻特效處理,該模式通常應(yīng)用于向其他用戶播放外部設(shè)備的聲音,而不需要自己講話的場合,如向房間的所有用戶直播電視信號時,可將電視的視頻輸出接入專用的視頻采集卡,而將電視的聲音輸出接入聲卡的LineIn接口,并選擇“線路輸入模式”,那么當(dāng)前房間內(nèi)的其它用戶就可以收看到實(shí)時的電視畫面與聲音了。

典型修改音頻工作模式的代碼如下:

1.DWORD dwAudioMode = 1;    // 修改為放歌模式
2.BRAC_SetSDKOption(BRAC_SO_AUDIO_CPATUREMODE,(PCHAR)&dwAudioMode,sizeof(dwAudioMode));

初始化自動啟動“發(fā)言模式”,如需要切換到其它的工作模式,需要通過相應(yīng)的接口設(shè)置,在 初始化成功后,可動態(tài)切換,由于切換過程中,內(nèi)部會自動選擇對應(yīng)的源設(shè)備,故切換后,上層應(yīng)用需要更新當(dāng)前的音頻采集設(shè)備,以及對應(yīng)的音頻特效狀態(tài)等標(biāo)志。

根據(jù)模式的不同和網(wǎng)絡(luò)狀態(tài)的不同,動態(tài)調(diào)節(jié)播放緩沖區(qū)的大小,從而來控制播放延遲,如發(fā)言模式下,當(dāng)網(wǎng)絡(luò)條件好的情況下,平均延遲<300ms,當(dāng)網(wǎng)絡(luò)條件不好的情況下,平均延遲<800ms;而放歌模式等其它非發(fā)言模式,延遲將會隨網(wǎng)絡(luò)狀態(tài)的變化而變化?偟膩碚f,發(fā)言模式延遲小,保障實(shí)時性,非發(fā)言模式,如放歌模式,則延遲會稍大,保障流產(chǎn)性。

自動記錄最后一次上層應(yīng)用所選擇的工作模式,下次重新運(yùn)行后,會自動啟用前次記錄的工作模式,如果不期望SDK記錄前次工作模式,則可通過關(guān)閉的配置文件來實(shí)現(xiàn)。

視頻質(zhì)量主要是通過服務(wù)器的配置文件來控制,該配置是整個系統(tǒng)所有房間的默認(rèn)配置,早期的版本無法實(shí)現(xiàn)由上層應(yīng)用來控制不同的用戶采用不同的視頻質(zhì)量參數(shù),本地視頻質(zhì)量控制接口,可以由上層應(yīng)用控制本地視頻的編碼質(zhì)量,為某些特定的應(yīng)用提供了基礎(chǔ),例如:可以實(shí)現(xiàn)主持人發(fā)言時采用高質(zhì)量的視頻參數(shù),而普通用戶采集一般的視頻參數(shù),從而達(dá)到發(fā)言者的視頻效果優(yōu)于普通用戶的特定效果。(如果采集的視頻信號有“橫條”干擾)

本地視頻質(zhì)量控制接口可以調(diào)節(jié)的參數(shù)包括“視頻幀率”、“視頻碼率”、“視頻質(zhì)量”、“關(guān)鍵幀間隔”以及“預(yù)設(shè)參數(shù)”的控制,參數(shù)定義如下:

01.///< 本地視頻編碼碼率設(shè)置(參數(shù)為int型,同服務(wù)器配置:VideoBitrate)
02.#define BRAC_SO_LOCALVIDEO_BITRATECTRL      30
03.///< 本地視頻編碼質(zhì)量因子控制(參數(shù)為int型,同服務(wù)器配置:VideoQuality)
04.#define BRAC_SO_LOCALVIDEO_QUALITYCTRL      31
05.///< 本地視頻編碼關(guān)鍵幀間隔控制(參數(shù)為int型,同服務(wù)器配置:VideoGOPSize)
06.#define BRAC_SO_LOCALVIDEO_GOPCTRL          32
07.///< 本地視頻編碼幀率控制(參數(shù)為int型,同服務(wù)器配置:VideoFps) 
08.#define BRAC_SO_LOCALVIDEO_FPSCTRL          33
09.///< 本地視頻編碼預(yù)設(shè)參數(shù)控制(參數(shù)為int型,1-5)
10.#define BRAC_SO_LOCALVIDEO_PRESETCTRL       34

其中視頻質(zhì)量控制有兩種模式“平均碼率模式”(默認(rèn)設(shè)置)和“質(zhì)量因子模式”,當(dāng)設(shè)置的碼率大于0時,啟動“平均碼率模式”,當(dāng)設(shè)置的碼率為0時,啟動“質(zhì)量因子模式”。

典型的設(shè)置“平均碼率模式”參數(shù)代碼如下:

01.DWORD dwValue = 0;
02.// 設(shè)置本地視頻編碼的碼率
03.dwValue = 60 * 1000;    // 60 kbps
04.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_BITRATECTRL,(const char*)&dwValue,sizeof(DWORD));
05.// 設(shè)置本地視頻編碼的關(guān)鍵幀間隔
06.dwValue = 20;
07.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_GOPCTRL,(const char*)&dwValue,sizeof(DWORD));
08.// 設(shè)置本地視頻編碼的幀率
09.dwValue = 8;
10.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_FPSCTRL,(const char*)&dwValue,sizeof(DWORD));
11.// 設(shè)置本地視頻編碼的預(yù)設(shè)參數(shù)
12.dwValue = 3;
13.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_PRESETCTRL,(const char*)&dwValue,sizeof(DWORD));
14.// 使參數(shù)設(shè)置生效
15.BOOL bUseAppParam = TRUE;
16.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_APPLYPARAM,(const char*)&bUseAppParam,sizeof(DWORD));

典型的設(shè)置“質(zhì)量因子模式”參數(shù)代碼如下:

01.DWORD dwValue = 0;
02.// 設(shè)置本地視頻編碼的碼率
03.dwValue = 0;
04.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_BITRATECTRL,(const char*)&dwValue,sizeof(DWORD));
05.// 設(shè)置本地視頻編碼的質(zhì)量因子
06.dwValue = 4;
07.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_QUALITYCTRL,(const char*)&dwValue,sizeof(DWORD));
08.// 設(shè)置本地視頻編碼的關(guān)鍵幀間隔
09.dwValue = 20;
10.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_GOPCTRL,(const char*)&dwValue,sizeof(DWORD));
11.// 設(shè)置本地視頻編碼的幀率
12.dwValue = 8;
13.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_FPSCTRL,(const char*)&dwValue,sizeof(DWORD));
14.// 設(shè)置本地視頻編碼的預(yù)設(shè)參數(shù)
15.dwValue = 3;
16.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_PRESETCTRL,(const char*)&dwValue,sizeof(DWORD));
17.// 使參數(shù)設(shè)置生效
18.BOOL bUseAppParam = TRUE;
19.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_APPLYPARAM,(const char*)&bUseAppParam,sizeof(DWORD));

當(dāng)啟動“平均碼率模式”時,質(zhì)量因子的參數(shù)設(shè)置仍然有效,只是系統(tǒng)會限制輸出的最高碼率。另外要使設(shè)置的參數(shù)生效,需要調(diào)用“BRAC_SetSDKOption”接口并使用“BRAC_SO_LOCALVIDEO_APPLYPARAM”標(biāo)志啟用所設(shè)置的參數(shù),同時也可利用該標(biāo)志恢復(fù)服務(wù)器配置的默認(rèn)視頻質(zhì)量參數(shù)。

關(guān)于視頻幀率關(guān)鍵幀間隔的參數(shù)設(shè)置可參考如下原則:

1、幀率越高,視頻越流暢(最大值為25fps),同時幀率也會對碼率和CPU資源占用產(chǎn)生一定的影響,通常的建議是互聯(lián)網(wǎng)應(yīng)用(8-12fps),局域網(wǎng)應(yīng)用(18-25fps);

2、關(guān)鍵幀間隔是指在編碼的過程中,兩個關(guān)鍵幀之間非關(guān)鍵幀的數(shù)量,值越大,碼率越小,但會降低視頻的質(zhì)量,值越小,碼率越大,視頻質(zhì)量較好,但不宜過小,通常的建議是互聯(lián)網(wǎng)應(yīng)用(幀率的3、4倍),局域網(wǎng)應(yīng)用(等于幀率),不要小于幀率;

關(guān)于本地視頻編碼的預(yù)設(shè)參數(shù):BRAC_SO_LOCALVIDEO_PRESETCTRL,其取值范圍為1-5,主要用來控制CPU資源占用率和畫面細(xì)節(jié),值越小,編碼時的CPU占用率越低,但會損失對畫面細(xì)節(jié)的處理;值越大,編碼時的CPU占用率越高,但對畫面細(xì)節(jié)的處理會更細(xì)膩,該參數(shù)主要針對高碼率有效,低碼率時由于碼率的限制,視頻畫面細(xì)節(jié)無法表現(xiàn)出來,所以低碼率模式下,可以將該參數(shù)調(diào)節(jié)低一些,以降低CPU的利用率。

關(guān)于本地視頻編碼的碼率參數(shù):BRAC_SO_LOCALVIDEO_BITRATECTRL,單位為bps,碼率越小,視頻質(zhì)量越差;碼率越高,視頻質(zhì)量越好,同時該參數(shù)還與視頻畫面的分辯率有關(guān),不同的分辨率有不同的取值范圍,如在互聯(lián)網(wǎng)應(yīng)用狀態(tài)下,分辯率是176x144典型的取值范圍是(10kbps ~ 60kbps),分辨率是320x240典型的取值范圍是50kbps ~ 120kbps,如果是局域網(wǎng)應(yīng)用,則碼率可適當(dāng)提高。

關(guān)于本地視頻編碼的質(zhì)量因子參數(shù):BRAC_SO_LOCALVIDEO_QUALITYCTRL,取值范圍為1-6,值越小,畫面質(zhì)量越低,輸出碼率也越低,值越大,畫面質(zhì)量越高,輸出碼率也越高。

關(guān)于“平均碼率模式”和“質(zhì)量因子模式”兩種視頻質(zhì)量控制模式的區(qū)別和應(yīng)用,可參考如下原則:

1、“平均碼率模式”:視頻編碼時以輸出碼率為優(yōu)先考慮條件,當(dāng)畫面靜止時,輸出的碼率較低,動態(tài)畫面碼率會較高,瞬時碼率可能會超過設(shè)置的參數(shù)(最高不會超過10%),但是其輸出的視頻數(shù)據(jù)平均碼率將會維持在設(shè)置的參數(shù)附近,當(dāng)畫面運(yùn)動量過大時,編碼器為了維持平均碼率,將會損失畫面的質(zhì)量,通;ヂ(lián)網(wǎng)應(yīng)用可采用該模式;

2、“質(zhì)量因子模式”:當(dāng)碼率參數(shù)設(shè)置為0時,該模式生效,視頻編碼時以視頻質(zhì)量為優(yōu)先考慮條件,靜止的畫面和動態(tài)畫面將會用不同的量化因子進(jìn)行編碼,維持在一個固定的畫面質(zhì)量下,當(dāng)畫面靜止時,碼率較低,當(dāng)畫面運(yùn)動時,碼率較高,通常局域網(wǎng)應(yīng)用可采用該模式。由于該模式下沒有限制碼率,所以大運(yùn)動量畫面時,為了保持固定的畫面質(zhì)量,碼率的變化將會比較大,所以該模式不適合于互聯(lián)網(wǎng)應(yīng)用。

3、如果希望在互聯(lián)網(wǎng)的環(huán)境下獲得較高質(zhì)量的視頻效果(在網(wǎng)絡(luò)帶寬許可的情況下),建議采用“平均碼率模式”,只是可以適當(dāng)提高視頻質(zhì)量參數(shù)(VideoQuality)的值,視頻碼率參數(shù)根據(jù)需要進(jìn)行設(shè)置。低碼率,配置較低的視頻質(zhì)量,高碼率就需要配置較高的視頻質(zhì)量。

(佰銳科技一直專注于音視頻即時通訊的研發(fā),不論在手機(jī)上,還是在PC上?是在linux上,還是在Windows上? 音視頻的即時通訊都能實(shí)現(xiàn).詳情請訪問:http://www.bairuitech.com/
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP