QuickBlox:如何在对等聊天模块中共享图像/视频?

时间:2012-11-28 13:01:28

标签: quickblox

我正在尝试在聊天模块中分享图片/视频。我已经为此提了Sample代码,但找不到任何帮助。

Alos我已经提到了http://quickblox.com/modules/chat/,它通过插入我们的全功能聊天模块为您的应用添加实时聊天功能。快速,防火墙友好,强大和安全安全。这是否意味着我必须购买功能齐全的聊天模块?

请以正确的方式建议我。

谢谢

4 个答案:

答案 0 :(得分:5)

是的,QuickBlox Chat允许在2个用户之间共享文件,视频/音频。

目前iOS SDK不提供发送文件,实时聊天的方法。此功能目前正在进行Beta测试。我们正在为最终用户开发简单的界面,我们需要更多的时间。我希望,我们将在12月底完成它。

但是,我们允许开发人员自己开发此功能。 你需要什么?

  1. 只需在2个用户之间创建简单的TCP / UDP套接字,然后通过它发送文件,音频/视频流
  2. 对于 1 ,您需要了解彼此的IP地址&端口 - 有STUN协议,允许知道自己的地址(IP和端口) - 这是我的STUN协议的https://github.com/soulfly/STUN-iOS
  3. 的iOS实现
  4. 如果您已经知道您的地址(IP和端口) - 只需通过简单的聊天消息将其发送给您的对手 - 然后执行 1 项目。
  5. 这就是你所需要的一切

答案 1 :(得分:2)

UPD

QuickBlox发布了针对开发人员的VideoChat和无限API调用http://quickblox.com/blog/2013/02/quickblox-updates-videochat-and-unlimited-api-calls-for-developers

因此,如果您想使用代码并将其与应用集成,请查看适用于iOS的简单代码示例http://quickblox.com/developers/SimpleSample-videochat-ios

答案 2 :(得分:2)

你有像这样的uploadMethod,

-(IBAction)uploadFile:(id)sender
{

    self.imagePicker = [[UIImagePickerController alloc] init];
    self.imagePicker.allowsEditing = NO;
    self.imagePicker.delegate = self;
    self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    [self presentViewController:self.imagePicker animated:YES completion:nil];
}

在QBChatDelegate中,你有这个方法

- (void)completedWithResult:(Result*)result{
    // Upload file result
    if(result.success && [result isKindOfClass:[QBCFileUploadTaskResult class]])
    {

        QBCFileUploadTaskResult *res = (QBCFileUploadTaskResult *)result;
        NSUInteger uploadedFileID = res.uploadedBlob.ID;

        QBChatMessage *message = [[QBChatMessage alloc] init];
        message.recipientID = self.opponent.ID;

        NSMutableDictionary *msgDict = [[NSMutableDictionary alloc]init];
        [msgDict setValue:[NSNumber numberWithInt:uploadedFileID] forKey:@"fileID"];
        message.customParameters = msgDict;

        [[QBChat instance] sendMessage:message];

    }
    else
    {
        NSLog(@"errors=%@", result.errors);
    }
}

在这里,您将获得上传的文件ID,并将其作为消息发送..

在你的chatDidReceiveNotification

- (void)chatDidReceiveMessageNotification:(NSNotification *)notification{
QBChatMessage *message = notification.userInfo[kMessage];

    if(message.customParameters != nil)
    {
        NSUInteger fileID = [message.customParameters[@"fileID"] integerValue];

        // download file by ID
        [QBContent TDownloadFileWithBlobID:fileID delegate:self];
    }
}

此方法再次调用completedWithResult方法,在此处添加此代码...

if(result.success && [result isKindOfClass:[QBCFileDownloadTaskResult class]]){
        QBCFileDownloadTaskResult *res = (QBCFileDownloadTaskResult *)result;

        if ([res file]) {

                UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:[res file]]];
                [self.messages addObject:imageView];

            [self.messagesTableView reloadData];

        }

    }else{
        NSLog(@"errors=%@", result.errors);
    }

如果要在tableView中显示图像,请像这样更改cellForRow ..

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if([[self.messages objectAtIndex:indexPath.row]isKindOfClass:[QBChatMessage class]])
    {
        static NSString *ChatMessageCellIdentifier = @"ChatMessageCellIdentifier";

        ChatMessageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ChatMessageCellIdentifier];
        if(cell == nil){
            cell = [[ChatMessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ChatMessageCellIdentifier];
        }

        QBChatMessage *message = (QBChatMessage *)self.messages[indexPath.row];
        //
        [cell configureCellWithMessage:message is1To1Chat:self.opponent != nil];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        return cell;

    }
    else if ([[self.messages objectAtIndex:indexPath.row]isKindOfClass:[UIImageView class]])
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];

        if (nil == cell) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                          reuseIdentifier:@"CellIdentifier"];
        }
        UIImageView *receivedImage = [self.messages objectAtIndex:indexPath.row];
        [cell.contentView addSubview:receivedImage];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        return cell;

    }
}

我试过这个,这段代码可行。 欢呼声。

答案 3 :(得分:0)

如果您的要求仅适用于1-1聊天,请查看此链接 http://quickblox.com/developers/SimpleSample-chat_users-ios#Send_files 这将适用于1-1聊天。

但是,如果有空间,我现在无法找到任何解决方案。我想弄清楚。如果有人知道,请在这里发帖。