日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

直播过程中的掌声,口哨,背景音等音效怎么实现

發(fā)布時間:2024/3/24 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 直播过程中的掌声,口哨,背景音等音效怎么实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家有沒有想過在直播過程中的掌聲,口哨,背景音等音效是怎么實現(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。