疯-iOS杂专注iOS开发(OC/Swift)ios积累

iOS 集成腾讯云直播

2016-08-06  本文已影响4599人  H了个L

效果图:


做直播已经有一段时间了,今天偶尔跟一个网友聊到这一块,问我有没有这一块的资料,我说没有,都是自己看文档,玩demo摸索出来的,吐槽了一下腾讯的很多坑,网友说既然这样何不写个博客记录一下这里面遇到的坑, 以后再做也比较方便,还能分享,于是就写了这篇简书, 第一次写, 写的不好不要吐槽, 只是希望能帮助到大家~~~
1.首先登陆腾讯云平台注册自己的账号,并在应用列表里面创建自己的应用id

1.png 2.png

2.腾讯那边的demo有两个,一个是官网,还有一个是gitHub上面的,从demo上来看,git上面的比较流畅一点,文档也比较全面,建议用git上面的(这里讲的也是git上的, 其实都差不多, 底层是一样的)

gitHub地址:https://github.com/zhaoyang21cn/iOS_Suixinbo

3.腾讯云平台配置完以后就轮到客户端的类库引入了,网上都有,不过为了项目的完整性,我就再啰嗦一遍了。首先从demo里面找到需要的类库,我们需要的库都在libs这个文件夹里面,就是这些。

im.png lib.png

**4.导入CommonLibrary,添加到PCH,并添加Compiler Flags
**

c.png

5.引入腾讯云的库之后还需要导入ios本地支持的库,如下图所示。

l.png

6.配置App参数,修改TIMAdapter.h 中的 SDK App ID

id.png

将环境配置好以后就可以开发云视频的各个流程了。

1.登陆

我们这边是采用鉴权Token来登陆的, 所以只介绍这个

在写登录的时候需要一些demo里面封装好的接口文档

这个文件夹里面的就是需要导入的文件。

111.png
    // 腾讯的登陆类, 服务器返回qcloudSign之后进行登陆
    IMALoginParam *loginParam = [[IMALoginParam alloc] init];
    loginParam.identifier = // 生成qcloudSign对应的ID;
    loginParam.userSig = // qcloudSign;
    IMAPlatform *platform = [IMAPlatform configWith:loginParam.config];

    // 获取本地的登录config
    [platform login:loginParam succ:^{
        [platform configOnEnterMainUIWith:loginParam];

        DLog(@"IM登录成功");
    } fail:^(int code, NSString *msg) {
        DLog(@"IM登录失败");
    }];

1.获取当前房间列表

/**
 *  加载直播数据
 */
- (void)loadDirectSeedingData {

    XSWeakSelf;
    __weak typeof(XSBaseTableView *) weakTableView = _tableView;
    [[XSHttpEngine shareInstance] getMyMainLectureList:^(NSDictionary *respData) {
        [weakSelf hideHUD];
        BOOL success = [[respData objectForKey:XS_STATUS_CODE] isEqualToString:XS_STATUSCODE_SUCCESS];
        if (success) {
            [weakTableView headerEndRefreshing];

            NSDictionary *dict = [respData objectForKey:XS_RESP_DATA];
            XSLiveModel *liveModel = [[XSLiveModel alloc] initWithDictionary:dict error:nil];


            if (!liveModel.data.count) {

                weakSelf.models = @[];
                [weakTableView reloadData];
                return;
            } else {
                [weakTableView removeNoDataFooter];
            }

            weakSelf.models = [liveModel.data sortedArrayUsingComparator:^NSComparisonResult(XSMyMainLectureItemModel *obj1, XSMyMainLectureItemModel *obj2) {
                 NSComparisonResult result = [[NSString stringWithFormat:@"%zd", obj1.status] compare:[NSString stringWithFormat:@"%zd", obj2.status]];
                 return result;
             }];
            [weakTableView reloadData];
        } else {
            [weakTableView headerEndRefreshing];
        }
    } failedBlock:^(NSString *errMsg) {
        [weakSelf hideHUD];

        weakSelf.models = @[];
        [weakTableView reloadData];
    }];
}

