iOS 集成腾讯云直播

效果图:


做直播已经有一段时间了,今天偶尔跟一个网友聊到这一块,问我有没有这一块的资料,我说没有,都是自己看文档,玩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登录失败");
    }];

  • 因为登陆这个东西需要保存的个人信息重要,创建直播和看直播都需要这些东东,所以才会引起之前说的很多人吐槽demo可以成功,但是自己写的就会有问题等等,一个原因是自己将demo里面的逻辑搞乱了,另一个就是使用方法不当,因为demo是使用的托管模式,而有的需求可能会是独立模式,所以才会引起推流收不到,收到的又看不到画面等等问题。下面直接将开创房间和收看视频写出来,代码并不多,直接上代码。

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;
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容