如何快速的开发一个完整的iOS直播app(创建房间)
直播(创建房间)
- 1.进入主播界面,首先创建房间
- 2.设计房间模型(key,名称),key作为房间的唯一标识,用来找到房间
- 3.用socket创建房间,导入socket.io框架
- 4.一般一个客户端一个socket就好了,可以搞个全局的socket
- 5.客户端代码(需要封装) 1.一个获取全局的socket 2.一个连接方法封装
- 6.可以在程序一启动的时候,就建立socket连接
- 7.每次点击创建房间,直接发送请求就好了
- 8.监听创建房间是否成功,因为有时候会重名
创建房间客户端代码
AppDelegate.m
[[SocketIOClient clientSocket] connectWithSuccess:^{
NSLog(@"建议连接成功");
// 创建房间
[[SocketIOClient clientSocket] emit:@"createRoom" with:@[item.mj_keyValues]];
}];
XMGBroadcasterViewController.m
- (IBAction)createRoom:(id)sender {
// 获取房间名称
if (_textField.text.length == 0) {
[SVProgressHUD showImage:nil status:@"请输出房间名称"];
[SVProgressHUD setDefaultStyle:SVProgressHUDStyleLight];
return;
}
// 创建房间
NSString *roomName = _textField.text;
XMGRoomItem *item = [XMGRoomItem itemWithName:roomName];
// 创建房间
[[SocketIOClient clientSocket] emit:@"createRoom" with:@[item.mj_keyValues]];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"blur"]];
imageView.frame = self.view.bounds;
[_preView addSubview:imageView];
// 监听创建房间是否成功
[[SocketIOClient clientSocket] on:@"createRoomResult" callback:^(NSArray * _Nonnull data, SocketAckEmitter * _Nonnull ack) {
BOOL success = [data[0] boolValue];
if (success) {
// 进入主播界面,移除高斯模糊
[_blurView removeFromSuperview];
} else {
// 清空文本框
_textField.text = @"";
// 提示重新输入
[SVProgressHUD showImage:nil status:@"房间同名,请重新输入房间名称"];
}
}];
}
创建房间服务端代码
- 1.每开启一个房间,服务端开启一个socket分组,应该搭建WebSocket服务器
- 2.服务器代码
- 3.连接成功后,监听创建房间
- 1.判断房间名是否重复,使用underScore框架,操作数组,需要用npm下载
- 2.没有重名,就执行下面操作3,4,5
- 发送创建房间成功事件,通知客户端
- 3.保存房间
- 4.添加socket分组
- 5.记录当前socket正在直播的房间,一个主播只会开启一个房间,当主播关闭的时候,需要把当前房间移除.
// 监听创建房间
clientSocket.on('createRoom',function(data){
// 判断房间名是否一样
var roomNameArr = Object.keys(rooms).map(function(roomKey){
return rooms[roomKey];
})
// 获取结果
var createRoomResult = underscore.contains(roomNameArr,data.roomName);
// 发送结果给客户端
serverSocket.emit('createRoomResult',!createRoomResult);
if(createRoomResult == false){
console.log('创建新的房间');
// 之前没有包含房间,可以创建新的房间
clientSocket.roomKey = rooms[data.roomKey];
// 保存房间
rooms[data.roomKey] = data.roomName;
// 分组
- 9.监听失去连接,需要把当前主播房间移除,分组也移除,因为表示当前主播不播了
// 失去连接
// 失去连接
clientSocket.on('disconnect',function(){
// 清空当前房间
if(clientSocket.roomKey) {
delete rooms[roomKey];
clientSocket.leave(roomKey);
}
});
如何快速的开发一个完整的iOS直播app(创建房间)的更多相关文章
- 【如何快速的开发一个完整的iOS直播app】(美颜篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重 ...
- 【如何快速的开发一个完整的iOS直播app】(采集篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,首先需要采集主 ...
- 【如何快速的开发一个完整的iOS直播app】(播放篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看上篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,集成ijkpl ...
- 【如何快速的开发一个完整的iOS直播app】(原理篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...
- 【如何快速的开发一个完整的iOS直播app】(推流篇)
前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,肯定需要流媒体服务器,本篇主要讲解直播中流媒体服务器搭建,并且讲解了如 ...
- 【如何快速的开发一个完整的 iOS 直播 app】(美颜篇)
来源:袁峥Seemygo 链接:http://www.jianshu.com/p/4646894245ba 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播 ...
- 如何快速的开发一个完整的iOS直播app(原理篇)
目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...
- 如何快速的开发一个完整的iOS直播app(美颜篇)
前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主要讲 ...
- 【如何快速的开发一个简单的iOS直播app】(代码篇)
开篇([如何快速的开发一个完整的iOS直播app](原理篇)) 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量 ...
- 抖音短视频爆火的背后到底是什么——如何快速的开发一个完整的直播app
前言 今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很多时间了解直播,今天我来教你从零开始搭建一个完整的直播app,希望能帮助 ...
随机推荐
- Paypal绑定招商银行 —— Paypal绑定收款银行账户的注意事项
地址: https://code.newban.cn/446.html
- 3-5&&6 C++数组遍历
遍历二维数组的三种方式 #include<iostream> #include<string> #include<vector> using namespace s ...
- 记录:coding持续集成之自动发布项目
把一个SpringBoot项目在DevOps一站式研发平台coding编译成jar远程部署到服务器分为几步?答:3步. 1.编译生成构建产物-jar包: 2.SCP 上传到远端服务器: 3.远程执行s ...
- 17.Kubernetes搭建高可用集群
Kubernetes搭建高可用集群 前言 之前我们搭建的集群,只有一个master节点,当master节点宕机的时候,通过node将无法继续访问,而master主要是管理作用,所以整个集群将无法提供服 ...
- 使用Cfssl生成etcd证书(pem)
CFSSL是CloudFlare开源的一款PKI/TLS工具,CFSSL包含一个命令行工具和一个用于签名,验证并且捆绑TLS证书的HTTP API服务,使用Go语言编写. github: https: ...
- ssh之秘钥登陆
前提: 1. 秘钥的生成需要OpenSSL的支持, 需要自行进行安装 一. 新建用户 在root登陆状态中执行命令: useradd -m ssh-user # centosadduser ssh-u ...
- OS开发笔记(1)——硬盘引导的尝试
看前提醒:这一系列笔记完全是按照我的思考顺序写的,中间可能会绕弯路 定义 为了避免概念的混淆,我先在这里作一下(仅适用于本文的)名词的解释: 引导程序/boot程序:特指磁盘MBR或者VBR扇区中存放 ...
- Ubuntu下xrdp登陆故障解决方案
故障描述: Ubuntu使用xrdp远程桌面运行一段时间后,出现登陆错误: xrdp_mm_process_login_response: login failed 原因分析: 远程桌面没有正确关闭所 ...
- 十、Spring Boot集成Spring Security之HTTP请求授权
目录 前言 一.HTTP请求授权工作原理 二.HTTP请求授权配置 1.添加用户权限 2.配置ExceptionTranslationFilter自定义异常处理器 3.HTTP请求授权配置 三.测试接 ...
- 《JavaScript 模式》读书笔记(7)— 设计模式3
这一篇,我们学习本篇中最为复杂的三个设计模式,代理模式.中介者模式以及观察者模式.这三个模式很重要!! 七.代理模式 在代理设计模式中,一个对象充当另一个对象的接口.它与外观模式的区别之处在于,外观模 ...