直播(创建房间)

  • 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(创建房间)的更多相关文章

  1. 【如何快速的开发一个完整的iOS直播app】(美颜篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重 ...

  2. 【如何快速的开发一个完整的iOS直播app】(采集篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,首先需要采集主 ...

  3. 【如何快速的开发一个完整的iOS直播app】(播放篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看上篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,集成ijkpl ...

  4. 【如何快速的开发一个完整的iOS直播app】(原理篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...

  5. 【如何快速的开发一个完整的iOS直播app】(推流篇)

    前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,肯定需要流媒体服务器,本篇主要讲解直播中流媒体服务器搭建,并且讲解了如 ...

  6. 【如何快速的开发一个完整的 iOS 直播 app】(美颜篇)

    来源:袁峥Seemygo 链接:http://www.jianshu.com/p/4646894245ba 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播 ...

  7. 如何快速的开发一个完整的iOS直播app(原理篇)

    目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...

  8. 如何快速的开发一个完整的iOS直播app(美颜篇)

    前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主要讲 ...

  9. 【如何快速的开发一个简单的iOS直播app】(代码篇)

    开篇([如何快速的开发一个完整的iOS直播app](原理篇)) 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量 ...

  10. 抖音短视频爆火的背后到底是什么——如何快速的开发一个完整的直播app

    前言 今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很多时间了解直播,今天我来教你从零开始搭建一个完整的直播app,希望能帮助 ...

随机推荐

  1. 使用ssh 通过ProxyCommand:利用跳板机让不在同一局域网的机器ssh直连

    打开~/.ssh/config文件,如果没有则新建一个 输入以下内容并保存: Host dxx.sxx-bastion # jumpserver name hostname 54.65.xx.2xx ...

  2. 使用wxpython开发跨平台桌面应用,动态工具的创建处理

    在我们开发系统的时候,往往需要一个很容易理解功能的工具栏,工具栏是一个系统的快速入口,美观易用的工具栏是可以给系统程序增色不少的,本篇随笔介绍在使用wxpython开发跨平台桌面应用,工具栏的动态展现 ...

  3. Python 提取PowerPoint文档中的图片

    如果你需要在多个PowerPoint演示文稿中使用相同的图片,直接从原始PPT中提取并保存图片可以避免重复寻找和下载.此外,将PPT中的重要图片提取出来可以将其作为备份,以防原文件损坏或丢失.本文将通 ...

  4. Linux-Centos安装配置

    一.安装CentOs CentOS是Linux系统的一个发行版本,还有Ubuntu.Fedora.Debian等. 安装VMware虚拟机 官网地址:https://www.vmware.com/pr ...

  5. 29、undo_2_1(事务槽、延迟块清除、构造CR块、ora-01555)

    事务槽(不同于事务表里面的槽位(这个事务槽在数据块的头部)) 图解: 一个事务开始,要做的事情: 第一,事务表里面找槽位(undo段的段头块里有事务表,事务表有槽位,每一个槽位记录一个事务): 事务表 ...

  6. Docker容器内服务自启动解决方案

    背景 在很多场景下,我们需要拉取或者是使用的别人的容器,但是有些容器内部的服务并不能自启动,比如Apache服务.mysql服务等等,对于数量较少的容器来讲,我们可以进入容器中使用命令将服务进行启动, ...

  7. 简单端口映射、转发、重定向工具之Rinetd

    ◆一.概述 Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具.将 TCP 连接从一个 IP 地址和端口重定向到另一个.它处理文件中/etc/rinetd ...

  8. ClickHouse之基础使用

    [安装] [YUM] 1.添加官方存储库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://packag ...

  9. Centos7下的开机自启动

    记录服务器每次重启之后启动一些服务. systemd systemd简介 CentOS7已不再使用chkconfig管理启动项,而是使用systemd.关于systemd的衍生和发展,可以参见< ...

  10. uni-app小程序(抖音)text组件使用踩坑

    前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是主推uni-app. 坑位 最近在开发一 ...