美文网首页
融云单独的语音开发

融云单独的语音开发

作者: 安宇辛 | 来源:发表于2017-06-09 15:16 被阅读0次

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(@"退出聊天室失败");

}];

}

相关文章

  • 融云单独的语音开发

    NO1.首先前往融云官网申请应用apk NO2.下载SDK 大家注意一下融云有两种SDK 我们下载第二种就可以了,...

  • 云开发的超强智能垃圾回收小程序

    智能垃圾回收小程序,支持拍照识别、语音录入识别,包含垃圾分类题库测试。 使用小程序云开发,无需单独搭建服务器。 下...

  • 融云即时通讯集成

    前期准备 注册开发者帐号 开发者在集成融云即时通讯、实时网络能力前,需前往融云官方网站注册创建融云开发者帐号。 得...

  • 【干货】如何了解融云的 SDK 产品架构和消息体系

    此文将详细介绍融云的 SDK 产品架构和消息体系,以便于开发者更深入的了解融云并更快速的开发自己的产品。 融云 S...

  • 2018 融云集成

    接入融云 融云SDK满足 App 内的社交沟通需求,提供单群聊、超级群等多种聊天模式,支持红包、图片、语音和小视频...

  • 关于集成融云的时候遇到的一些问题

    由于项目中需要集成融云的客服,进入融云官网SDK 快速入门 - 融云即时通讯技术文档_基础服务开发指南 根...

  • Flutter即时通讯之融云

    最近项目需求使用flutter开发一个在线语音聊天室,即时通讯部分使用融云。官方没有提供这个插件,所以自己写了一个...

  • iOS IM即时通讯-[融云] [网易云信]简单集成聊天界面

    前言 IM即时通讯. 对于iOS开发, 融云, 环信, 网易云信, 都是还不错的选择. 作者今天就以 融云, 网...

  • 第三方IM调研

    融云: 10万至50万日活:1,2000元/月 (包括多设备消息同步、广播推送) 1、认证企业开发者 在融云开发者...

  • iOS开发之融云IM集成

    首先去融云开发者注册一波账号,获取AppKey : 然后拉取融云SDK: 然后pod install,会发现SDK...

网友评论

      本文标题:融云单独的语音开发

      本文链接:https://www.haomeiwen.com/subject/xxqfqxtx.html