iOS应用端接入
iOS应用端SDK提供了音视频播放、语音对讲等功能。
开发前的环境要求
类别 |
说明 |
系统版本 |
支持iOS 9.0及以上版本。 |
开发工具 |
本文基于Xcode开发,建议您使用Xcode工具。Xcode详细信息,请参考Xcode。 |
配置步骤
在Xcode项目下的podfile配置文件中,添加如下引用源。
source 'https://github.com/aliyun/aliyun-specs.git'
在podfile配置文件中添加依赖库。
pod 'IMSLinkVisualMedia_Base', '1.5.10'
执行
pod update
命令,获取SDK。确认项目的pods目录下,已生成如下表所示4个framework文件,即成功获取SDK。
framework文件及其主要功能如下表。
文件名
功能
FFmpeg
FFmpeg标准开源库,版本为4.4.1。
LibRtmp.framework
RTMP库,用于推流和拉流。
LinkVisualClientSDK.framework
FFmpeg与LibRtmp等业务的组合库。
IMSLinkVisualMedia.framework
iOS应用端库,包括渲染、播放等功能。
视频播放
背景信息
播放器使用的FFmpeg版本为4.0.1。
播放器支持的音频编码协议:AAC_LC和G711a。
播放器支持的视频编码协议:H.264和H.265。
类型介绍
应用端根据播放协议,提供RTMP播放器和HLS播放器。其中RTMP播放器包括直播播放器和设备录像点播播放器。各播放器的主要功能和特点如下表。
协议 |
类型 |
描述 |
RTMP |
直播播放器 |
用于RTMP协议的直播源,具有延时低的特点。
说明
使用该功能,需要在进行视频直播的IPC设备上接入设备端LinkVisual SDK。 |
设备录像点播播放器 |
用于RTMP协议的设备录像回放,可调整播放进度。 |
|
HLS |
云端HLS播放器 |
|
功能列表
各播放器的功能如下表:
功能 |
直播播放器 |
设备录像点播播放器 |
云端HLS播放器 |
视频播放 |
支持 |
支持 |
支持 |
音频播放 |
支持 |
支持 |
支持 |
暂停或恢复 |
不支持 |
支持 |
支持 |
跳至指定位置播放 |
不支持 |
支持 |
支持 |
总时长 |
不支持 |
支持 |
支持 |
当前播放进度 |
不支持 |
支持 |
支持 |
播放器状态变更通知 |
支持 |
支持 |
支持 |
静音 |
支持 |
支持 |
支持 |
变速播放 |
不支持 |
不支持 |
支持 |
循环播放 |
不支持 |
不支持 |
不支持 |
画面缩放模式设置 |
支持 |
支持 |
支持 |
播放器截图 |
支持 |
支持 |
支持 |
边播边录 |
支持 |
支持 |
支持 |
直播播放器
使用指南
引入框架。
//引入框架 #import <IMSLinkVisualMedia/IMSLinkVisualMedia.h>
设置播放器日志。
//打开播放器日志 建议为IMSLinkVisualMediaLogInfo [IMSLinkVisualPlayerViewController setLogLevel:IMSLinkVisualMediaLogInfo];
创建播放器。
//创建播放器 IMSLinkVisualPlayerViewController *player = [[IMSLinkVisualPlayerViewController alloc] init]; //因为播放器为viewController,所以addChildViewController [self addChildViewController:player]; //设置播放器frame player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; player.view.frame = self.view.bounds; //添加播放器view到指定位置 [self.view insertSubview:player.view atIndex:0]; //播放器代理 player.delegate = self;
设置播放源。
直播播放器
//设置参数 iotId [player setDataSource:self.iotId streamType:IMSLinkVisualPlayerLiveStreamTypeMain needForceIFrame:true];
//设置参数 rtmpPath RTMP地址 //needEncrypt若设置为false,则表示不需要加密,参数iv和key请传入nil /* 注:直播切到手机后台后会自动调用stop方法,如果再次回到直播界面需要重新设置rtmpPath地址,并调用start方法 rtmpPath具有时效性,如果rtmpPath已过期,需要重新获取rtmpPath地址 设备录像点播播放器和云端HLS播放器不需要以上操作,请忽略 */ [player setDataSource_Live:rtmpPath needEncrypt:needEncrypt iv:iv key:key];
设备录像点播播放器
以录像时间播放视频,请参考如下代码。
//设置参数(按时间) //时间接口中vodStartTime为当天0点时间戳,vodEndTime为当天23点59秒时间戳,seekTime为本次播放的起始时间(秒) [player setDataSource:iotId vodStartTime:timestamp vodEndTime:timestamp + dayOfSecond seekTime:time]; //设置参数 rtmpPath RTMP地址 //needEncrypt若设置为false,则表示不需要加密,参数iv和key请传入nil [player setDataSource_Vod:rtmpPath needEncrypt:needEncrypt iv:iv key:key];
以录像文件名播放视频,请参考如下代码。
//设置参数(按文件名) [player setDataSource:iotId vodFileName:vodFileName]; //设置参数 rtmpPath RTMP地址 //needEncrypt若设置为false,则表示不需要加密,参数iv和key请传入nil [player setDataSource_Vod:rtmpPath needEncrypt:needEncrypt iv:iv key:key];
设置并使用播放器功能。
开始播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 开始播放 [self.player start];
静音播放器
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> //播放器静音,对讲不播放接收到的声音通过mute实现 self.player.mute = true;
停止播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 停止播放,结束播放器 [self.player stop];
直播重连
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> //自动重连,默认0次。 //自动重连只支持直播功能 self.player.reconnect = 10;
变声设置
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> /* 变声处理参数仅支持设置为0和1, 默认为0 0表示不变声;1表示中年男子声音 如需要实现自定义变声,需设置为0,然后处理对讲声音回调 **/ self.player.voiceChangeType = 0;
设置
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 停止播放,结束播放器 [self.player stop];
(仅支持设备录像点播播放器)暂停播放
说明下文简称设备录像点播播放器为点播播放器。
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 暂停播放 [self.player pause];
(仅支持点播播放器)暂停播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 暂停播放 [self.player pause];
(仅支持点播播放器)恢复播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 恢复播放 [self.player restore];
(仅支持点播播放器)倍速播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 倍速播放 self.player.playSpeed = PlaySpeed_NORMAL;
视频截图
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> //获取视频截图 UIImage *image = [self.player videoSnapshot];
(不支持云端HLS录像播放器)边录边播
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> - (IBAction)recordVideoButtonClick:(UIButton *)sender { sender.selected = !sender.selected; NSString *tmpPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.mp4"]; if (sender.selected) { [self.player startRecordVideoWithfilePath:tmpPath]; } else { [self.player stopRecordVideo]; } }
设置播放器缓存
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> /** //设置播放器缓存(缓存越大,延迟越高),一帧缓存延迟40毫秒,默认为5帧 @param buffer 缓存大小为0~16帧 */ [self.player setDisplyBuffer:10];
设置播放器渲染模式
/// 播放器渲染模式 typedef NS_ENUM(NSUInteger, IMSLinkVisualPlayerDisplayMode){ /// 应用端开发者对YUV数据不可见,完全由SDK处理和渲染,默认使用这个模式 IMSLinkVisualPlayerDisplayMode_SDK, /// 允许应用端开发者对YUV数据进行二次加工,然后再还给SDK渲染 IMSLinkVisualPlayerDisplayMode_Client_SDK, /// YUV数据完全交由应用端开发者处理和渲染 IMSLinkVisualPlayerDisplayMode_Client }; /// 设置播放器渲染模式,默认为IMSLinkVisualPlayerDisplayMode_SDK模式 @property (assign, nonatomic) IMSLinkVisualPlayerDisplayMode lvDisplayMode; /** 直播、点播的共用代理接口 视频帧YUV数据回调,同步接口,帧数据的内存和SDK是共用的,如外部需要缓存数据,必须把数据拷贝出去 @see IMSLinkVisualPlayerViewController @param frame 视频帧YUV数据 */ - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player withFrame:(IMSPlayerVideoFrame *_Nullable)frame;
使用播放器。
直播播放器
//设置参数 rtmpPath RTMP地址 //needEncrypt若设置为false,则表示不需要加密,参数iv和key请传入nil [player setDataSource_Live:rtmpPath needEncrypt:needEncrypt iv:iv key:key];
设备录像点播播放器
//设置参数 rtmpPath RTMP地址 //needEncrypt若设置为false,则表示不需要加密,参数iv和key请传入nil [player setDataSource_Vod:rtmpPath needEncrypt:needEncrypt iv:iv key:key];
查看播放器状态。
/// 播放器状态 typedef NS_ENUM(NSUInteger,IMSLinkVisualPlayerState){ /// 空闲 IMSLinkVisualPlayerStateIdle = 0, /// 缓冲中 IMSLinkVisualPlayerStateBuffering = 2, /// 开始播放 IMSLinkVisualPlayerStateStartPlay = 4, /// 暂停播放 IMSLinkVisualPlayerStatePausePlay = 8, /// 切换到后台 IMSLinkVisualPlayerStateBackground = 16, };
监听回调结果。
@protocol IMSLinkVisualDelegate <NSObject> /*------------------直播、点播共用代理接口---------------------*/ /** 直播、点播 共用接口 连接成功 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualConnect:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 直播、点播 共用接口 准备完成进入播放状态 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualReady:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 直播、点播 共用接口 播放成功停止(正常停止) @see IMSLinkVisualPlayerViewController */ - (void)linkVisualStop:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 直播、点播 共用接口 连接错误回调 (所有直播点播错误,都通过这个代理回调) @see IMSLinkVisualPlayerViewController @param error 错误信息 IMSLinkVisualPlayerError枚举 对应 error.code */ - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player errorOccurred:(NSError *_Nullable)error; /** 直播、点播 共用接口 视频帧YUV数据回调,同步接口,帧数据的内存和SDK是共用的,如外部需要缓存数据,必须把数据拷贝出去 @see IMSLinkVisualPlayerViewController @param frame 视频帧YUV数据 */ - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player withFrame:(IMSPlayerVideoFrame *_Nullable)frame; /*---------------------点播独占代理接口-----------------------*/ /** 点播 seek成功完成 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualReplaySeekReady:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 恢复播放成功完成 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualRestore:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 暂停播放成功完成 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualPause:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 播放到结尾的回调 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualPlayEnd:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 当前时间回调 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualReplay:(IMSLinkVisualPlayerViewController *_Nullable)player currentTime:(NSInteger)currentTime; /// SEI回调接口 /// @param player 播放器 /// @param data 回调二进制数据 data.length为数据长度 /// @param timeStamp 时间戳 - (void)linkVisualReplay:(IMSLinkVisualPlayerViewController *_Nullable)player buffer:(NSData*_Nullable)data timeStamp:(NSInteger)timeStamp; @end
点播播放器
使用指南
创建云端HLS播放器。
//创建播放器 IMSLinkVisualPlayerViewController *player = [[IMSLinkVisualPlayerViewController alloc] init]; //因为播放器为viewController,所以addChildViewController [self addChildViewController:player]; //设置播放器frame player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; player.view.frame = self.view.bounds; //添加播放器view到指定位置 [self.view insertSubview:player.view atIndex:0]; //播放器代理 player.delegate = self;
设置云端HLS参数。
//设置参数 HLSPath http***.m3u8 seekTime的单位为秒 [player setDataSource_HLS:hlsPath seekTime:seekTime];
设置并使用播放器功能。
开始播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 开始播放 [self.player start];
静音播放器
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> //播放器静音,对讲不播放接收到的声音通过mute实现 self.player.mute = true;
停止播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 停止播放,结束播放器 [self.player stop];
直播重连
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> //自动重连,默认0次。 //自动重连只支持直播功能 self.player.reconnect = 10;
变声设置
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> /* 变声处理参数仅支持设置为0和1, 默认为0 0表示不变声;1表示中年男子声音 如需要实现自定义变声,需设置为0,然后处理对讲声音回调 **/ self.player.voiceChangeType = 0;
设置
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 停止播放,结束播放器 [self.player stop];
(仅支持设备录像点播播放器)暂停播放
说明下文简称设备录像点播播放器为点播播放器。
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 暂停播放 [self.player pause];
(仅支持点播播放器)暂停播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 暂停播放 [self.player pause];
(仅支持点播播放器)恢复播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 恢复播放 [self.player restore];
(仅支持点播播放器)倍速播放
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> // 倍速播放 self.player.playSpeed = PlaySpeed_NORMAL;
视频截图
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> //获取视频截图 UIImage *image = [self.player videoSnapshot];
(不支持云端HLS录像播放器)边录边播
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> - (IBAction)recordVideoButtonClick:(UIButton *)sender { sender.selected = !sender.selected; NSString *tmpPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.mp4"]; if (sender.selected) { [self.player startRecordVideoWithfilePath:tmpPath]; } else { [self.player stopRecordVideo]; } }
设置播放器缓存
#import <IMSLinkVisualMedia/IMSLinkVisualMedia.h> /** //设置播放器缓存(缓存越大,延迟越高),一帧缓存延迟40毫秒,默认为5帧 @param buffer 缓存大小为0~16帧 */ [self.player setDisplyBuffer:10];
设置播放器渲染模式
/// 播放器渲染模式 typedef NS_ENUM(NSUInteger, IMSLinkVisualPlayerDisplayMode){ /// 应用端开发者对YUV数据不可见,完全由SDK处理和渲染,默认使用这个模式 IMSLinkVisualPlayerDisplayMode_SDK, /// 允许应用端开发者对YUV数据进行二次加工,然后再还给SDK渲染 IMSLinkVisualPlayerDisplayMode_Client_SDK, /// YUV数据完全交由应用端开发者处理和渲染 IMSLinkVisualPlayerDisplayMode_Client }; /// 设置播放器渲染模式,默认为IMSLinkVisualPlayerDisplayMode_SDK模式 @property (assign, nonatomic) IMSLinkVisualPlayerDisplayMode lvDisplayMode; /** 直播、点播的共用代理接口 视频帧YUV数据回调,同步接口,帧数据的内存和SDK是共用的,如外部需要缓存数据,必须把数据拷贝出去 @see IMSLinkVisualPlayerViewController @param frame 视频帧YUV数据 */ - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player withFrame:(IMSPlayerVideoFrame *_Nullable)frame;
查看播放器状态。
/// 播放器状态 typedef NS_ENUM(NSUInteger,IMSLinkVisualPlayerState){ /// 空闲 IMSLinkVisualPlayerStateIdle = 0, /// 缓冲中 IMSLinkVisualPlayerStateBuffering = 2, /// 开始播放 IMSLinkVisualPlayerStateStartPlay = 4, /// 暂停播放 IMSLinkVisualPlayerStatePausePlay = 8, /// 切换到后台 IMSLinkVisualPlayerStateBackground = 16, };
监听回调结果。
@protocol IMSLinkVisualDelegate <NSObject> /*------------------直播、点播共用代理接口---------------------*/ /** 直播、点播 共用接口 连接成功 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualConnect:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 直播、点播 共用接口 准备完成进入播放状态 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualReady:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 直播、点播 共用接口 播放成功停止(正常停止) @see IMSLinkVisualPlayerViewController */ - (void)linkVisualStop:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 直播、点播 共用接口 连接错误回调 (所有直播点播错误,都通过这个代理回调) @see IMSLinkVisualPlayerViewController @param error 错误信息 IMSLinkVisualPlayerError枚举 对应 error.code */ - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player errorOccurred:(NSError *_Nullable)error; /** 直播、点播 共用接口 视频帧YUV数据回调,同步接口,帧数据的内存和SDK是共用的,如外部需要缓存数据,必须把数据拷贝出去 @see IMSLinkVisualPlayerViewController @param frame 视频帧YUV数据 */ - (void)linkVisual:(IMSLinkVisualPlayerViewController *_Nullable)player withFrame:(IMSPlayerVideoFrame *_Nullable)frame; /*---------------------点播独占代理接口-----------------------*/ /** 点播 seek成功完成 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualReplaySeekReady:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 恢复播放成功完成 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualRestore:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 暂停播放成功完成 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualPause:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 播放到结尾的回调 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualPlayEnd:(IMSLinkVisualPlayerViewController *_Nullable)player; /** 点播 当前时间回调 @see IMSLinkVisualPlayerViewController */ - (void)linkVisualReplay:(IMSLinkVisualPlayerViewController *_Nullable)player currentTime:(NSInteger)currentTime; /// SEI回调接口 /// @param player 播放器 /// @param data 回调二进制数据 data.length为数据长度 /// @param timeStamp 时间戳 - (void)linkVisualReplay:(IMSLinkVisualPlayerViewController *_Nullable)player buffer:(NSData*_Nullable)data timeStamp:(NSInteger)timeStamp; @end
错误列表
本文中描述的错误子码,通过解析userInfo
中的subCode
获取。
错误主码:ErrorSource
该错误主码表示数据源相关错误。
子码 |
描述 |
解决方法 |
IMSLinkVisualPlayerErrorConnect |
建立连接失败。 |
请您检查并确保网络连接正常,然后重试。 |
IMSLinkVisualPlayerErrorEncrypt |
无效的解密密钥。 |
您可忽略该故障,或联系与您对接的阿里云技术人员。 |
IMSLinkVisualPlayerErrorUrl |
无效的播放地址。 |
您可忽略该故障,或联系与您对接的阿里云技术人员。 |
IMSLinkVisualPlayerErrorDataSource |
数据源错误或未设置。 |
请检查并确保配置参数合法没然后重试。 |
IMSLinkVisualPlayerErrorGetURL |
获取播放地址失败。 |
请根据错误信息中 |
IMSLinkVisualPlayerErrorStop |
关闭失败。 |
该错误仅用于记录日志,您可忽略该错误。 |
IMSLinkVisualPlayerErrorStart |
启动失败。 |
请重新播放,若仍然失败,请联系与您对接的阿里云技术人员。 |
错误主码:ErrorRender
该错误主码表示渲染相关错误。
子码 |
描述 |
解决方法 |
IMSLinkVisualPlayerErrorDecode |
解码错误。 |
持续一段时间解码都失败时会触发该错误,请您检查设备编码是否异常并修复,然后重试。
说明
iOS应用端目前不支持码流转存,您可以使用Android应用端的码流保存能力检查错误问题。 |
错误主码:ErrorUnexpected
该错误主码表示不符合预期错误。
子码 |
描述 |
解决方法 |
IMSLinkVisualPlayerErrorStream |
接收数据流失败。 |
请检查以下项目,然后重试:
|
语音对讲
对讲类型
语音对讲的类型及其注意事项如下:
类型 |
说明 |
注意事项 |
单向对讲 |
应用端采集并发送音频数据到设备端进行播放。 |
App端采集音频期间手机保持静音。 |
双向对讲 |
应用端和设备端同时采集音频和播放音频。 |
设备端必须支持声学回声消除AEC(Acoustic Echo Cancellation),否则不建议使用该功能。 |
音频类型
语音对讲支持G711a、G711u以及AAC编码方式,三种音频类型详细信息为:
选择编码方式前,请确认您的设备端IPC设备是否支持。
采样率:支持8 kHz和16 kHz。
支持编码。
支持解码。
操作步骤
创建语音对讲实例。
IMSLinkVisualPlayerViewController * player = [IMSLinkVisualPlayerViewController new];
设置对接参数,即MIC采集参数。
IMSLinkVisualAudioParams *intercomEncodeParams = [[IMSLinkVisualAudioParams alloc] init]; intercomEncodeParams.sampleRate = 8000; intercomEncodeParams.channel = 1; intercomEncodeParams.bitsPerSample = 16; intercomEncodeParams.format = IMSLinkVisualAudioFormatG711a; player.intercomEncodeParams = intercomEncodeParams;
设置代理回调。
player.intercomDelegate = self;
启动对接。
[player startIntercom:IMSLinkVisualIntercomAudioModeIntercom];
在采集回调里发送对讲数据。
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController * _Nullable)player recordData:(NSData * _Nullable)data { ///直接发送 [player sendAudioData:data]; }
当需要停止语音对讲时,调用以下方法,停止对讲。
[player stopIntercom];
接口说明
创建实例
IMSLinkVisualPlayerViewController * player = [IMSLinkVisualPlayerViewController new]; //创建语音对讲实例
player.intercomEncodeParams = intercomEncodeParams; //设置对讲模式和音频参数
设置对讲数据源
/**
设置对讲业务数据源
@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;
启动对讲
/**
开始语音对讲
@param mode即对讲音源模式,可设置为:
0:播放直播音频(播放器获取播放器画面与声音时,支持此模式)
1:播放对讲音频
2:不使用播放器播放(使用者只接收数据,不播放或自行播放)
*/
- (void)startIntercom:(IMSLinkVisualIntercomAudioMode)mode;
发送手机端MIC录制的音频数据到设备端
/**
发送设备端接收的录音数据,格式为脉冲编码调制PCM(Pulse Code Modulation),
iOS SDK会转码成intercomEncodeParams指定的格式
@param data:语音数据,该数据请使用对讲代理中,录音机数据回调返回的音频数据进行填充
*/
- (void)sendAudioData:(NSData *_Nullable)data;
停止对讲
/**
结束语音对讲
*/
- (void)stopIntercom;
代理方法
连接服务器
/**
语音对讲成功连接服务器
@see IMSLinkVisualPlayerViewController
*/
- (void)linkVisualIntercomConnect:(IMSLinkVisualPlayerViewController *_Nullable)player;
准备完成
/**
语音对讲准备完成
@see IMSLinkVisualPlayerViewController
*/
- (void)linkVisualIntercomReady:(IMSLinkVisualPlayerViewController *_Nullable)player;
接收设备端音频参数
/**
接收到设备端的音频参数
@see IMSLinkVisualPlayerViewController
@see IMSLinkVisualAudioParams
@param params 音频参数
*/
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *_Nullable)player
audioParams:(IMSLinkVisualAudioParams *_Nullable)params;
接收设备端音频数据
/**
接收到设备端的音频数据
@see IMSLinkVisualPlayerViewController
@param data 音频数据
*/
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *_Nullable)player
audioData:(NSData *_Nullable)data;
手机端的录音数据回调
/**
手机端的录音数据回调
@see IMSLinkVisualPlayerViewController
@param data 音频数据
*/
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *_Nullable)player
recordData:(NSData *_Nullable)data;
停止语音对讲
/**
停止语音对讲
@see IMSLinkVisualPlayerViewController
*/
- (void)linkVisualIntercomStop:(IMSLinkVisualPlayerViewController *_Nullable)player;
错误回调
/**
语音对讲错误回调
@see IMSLinkVisualPlayerViewController
@see IMSLinkVisualIntercomError
@param error 错误 IMSLinkVisualIntercomError枚举 对应 error.code
*/
- (void)linkVisualIntercom:(IMSLinkVisualPlayerViewController *_Nullable)player
errorOccurred:(NSError *_Nullable)error;
错误列表
错误枚举 |
描述 |
解决方法 |
|
获取链接失败。 |
请确认以下设置项然后重试:
|
|
对讲正在使用。 |
设备正在与他人对讲,请等待或关闭他人对讲,然后重试。 |
|
启动失败。 |
请重新启动。 |
|
建立连接失败。 |
请重新启动。 |
|
语音对讲参数错误。 |
请确认以下设置项然后重试:
|
|
接收参数错误。 |
请确认网络或数据是否异常,然后重新启动。 |
|
解码错误。 |
请确认设备端是否按照要求发送了数据,然后重新启动。 |
|
录音机运行失败。 |
对讲录音被占用,请尝试关闭其它对讲后,重新启动对讲。 |
|
发送对讲数据失败。 |
对讲状态异常,请尝试关闭后重新启动对讲。 |
|
关闭对讲失败。 |
该报错可忽略,如有需要,您可重新发起对讲。 |