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