融云单独的语音开发

NO1.首先前往融云官网申请应用apk


这样我们就拿到了我们需要的appkey


我们拿到token

NO2.下载SDK

大家注意一下融云有两种SDK

我们下载第二种就可以了,包比较小,节约空间

IMLib SDK

接着我们把包拖到工程


然后我们添加相应的库

您除了在工程中导入 SDK 之前,还需要添加如下系统库的引用。

AssetsLibrary.framework

AudioToolbox.framework

AVFoundation.framework

CFNetwork.framework

CoreAudio.framework

CoreGraphics.framework

CoreLocation.framework

CoreMedia.framework

CoreTelephony.framework

CoreVideo.framework

ImageIO.framework

libc++.tbd

libc++abi.tbd

libsqlite3.tbd

libstdc++.tbd

libxml2.tbd

libz.tbd

MapKit.framework

OpenGLES.framework

QuartzCore.framework

SystemConfiguration.framework

UIKit.framework

Photos.framework

SafariServices.framework


NO3.注册融云

在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions里面添加

[[RCIMClient sharedRCIMClient] initWithAppKey:zyAppKey];

[[RCIMClient sharedRCIMClient] connectWithToken:zyc_IM_Token

success:^(NSString *userId) {

NSLog(@"登陆成功。当前登录的用户ID:%@", userId);

} error:^(RCConnectErrorCode status) {

NSLog(@"登陆的错误码为:%d", status);

} tokenIncorrect:^{

//token过期或者不正确。

//如果设置了token有效期并且token过期,请重新请求您的服务器获取新的token

//如果没有设置token有效期却提示token错误,请检查您客户端和服务器的appkey是否匹配,还有检查您获取token的流程。

NSLog(@"token错误");

}];


appkey    zyc_IM_Token就是上面我们获取的key 和 Token

NO4.实现录音

导入 AVFoundation/AVFoundation.h

我们用系统的AVAudioSession来实现录音,官方建议使用wav格式

-(void)zyplay{

NSLog(@"开始录音");

AVAudioSession *session =[AVAudioSession sharedInstance];

NSError *sessionError;

[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];

if (session == nil) {

NSLog(@"Error creating session: %@",[sessionError description]);

}else{

[session setActive:YES error:nil];

}

self.session = session;

//1.获取沙盒地址

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

filePath = [path stringByAppendingString:@"/RRecord.wav"];

//2.获取文件路径

self.recordFileUrl = [NSURL fileURLWithPath:filePath];

//设置参数

NSDictionary *settings = @{AVFormatIDKey: @(kAudioFormatLinearPCM),

AVSampleRateKey: @8000.00f,

AVNumberOfChannelsKey: @1,

AVLinearPCMBitDepthKey: @16,

AVLinearPCMIsNonInterleaved: @NO,

AVLinearPCMIsFloatKey: @NO,

AVLinearPCMIsBigEndianKey: @NO};

_recorder = [[AVAudioRecorder alloc] initWithURL:self.recordFileUrl settings:settings error:nil];

if (_recorder) {

_recorder.meteringEnabled = YES;

[_recorder prepareToRecord];

[_recorder record];

}else{

NSLog(@"音频格式和文件存储格式不匹配,无法初始化Recorder");

}

}

这样我们就录制了RRecord.wav这个语音

NO4.发送语音

我们先转换上面我们的wav数据

NSData *kk = [NSData dataWithContentsOfURL:self.recordFileUrl];

self.recordFileUrl是上面RRecord.wav的地址


- (void)sendVoiceMessage:(NSData *)wavData duration:(long)duration targetId:(NSString *)targetId conversationType:(RCConversationType)conversationType {

//语音消息实体

RCVoiceMessage *voiceMessage = [RCVoiceMessage messageWithAudio:wavData duration:duration];

//    [self.player play];

[[RCIMClient sharedRCIMClient] sendMessage:conversationType targetId:targetId content:voiceMessage pushContent:nil pushData:nil success:^(long messageId) {

NSLog(@"发送语音消息成功");

} error:^(RCErrorCode nErrorCode, long messageId) {

NSLog(@"发送语音消息失败,错误码是(%ld)", (long)nErrorCode);

}];

}

RCVoiceMessage是语音消息体  wavData是Data化的wav

NO5.接收语音

我们先实现代理

RCIMClientReceiveMessageDelegate 代理

[[RCIMClient sharedRCIMClient] setReceiveMessageDelegate:self object:nil];

- (void)onReceived:(RCMessage *)message

left:(int)nLeft

object:(id)object {

if ([message.content isMemberOfClass:[RCVoiceMessage class]]) {

NSLog(@"收到语音消息");

RCVoiceMessage *voiceMsg = (RCVoiceMessage *)message.content;

self.wavAudioData = voiceMsg.wavAudioData;

[self voicePressed];

}

NSLog(@"还剩余的未接收的消息数:%d", nLeft);

}

- (void)setWavAudioData:(NSData *)wavAudioData {

_wavAudioData = wavAudioData;

NSError *error;

AVAudioPlayer *player =

[[AVAudioPlayer alloc] initWithData:wavAudioData error:&error];

self.player = player;

self.player.delegate = self;

}

NO6.播放语音

- (void)voicePressed {

NSLog(@"pressed");

if (self.isPlaying) {

[self stop];

} else {

[self playing];

}

}

- (void)playing {

self.isPlaying = YES;

[self.player prepareToPlay];

[self.player play];

}

- (void)stop {

self.isPlaying = NO;

[self.player stop];

}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player

successfully:(BOOL)flag {

self.isPlaying = NO;

}

NO7.我们加入一个聊天室来测试一哈

- (void)zyaddID:(NSString *)ID{

//

[[RCIMClient sharedRCIMClient] joinChatRoom:ID messageCount:1 success:^{

NSLog(@"加入聊天室");

} error:^(RCErrorCode status) {

NSLog(@"加入聊天室失败");

}];

[[RCIMClient sharedRCIMClient] setReceiveMessageDelegate:self object:nil];

}

-(void)zyquitID:(NSString *)ID{

[[RCIMClient sharedRCIMClient] quitChatRoom:ID success:^{

NSLog(@"退出聊天室");

} error:^(RCErrorCode status) {

NSLog(@"退出聊天室失败");

}];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容