音视频开发进阶指南:基于iOS实现超低延时耳返
1 功能简介
在音视频应用中我们经常涉及到耳机麦克风和设备麦克风的切换。不同声道的配置。在遇到这种情况的时候,我们如何配置呢?
- 耳返即耳机采集监听,在设备上插入耳机(普通耳机或蓝牙耳机)后,能从本机耳机侧听到本设备麦克风采集的声音。
- 双声道即两个声音通道,听到声音时可以根据左耳和右耳对声音相位差来判断声源的具体位置。ZEGO Express SDK 默认音频采集单声道,当开发者有高音质需求时,可开启双声道采集功能,通过专门的双声道采集设备可以采集到双声道的音频数据并进行推流。
2 示例源码下载
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/EarReturnAndChannelSettings” 目录下的文件。
3 前提条件
在进行耳返与声道设置之前,请确保:
- 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。
- 已在 ZEGO 控制台 创建项目,并申请有效的 AppID,详情请参考 控制台 - 项目管理 中的“项目信息”。
4 使用步骤
4.1 设置耳返
4.1.1 开启耳返
开启预览后或者开始推流后调用 enableHeadphoneMonitor
开启采集监听即耳返,主播方讲话后,会听到自己的声音。
开启耳返后,在连接上耳麦时耳返功能才实际生效。
[[ZegoExpressEngine sharedEngine] enableHeadphoneMonitor:YES];
4.1.2 设置耳返音量
开启预览后或者开始推流后可调用 setHeadphoneMonitorVolume
调整耳返的音量。
其中参数 “volume” 为采集耳返音量大小,取值范围为 0 ~ 200,默认为 “100”。
[[ZegoExpressEngine sharedEngine] setHeadphoneMonitorVolume:100];
4.2 设置声道
setAudioConfig
和 setAudioCaptureStereoMode
都需要在 startPublishingStream
、startPlayingStream
、startPreview
、createMediaPlayer
和 createAudioEffectPlayer
之前调用才有效。
4.2.1 设置音频双声道编码
调用 setAudioConfig
方法设置音频质量相关配置,其中音频编码声道参数 “channel” 需要设置为双声道编码(默认值为单声道编码),其他参数取默认值即可。
ZegoAudioConfig *audioConfig = [ZegoAudioConfig configWithPreset:ZegoAudioConfigPresetHighQualityStereo];
[[ZegoExpressEngine sharedEngine] setAudioConfig:audioConfig];
4.2.2 设置音频采集双声道模式
调用 setAudioCaptureStereoMode
方法开启音频双声道采集,并根据实际场景设置 “Mode” 参数(默认值为始终不开启双声道),用于实现始终开启双声道采集或仅在推流时开启双声道。
[[ZegoExpressEngine sharedEngine] setAudioCaptureStereoMode:ZegoAudioCaptureStereoModeAlways];
4.2.3 推流
请参考 快速开始 - 实现流程
的 “3.3 推流”,此时所推流的音频是双声道,拉流端无需做额外的配置,直接拉流即可播放双声道音频。
双声道采集需要推流端使用支持双声道采集的设备作为音频输入源,一般手机的麦克风不支持采集双声道。
5 API 参考列表
方法 | 描述 |
---|---|
enableHeadphoneMonitor |
开启/关闭耳返 |
setHeadphoneMonitorVolume |
设置耳返音量 |
setAudioConfig |
设置音频质量配置 |
setAudioCaptureStereoMode |
设置音频采集双声道模式 |
startPublishingStream |
开始推流 |
6 常见问题
推流端开启双声道采集后,拉流端(iOS)使用有线耳机能正常播放双声道,但使用 AirPods 播放时却变成了单声道?
iOS 由于系统限制,在使用蓝牙耳机时存在如下场景:
- 如果拉流端既推流又需要拉流,例如通话场景下同时执行播放和录音操作,则只能播放单声道。
- 如果确定拉流端仅需拉流而不用推流,则可以联系 ZEGO 技术支持获取解决方案。
获取Demo
获取本文的Demo、开发文档、技术支持。
获取SDK的商务活动、热门产品。
注册即构ZEGO开发者帐号,快速开始。
音视频开发进阶指南:基于iOS实现超低延时耳返的更多相关文章
- Android 音视频开发入门指南
Android 音视频从入门到提高 —— 任务列表 http://blog.51cto.com/ticktick/1956269(以这个学习为基础往下面去学习) Android 音视频开发学习思路-- ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
- HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)
HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...
- WebRTC 音视频开发
WebRTC 音视频开发 webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...
- Android音视频开发(1):H264 基本原理
前言 H264 视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的.随着 x264/openh264 以及 ffmpeg 等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大 ...
- OpenGL ES应用开发实践指南:iOS卷
<OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...
随机推荐
- 用python标准库smtplib来发QQ邮件及Django中发送邮件
1.QQ邮箱设置 点击QQ邮箱账号,进入后,开启smtp服务许可: 点击"生产授权码",在手机上发送相应的短信,得到授权码.[注意授权码之间没有空格] 2.典型代码块 impo ...
- System.currentTimeMillis()与时区无关
摘要:System.currentTimeMillis()获取的时间戳与时区无关. 综述 System.currentTimeMillis()经常被用来获取当前时间戳,单位是毫秒,可以用来计算当前 ...
- java LocalDateTime 加减当前时间
LocalDateTime 可以对当前时间进行加减,在LocalDateTime类中,以plus打头的方法是增加某项时间,如plusDays的请求参数表示将要增加的天数,但是可以为负值:以minu ...
- IDEA 调试Java代码的两个技巧
本文介绍两个使用IDEA 调试Java代码的两个技巧: 修改变量值 使用RuntimeException终止代码执行 修改变量值 在Java代码调试过程中,我们可以修改变量值,使其达到走指定分 ...
- Scrum进入疲惫期?三点帮你走出困境
<敏捷软件开发>中提到: "Scrum 可以帮助团队更好地应对变化和不确定性,以及更快地响应客户需求.通过持续的反馈和改进,Scrum 可以提高团队的适应性和灵活性." ...
- Spring扩展接口-BeanFactoryAware
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 国内用什么邮箱比较正式 个人邮箱对比qq邮箱网易新浪搜狐阿里云
本文永久链接:https://forum.piwind.com/d/19-guo-nei-yong-shi-yao-you-xiang-bi-jiao-zheng-shi-ge-ren-you-xia ...
- UPS 6航班空难分析与总结
1. 事件概况 事故时间:2008年9月3日 事故地点:阿联酋迪拜国际机场附近 机型:波音747-400F(货运型) 航班编号:UPS 6 机组成员:2人(1名机长和1名副驾驶) 机上人员伤亡:机组人 ...
- [书籍精读]《JavaScript异步编程》精读笔记分享
写在前面 书籍介绍:本书讲述基本的异步处理技巧,包括PubSub.事件模式.Promises等,通过这些技巧,可以更好的应对大型Web应用程序的复杂性,交互快速响应的代码.理解了JavaScript的 ...
- 保姆级教程!HyperMesh施加正弦荷载
HyperMesh怎么施加正弦荷载? 在HyperMesh中施加正弦荷载,可以通过定义载荷方程(equation)来实现.正弦荷载通常用于模拟周期性变化的力或压力,比如振动或波动载荷.以下是一般的步骤 ...