websocket

//jetfire-master第三方實(shí)現(xiàn)ws的協(xié)議

(1)

self.socket = [[JFRWebSocket alloc] initWithURL:[NSURL URLWithString:@"ws://localhost:8080"] protocols:@[@"chat",@"superchat"]];

self.socket.delegate = self;

(2)實(shí)現(xiàn)代理方法

//開始連接

-(void)websocketDidConnect:(JFRWebSocket*)socket {

NSLog(@"websocket is connected");

}

//斷開連接

-(void)websocketDidDisconnect:(JFRWebSocket*)socket error:(NSError*)error {

NSLog(@"websocket is disconnected: %@", [error localizedDescription]);

//? ? [self.socket connect];

}

//連接成功接收到的字符串家凯,可以使用分割字符串的方法進(jìn)行解析显晶,也可以將字符串轉(zhuǎn)化為data格式随抠,再轉(zhuǎn)化為json格式進(jìn)行解析

-(void)websocket:(JFRWebSocket*)socket didReceiveMessage:(NSString*)string {

}

//連接成功接收到的data

-(void)websocket:(JFRWebSocket*)socket didReceiveData:(NSData*)data;

(3)可以設(shè)置按鈕來發(fā)送消息(里面加一個定時器产喉,實(shí)時接收消息)

- (IBAction)btnAc:(id)sender

{

//開始連接

[self.socket connect];

timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerRun) userInfo:nil repeats:YES];

}

-(void)timerRun

{

NSData * data = [NSData dataWithContentsOfURL:urlPlay];

[self.socket writeData:data];

}

//設(shè)置按鈕停止信息傳輸

- (IBAction)btnStopAc:(id)sender

{

[timer invalidate];

timer = nil;

//斷開連接

[self.socket disconnect];

[recorder stop];

}




一個demo

#import#import#import@interface ViewController : UIViewController{

AVAudioRecorder *recorder;

NSURL *urlPlay;

}

@property (weak, nonatomic) IBOutlet UITextView *textView1;

@property (weak, nonatomic) IBOutlet UITextView *textView2;

- (IBAction)btnAc:(id)sender;

- (IBAction)btnStopAc:(id)sender;

@end


#import "ViewController.h"

#import "JFRWebSocket.h"

@interface ViewController ()

{

NSTimer * timer;

NSString * unitPath;

NSMutableDictionary *recordSetting;

}

@property(nonatomic, strong)JFRWebSocket *socket;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[self audio];

self.socket = [[JFRWebSocket alloc] initWithURL:[NSURL URLWithString:@"ws://localhost:8080"] protocols:@[@"chat",@"superchat"]];

self.socket.delegate = self;

}

- (void)audio

