大家有没有想过在直播过程中的掌声,口哨,背景音等音效是怎么实现的吗?这些功能都是可以通过混音来实现的。本篇文章介绍即构科技音视频SDK高级功能第五篇,ZegoLiveRoom SDK 混音功能,还是以iOS环境为例。

混音

1、功能简介

ZegoLiveRoom SDK 为开发者提供了混音功能。混音是指,SDK 从 App 获取一路音频数据,将其与采集的音频数据,整合为一路混音数据,进而推流。直播过程中的掌声,口哨,背景音等音效均可通过混音实现。

2、步骤

混音的使用流程如下:

  1. App 启用混音功能

  2. App 设置混音音量

  3. 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. 为确保混音效果,请不要在此 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;}
}

请注意:

  1. Demo 中演示的是循环播放音频,请开发者按照各自的需求实现该方法,不要直接复制。

  2. 如果数据足够,则copy pDataLen长度的数据到pData,如果不足要不补齐静音到SDK指定的pDataLen长度,要不设置
    *pDataLen = 0。

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

  1. 直播平台开发,防止直播过程中被截屏或录屏

    直播平台开发,防止直播过程中被截屏或录屏 Activity创建时设置WindowManager.LayoutParams.FLAG_SECURE属性,该属性能防止屏幕被截图和录制.以下为修复代码示例: ...

  2. Android10.0(Q) 实现通话中播放音乐/通话背景音(答录机/魔音功能)

    前言 这个功能大体意思类似机器人交互的效果,一般多应用到客服接听场景中,电话接通自动播放一段录音给 对方听,根据选项操作录音解析等完成一整个流程.这里面电话接通播放声音给对方听普通应用是做不到的, 因 ...

  3. mt6735 [Audio Speech]如何在通话中播放音乐/通话背景音

    [DESCRIPTION] MT6735默认的架构下,通话过程中不能播放音乐,也没有实现通话背景音,如何实现? [SOLUTION] 1.修改AudioService.java,实现通话中播放音乐 p ...

  4. 如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析

    在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传 ...

  5. Android 如何在通话中播放音乐/通话背景音

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  6. EasyDSS流媒体服务器成功实现5G超高清8k视频RTMP/HLS(m3u8)直播过程中遇到的一些坑(insta360 4k/8k直播)

    自从2019年春节回来之后,5G直播就如雨后春笋一般,各大公司和运营商都在推行5G 4K.8K高清直播,当然,这也就卖火了insta360这款设备了,各家都在用这个设备做360全景高清4k.8k直播, ...

  7. EasyRTMP手机直播推流到EasyDSS进行RTMP直播过程中分辨率反复切换崩溃问题解决

    前篇博客介绍了Android EasyRTMP App的一些功能以及简单实现.这篇博客介绍一下我们遇到的一个BUG,以及它的出现原因,解决方式. 这个bug是在切换分辨率的时候,偶尔会出现App崩溃. ...

  8. 计算机维修直播,电脑直播过程中出现杂声怎么办?三种解决方法任你选

    现在,越来越多的人开始用电脑做直播.比如说利用直播来卖货或者分享个人的工作.生活状态.在电脑直播的时候,也会遇到各种各样的问题,其中,很多人就问到电脑直播有杂音滋滋响怎么办?电脑直播中发生杂音滋滋响, ...

  9. 去ioe mysql_去IOE过程中MySQL的业务背景

    MySQL存储引擎 MyISAM Mysql5.5之前的默认数据库引擎,最为常用.拥有较高的插入,查询速度,但不支持事务. InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MyS ...

最新文章

  1. python 字典
  2. 在Mybatis-spring上基于注解的数据源实现方案
  3. STM32F0xx_SPI读写(Flash)配置详细过程
  4. SAP CRM和Cloud for Customer里客户主数据的层级维护
  5. Application Verifier
  6. C、C++函数集 说明
  7. opencv打开双目
  8. C#使用MathNet的矩阵与向量运算示例
  9. 自定义点击弹出设置百度商桥
  10. Python如何使用Continue语句?用法示例
  11. 7-1 厘米换算英尺英寸 (15分)
  12. 七彩虹将星 X15 AT 2023 参数配置 七彩虹将星 X15 AT 评测
  13. 获取CheckedListBox选中的项
  14. 图像直方图均衡化和空间滤波
  15. 如何提高沟通表达能力
  16. 马的管辖 计蒜客 - A2223
  17. Office365客户端激活失败
  18. 解决使用MSComm控件过程中内存溢出的问题
  19. 看完这篇还不会Elasticsearch,我跪搓衣板,90%程序员已收藏
  20. 【企业数智化转型】第一章:产业互联网浪潮

热门文章

  1. 基于javaweb的茶叶商城管理系统(java+ssm+jsp+ajax+jquery+mysql)
  2. android 连笔记本无线上网,[转载]android手机通过笔记本无线wifi上网
  3. 黑客实战之攻击篇——用NC打造成自己的简单后门
  4. 算法题中关于去重问题的解法(不同的值)
  5. 113 Three.js的obb (OrientedboundingBox)方向包围盒的使用
  6. eclipse中文变英文
  7. vue-cli中css引入图片打包路径问题
  8. 云基础设施之硬件安全威胁
  9. 关于Foreach是如何实现的问题
  10. 2021年全球凸轮链收入大约1623.7百万美元,预计2028年达到2018.5百万美元