直播过程中的掌声,口哨,背景音等音效怎么实现
大家有沒有想過在直播過程中的掌聲,口哨,背景音等音效是怎么實現(xiàn)的嗎?這些功能都是可以通過混音來實現(xiàn)的。本篇文章介紹即構(gòu)科技音視頻SDK高級功能第五篇,ZegoLiveRoom SDK 混音功能,還是以iOS環(huán)境為例。
混音
1、功能簡介
ZegoLiveRoom SDK 為開發(fā)者提供了混音功能。混音是指,SDK 從 App 獲取一路音頻數(shù)據(jù),將其與采集的音頻數(shù)據(jù),整合為一路混音數(shù)據(jù),進而推流。直播過程中的掌聲,口哨,背景音等音效均可通過混音實現(xiàn)。
2、步驟
混音的使用流程如下:
App 啟用混音功能
App 設(shè)置混音音量
App 將混音數(shù)據(jù)傳遞給 SDK
2.1 啟用混音功能
調(diào)用此 API 啟用混音功能。
ZegoLiveRoomApi-Publisher.h/**混音開關(guān)@param enable true 啟用混音輸入,false 關(guān)閉混音輸入。默認 false@return true 成功,false 失敗@attention 必須確保在 initSDK 后調(diào)用@note 主播端開啟混音后,SDK 在 [ZegoLiveRoomApi (Publisher) -onAuxCallback:dataLen:sampleRate:channelCount:] 中獲取混音輸入數(shù)據(jù)*/ - (bool)enableAux:(BOOL)enable;請注意,后續(xù)操作均基于開啟混音功能的基礎(chǔ)上。
2.2 設(shè)置混音音量
啟用混音后,調(diào)用此 API 調(diào)整混音音量。
ZegoLiveRoomApi-Publisher.h/**設(shè)置混音音量@param volume 0~100,默認為 50*/ - (void)setAuxVolume:(int)volume;也可調(diào)用此 API 設(shè)置混音靜音。
ZegoLiveRoomApi-Publisher.h/**混音靜音開關(guān)@param bMute true: aux 輸入播放靜音,false: 不靜音。默認 false@return true 成功,false 失敗@attention 推流開始前調(diào)用本 API 進行參數(shù)配置*/ - (bool)muteAux:(bool)bMute;請注意,SDK 對上述兩個混音音量相關(guān)的 API 的調(diào)用時機無要求,混音前或混音后調(diào)用均可,取決于用戶需求。
2.3 App 傳遞數(shù)據(jù)給 SDK
啟用混音后,SDK 通過此 API 獲取待傳遞的混音數(shù)據(jù)。
ZegoLiveRoomApi-Publisher.h/** 混音音頻數(shù)據(jù)輸入回調(diào)。 當(dāng)開啟混音后,通過此回調(diào)獲取混音音頻數(shù)據(jù)。 <p><b>注意:</b> 1. 支持 16k 32k 44.1k 48k 采樣率、單聲道或者雙聲道、16位深的PCM 音頻數(shù)據(jù);<br> 2. 用戶根據(jù)實際填寫采樣率及聲道數(shù);<br> 3. 為確保混音效果,請不要在此 API 中執(zhí)行耗時操作</p>@param pDataLen *pDataLen既是輸入?yún)?shù)也是輸出參數(shù); 作為輸入?yún)?shù),SDK會提供好長度值,用戶按照這個長度寫入數(shù)據(jù)即可,數(shù)據(jù)足夠的情況下,無需更改*pDataLen的值 作為輸出參數(shù),如果填寫的數(shù)據(jù)不足SDK提供的長度值,則賦值*pDataLen = 0; 或者最后的尾音不足SDK提供的長度值,可以用靜音數(shù)據(jù)補齊。@param pSampleRate 混音數(shù)據(jù)采樣率,支持16k、32k、44.1k、48k @param pNumChannels 混音數(shù)據(jù)聲道數(shù),支持1、2 @attention 用戶調(diào)用該 API 將混音數(shù)據(jù)傳遞給 SDK @note 混音數(shù)據(jù) bit depth 必須為 16(2字節(jié)) */ - (void)onAuxCallback:(void *)pData dataLen:(int *)pDataLen sampleRate:(int *)pSampleRate channelCount:(int *)pChannelCount;示例代碼片段如下: 示例代碼中pcm文件采樣率為:44100 聲道數(shù)為: 2
ZegoLiveViewController.m- (void)onAuxCallback:(void *)pData dataLen:(int *)pDataLen sampleRate:(int *)pSampleRate channelCount:(int *)pChannelCount {if (self.auxData == nil){//初始化auxDataNSURL *auxURL = [[NSBundle mainBundle] URLForResource:@"a.pcm" withExtension:nil];if (auxURL){self.auxData = [NSData dataWithContentsOfURL:auxURL options:0 error:nil];self.pPos = (void *)[self.auxData bytes];}}if (self.auxData){int nLen = (int)[self.auxData length];if (self.pPos == 0)self.pPos = (void *)[self.auxData bytes];const void *pAuxData = [self.auxData bytes];if (pAuxData == NULL)return;*pSampleRate = 44100;*pChannelCount = 2;int nLeftLen = (int)(pAuxData + nLen - self.pPos);if (nLeftLen < *pDataLen) {self.pPos = (void *)pAuxData;*pDataLen = 0;return;}memcpy(pData, self.pPos, *pDataLen);self.pPos = self.pPos + *pDataLen;} }請注意:
Demo 中演示的是循環(huán)播放音頻,請開發(fā)者按照各自的需求實現(xiàn)該方法,不要直接復(fù)制。
如果數(shù)據(jù)足夠,則copy pDataLen長度的數(shù)據(jù)到pData,如果不足要不補齊靜音到SDK指定的pDataLen長度,要不設(shè)置
*pDataLen = 0。
總結(jié)
以上是生活随笔為你收集整理的直播过程中的掌声,口哨,背景音等音效怎么实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超级应用程序的图标设计系统
- 下一篇: jQuery offset( ) 方法