{

//錄音設(shè)置

recordSetting = [[NSMutableDictionary alloc]init];

//設(shè)置錄音格式? AVFormatIDKey==kAudioFormatLinearPCM

[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVSampleRateKey];

//設(shè)置錄音采樣率(Hz) 如:AVSampleRateKey==8000/44100/96000(影響音頻的質(zhì)量)

[recordSetting setValue:[NSNumber numberWithFloat:16000] forKey:AVSampleRateKey];

//錄音通道數(shù)? 1 或 2

[recordSetting setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];

//線性采樣位數(shù)? 8云挟、16铜幽、24亡电、32

[recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];

//錄音的質(zhì)量

[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];

AVAudioSession * session = [AVAudioSession sharedInstance];

[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

[session setActive:YES error:nil];

NSString *subjectPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"1"];

NSString * gradePath = [subjectPath stringByAppendingString:@"11"];

unitPath = [gradePath stringByAppendingString:@"22"];

NSLog(@"unitPath===%@",unitPath);

if (![[NSFileManager defaultManager] fileExistsAtPath:unitPath])

{

[[NSFileManager defaultManager] createDirectoryAtPath:unitPath withIntermediateDirectories:YES attributes:nil error:nil];

[[NSFileManager defaultManager] createFileAtPath:[unitPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@.wav",@"123"]] contents:nil attributes:nil];

}

NSURL * url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/123.wav",unitPath]];

urlPlay = url;

}

-(void)websocketDidConnect:(JFRWebSocket*)socket {

NSLog(@"websocket is connected");

}

-(void)websocketDidDisconnect:(JFRWebSocket*)socket error:(NSError*)error {

NSLog(@"websocket is disconnected: %@", [error localizedDescription]);

//? ? [self.socket connect];

}

-(void)websocket:(JFRWebSocket*)socket didReceiveMessage:(NSString*)string {

//? ? NSLog(@"Received text: %@", string);

//? ? [_textView2 setText:string];

NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *? dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];

NSLog(@"dic===%@",dic);

NSString * status = [NSString stringWithFormat:@"%@",dic[@"status"]];

if ([status isEqualToString:@"0"])

{

NSString * transcript = dic[@"result"][@"hypotheses"][0][@"transcript"];

[_textView2 setFont:[UIFont systemFontOfSize:16]];

[_textView2 setText:[transcript lowercaseString]];

}

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (IBAction)btnAc:(id)sender

{

NSError *error;

//初始化

recorder = [[AVAudioRecorder alloc]initWithURL:urlPlay settings:recordSetting error:&error];

//開啟音量檢測

recorder.meteringEnabled = YES;

recorder.delegate = self;

//創(chuàng)建錄音文件髓迎,準(zhǔn)備錄音

if ([recorder prepareToRecord]) {

//開始

[recorder record];

}

[self.socket connect];

timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerRun) userInfo:nil repeats:YES];

}

-(void)timerRun

{

NSData * data = [NSData dataWithContentsOfURL:urlPlay];

[self.socket writeData:data];

//? ? NSLog(@"size===%llu",[[[NSFileManager defaultManager] attributesOfItemAtPath:[NSString stringWithFormat:@"%@/123.wav",unitPath] error:nil] fileSize]);

}

- (IBAction)btnStopAc:(id)sender

{

[timer invalidate];

timer = nil;

[self.socket disconnect];

[recorder stop];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市禁偎,隨后出現(xiàn)的幾起案子腿堤,更是在濱河造成了極大的恐慌,老刑警劉巖如暖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笆檀,死亡現(xiàn)場離奇詭異,居然都是意外死亡盒至,警方通過查閱死者的電腦和手機(jī)酗洒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枷遂,“玉大人樱衷,你說我怎么就攤上這事【瓢Γ” “怎么了矩桂?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痪伦。 經(jīng)常有香客問我侄榴,道長,這世上最難降的妖魔是什么网沾? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任癞蚕,我火速辦了婚禮,結(jié)果婚禮上绅这,老公的妹妹穿的比我還像新娘涣达。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布度苔。 她就那樣靜靜地躺著匆篓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寇窑。 梳的紋絲不亂的頭發(fā)上鸦概,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音甩骏,去河邊找鬼窗市。 笑死,一個胖子當(dāng)著我的面吹牛饮笛,可吹牛的內(nèi)容都是我干的咨察。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼福青,長吁一口氣:“原來是場噩夢啊……” “哼摄狱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起无午,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤媒役,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宪迟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酣衷,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年次泽,在試婚紗的時候發(fā)現(xiàn)自己被綠了穿仪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡箕憾,死狀恐怖牡借,靈堂內(nèi)的尸體忽然破棺而出拳昌,到底是詐尸還是另有隱情袭异,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布炬藤,位于F島的核電站御铃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沈矿。R本人自食惡果不足惜上真,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望羹膳。 院中可真熱鬧睡互,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妻怎,卻和暖如春壳炎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逼侦。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工匿辩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榛丢。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓铲球,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晰赞。 傳聞我的和親對象是個殘疾皇子睬辐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容