天天看點

如何快速的開發一個完整的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 == ) {
        [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[] 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);
        }

    });                

作者:袁峥

連結:https://www.jianshu.com/p/7f15bbb679b9

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

繼續閱讀