**2.既然是房间列表肯定得放入list中,我将数据放入tableview里面,当点击某一行时可以获取到某个特定房间的数据,didselect方法里面的代码如下 **

/**
 *  创建直播室
 */
- (void)createRoomModel:(XSLiveModel *)model {
    // 登陆信息
    TCShowHost *host = (TCShowHost *)[IMAPlatform sharedInstance].host;

    XSMemberDetailModel *userModel = [XSUser sharedInstance].userModel;
    host.profile.faceURL = userModel.avatar;
    host.profile.nickname = userModel.username;



    TCShowUser *user = [[TCShowUser alloc] init];
    user.avatar = [host imUserIconUrl];
    user.uid = [host imUserId];
    user.username = userModel.username;//[host imUserName];

    // 房间信息
    TCShowLiveListItem *liveRoom = [[TCShowLiveListItem alloc] init];
    liveRoom.host = user;
    liveRoom.title = model.name;
    liveRoom.cover = model.image_url;
    liveRoom.avRoomId = (int)model.id;
    liveRoom.avRoomType = 0;

    TCShowMultiLiveViewController *vc = [[TCShowMultiLiveViewController alloc] initWith:liveRoom user:host];
    vc.enableIM = NO; // 项目需要不需要聊天
    [self presentViewController:vc animated:YES completion:nil];
}

3.那么看直播也是依样画葫芦代码如下


        //进入手机直播间
        TCShowLiveListItem *liveRoom = [[TCShowLiveListItem alloc] init];


        liveRoom.title = title;


        TCShowUser *user = [[TCShowUser alloc] init];

        user.avatar = @"";

        user.username = @"";

        user.uid = @"";

        liveRoom.host = user;

        liveRoom.avRoomId = [_courseId intValue]; // 列表所拿到的房间号

        TCShowMultiLiveViewController *vc = [[TCShowMultiLiveViewController alloc] initWith:liveRoom user:[IMAPlatform sharedInstance].host];

        vc.enableIM = NO;
        [self presentViewController:vc animated:YES completion:nil];

4.最后说一个很重要的事情,那就是看直播和创建房间是不可以使用同一个账号的。

// 添加推流返回
- (void)onAVEngine:(TCAVBaseRoomEngine *)engine onStartPush:(BOOL)succ pushRequest:(TCAVLiveRoomPushRequest *)req {

    // 设置直播地址AVLiveUrl playUrl
    AVLiveUrl *RTMPLiveUrl = req.pushResp.urls.firstObject;
    AVLiveUrl *HLSLiveUrl = req.pushResp.urls.lastObject;
    NSData *RTMPData =[RTMPLiveUrl.playUrl dataUsingEncoding:NSUTF8StringEncoding];
    NSData *HLSData =[HLSLiveUrl.playUrl dataUsingEncoding:NSUTF8StringEncoding];
    RTMPData = [GTMBase64 encodeData:RTMPData];
    HLSData = [GTMBase64 encodeData:HLSData];
    NSString *RTMP = [[NSString alloc] initWithData:RTMPData encoding:NSUTF8StringEncoding];
    NSString *HLS = [[NSString alloc] initWithData:HLSData encoding:NSUTF8StringEncoding];

    XSWeakSelf;
    [[XSHttpEngine shareInstance] uploadLiveInfoWithRTMP:RTMP HLS:HLS type:self.liveClassType name:nil playType:self.playType completionBlock:^(NSDictionary *respData) {
        DLog(@"添加推流返回   respData %@", respData);

    } failedBlock:^(NSString *errMsg) {
        DLog(@"添加推流返回   errMsg %@", errMsg);
        [weakSelf exitLive];
    }];
    return;
}

腾讯那边观看直播是利用房间号来观看的,重要的参数就是房间号,主播信息以及当前登陆信息,这三个东西必须保证是对的,观看就是没有问题的,大概就是这些,各位有问题可以留言提问,知道的会回答的.毕竟已经过去一个月了,有些问题想不起来,想起来了再补充

上一篇下一篇

猜你喜欢

热点阅读