本节主要为Link Visual iOS版本的音视频模块使用说明,包含视频播放、语音对讲的功能。
依赖SDK | 概述 |
---|
依赖SDK | 概述 |
---|---|
API 通道 | 提供API通道能力 |
长连通道 | P2P需要长连接通道 |
配置工程
- 在podfile中添加引用源。
source 'https://github.com/aliyun/aliyun-specs.git'
- 添加库依赖。
//如遇IMS***版本冲突,请按照pod提示修改podfile对应sdk版本 //如podfile中没有的sdk库,请查看podfile.lock对应修改podfile pod 'IMSLinkVisualMedia', '1.5.15'
- 执行pod update,则库安装完毕。
更多版本发布信息请看Link Visual SDK更新记录。
播放器说明
播放器按功能分为三种,提供了以下功能。
- 直播播放器
- 用于RTMP直播源,具有时延低的特点
- 支持P2P(需使用接入LinkVisual设备端SDK的摄像头)
- TF卡点播播放器
用于设备录像回放,可调整播放进度
- 云端HLS播放器
用于基于HLS的云端录像回放的播放,支持MPEG-TS和FMP4容器,AES-128加密方式。
功能 | 直播播放器 | TF卡点播播放器 | 云端HLS播放器 |
---|
功能 | 直播播放器 | TF卡点播播放器 | 云端HLS播放器 |
---|---|---|---|
视频播放 | ✓ | ✓ | ✓ |
音频播放 | ✓ | ✓ | ✓ |
暂停/恢复 | x | ✓ | ✓ |
跳至指定位置播放 | X | ✓ | ✓ |
总时长 | x | ✓ | ✓ |
当前播放进度 | x | ✓ | ✓ |
播放器状态变更通知 | ✓ | ✓ | ✓ |
静音 | ✓ | ✓ | ✓ |
变速播放 | x | ✓ | ✓ |
画面缩放模式设置 | ✓ | ✓ | ✓ |
播放器截图 | ✓ | ✓ | ✓ |
边播边录 | ✓ | ✓ | ✓ |
提供YUV数据 | ✓ | ✓ | ✓ |
提供SEI数据 | ✓ | ✓ | ✓ |
播放器使用指南
播放器错误列表
错误主码(PlayerMainError) | 描述 | 子码(解析userInfo中subCode获取) | 描述 |
---|
错误主码(PlayerMainError) | 描述 | 子码(解析userInfo中subCode获取) | 描述 |
---|---|---|---|
ErrorSource | 数据源相关错误 | IMSLinkVisualPlayerErrorConnect | 建立连接失败 |
IMSLinkVisualPlayerErrorEncrypt | 无效的解密密钥 | ||
IMSLinkVisualPlayerErrorUrl | 无效的播放地址 | ||
IMSLinkVisualPlayerErrorDataSource | 数据源错误或未设置 | ||
IMSLinkVisualPlayerErrorGetURL | 获取链接失败 | ||
IMSLinkVisualPlayerErrorStop | 关闭失败 | ||
IMSLinkVisualPlayerErrorStart | 启动失败 | ||
ErrorRender | 渲染相关错误 | IMSLinkVisualPlayerErrorDecode | 解码错误 |
ErrorUnexpected | 不符合预期错误 | IMSLinkVisualPlayerErrorStream | 接收数据流失败 |
语音对讲介绍
提供App和IPC设备之间端到端的双向实时音频传输能力。
单讲:App端采集并发送音频数据到设备端进行播放,App端采集音频期间手机保持声音静默
双讲:App端和设备端都需要同时做采音和放音,设备端必须支持AEC。
![App端需实现的流程](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/6608819951/p55987.png)
支持的音频格式 | 编码 | 解码 |
---|
支持的音频格式 | 编码 | 解码 |
---|---|---|
AAC_LC | ✓ | ✓ |
G711A | ✓ | ✓ |
G711U | ✓ | ✓ |
语音对讲使用指南
- 创建语音对讲编码参数
参数为录制语音数据的参数,用来与设备端对齐。
//常用对讲模式为以下参数,不建议更改,支持8K和16K //sampleRate 8000 或 16000 以设备支持为准 IMSLinkVisualAudioParams *intercomEncodeParams = [[IMSLinkVisualAudioParams alloc] init]; intercomEncodeParams.sampleRate = 8000; intercomEncodeParams.channel = 1; intercomEncodeParams.bitsPerSample = 16; intercomEncodeParams.format = IMSLinkVisualAudioFormatG711a;
- 设置语音对讲参数
创建编码器用于编码语音数据。
//player 为播放器实例 IMSLinkVisualPlayerViewController player.intercomEncodeParams = intercomEncodeParams;
- 设置语音对讲回调代理
用于语音对讲开始与结束流程的消息回调代理,开始对讲前,先增加语音对讲状态回调方法。
player.intercomDelegate = self;
- 设置对讲数据源
用于不能通过设备ID发起对讲,需要单独设置数据源
/** 设置对讲业务数据源 @param rtmpPath rtmp地址 @param needEncrypt 是否加密 对讲都为加密,需要填true @param iv 解密向量,16 byte 如需 base64转码、请查阅文档 @param key 解密密钥,16 byte 如需 base64转码、请查阅文档 NSData* iv = [[NSData alloc] initWithBase64EncodedString:ivString options:NSDataBase64DecodingIgnoreUnknownCharacters]; @return 是否成功设置数据源 */ - (BOOL)setDataSource_Intercom:(NSString *_Nullable)rtmpPath needEncrypt:(BOOL)needEncrypt iv:(NSData *_Nullable)iv key:(NSData *_Nullable)key;
- 开语音对讲
设置播放器为对讲模式并开启对讲功能。
[player startIntercom:IMSLinkVisualIntercomAudioModeIntercom];
- 停止语音对讲
[player stopIntercom];
语音对讲状态回调方法与触发规则如下。
#pragma mark - IMSLinkVisualIntercomDelegate
#pragma mark 语音对讲连接服务器
- (void)linkVisualIntercomConnect:(IMSLinkVisualPlayerViewController *)player {
//语音对讲连接服务器成功
//连接成功不代表可以立即发送语音
}#pragma mark 语音对讲ready
//当对讲连接于服务端连接建立后,若对端已就绪,会告知本端事件talk ready. 此时向对端发送音频数据都会被对端收到并处理.
- (void)linkVisualIntercomReady:(IMSLinkVisualPlayerViewController * _Nullable)player {
}
#pragma mark 对讲接收到设备端音频参数
//当语音对讲通道建立后,若对端支持录音,会先收到对端发送过来的音频参数信息,
//后续对端发送的音频数据按照此音频参数来做解码. 该事件是语音对讲通道建立成功的标志.
//可以在此时构建音频播放器实例用于对端采集音频的实时播放.
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *)player audioParams:(IMSLinkVisualAudioParams *)params {
}
#pragma mark 对讲接收到设备端音频数据
//若对端支持录音,语音对讲中会持续不断的收到对端发送过来的音频数据.
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *)intercom audioData:(NSData *)data {
//无特殊需求可以不收集数据
if (data) {
//playBuffers为自定义可变数组收集数据
[self.playBuffers addObject:data];
}
}
#pragma mark 录音数据完成回调
//语音对讲开始后,会收集不断收到mic采集的数据,根据对讲的状态开始发送的数据
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *)intercom recordData:(NSData *)data{
if (data) {
//发送录音数据 audioBuffers为自定义可变数组收集数据
[player sendAudioData:audioData];
}
}
#pragma mark 语音对讲停止
- (void)linkVisualIntercomStop:(IMSLinkVisualPlayerViewController *)player {
}
#pragma mark 语音对讲出错
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *)player
errorOccurred:(NSError *)error {
//处理对讲出错的错误信息
//error.code 与 IMSLinkVisualIntercomError 对应
}
对讲错误列表
语音对讲错误状态码 | 描述 |
---|
语音对讲错误状态码 | 描述 |
---|---|
IMSLinkVisualIntercomErrorGetURL | 获取链接失败 |
IMSLinkVisualIntercomErrorParams | 对讲参数错误 |
IMSLinkVisualIntercomErrorStart | 启动对讲失败 |
IMSLinkVisualIntercomErrorConnect | 语音流建立失败 |
IMSLinkVisualIntercomErrorRecorder | 录音失败 |
IMSLinkVisualIntercomErrorStream | 接收数据流失败 |
IMSLinkVisualIntercomErrorDecode | 解码错误 |
IMSLinkVisualIntercomErrorSendData | 发送语音对讲数据失败 |
IMSLinkVisualIntercomErrorStop | 关闭失败 |