iOS集成腾讯云移动直播SDK

说明:本次集成的SDK为基础版。因为官方文档有些地方比较坑,以此记录来帮助可能会踩坑的人。本文借鉴官方文档编写,加上了自己填的坑。

1. 下载 SDK 开发包

点击下载SDK

2. 给 SDK 配置 License 授权

点击申请Licens 获取测试用的 License,您会获得两个字符串:一个字符串是 licenseURL,另一个字符串是解密 key。

3.工程配置

配置运行系统为 iOS 9.0 以上。

将此处改为Embed & Sign

图片.png

后来发现打包成功,但是导出测试包的时候出错,删除了ImSDK.framework后成功。如果有用到这个库,不能删除的话,可以看我的另一篇文章,解决这个问题。文章链接

如需要进入后台仍然运行相关功能,可选中当前工程项目,在 Capabilities 下设置 Background Modes 为 ON,并勾选 Audio,AirPlay and Picture in Picture

图片.png
图片.png

代码部分:

1.引入头文件

在用到SDK的地方引入头文件#import "TXLiteAVSDK_Smart/TXLiteAVSDK.h"

2.配置SDK

在项目启动时配置SDK,这里有个坑的地方,licenceURL在控制台生成的时候是http开头,我们iOS需要将它改为https的,才能下载成功。

    NSString * const licenceURL = @"https://license.vod2.myqcloud.com/license/v1/f3598d089c8a6dc3be60532e7363e098/TXLiveSDK.licence";
    NSString * const licenceKey = @"e82c9731b83fe358c853dcbe5e23601d";
    
    //TXLiveBase 位于 "TXLiveBase.h" 头文件中
    [TXLiveBase setLicenceURL:licenceURL key:licenceKey];

4.初始化 TXLivePush 组件

首先创建一个TXLivePushConfig对象。该对象可以指定一些高级配置参数,但一般情况下我们不建议您操作该对象,因为我们已经在其内部配置好了所有需要校调的参数。之后再创建一个TXLivePush对象,该对象负责完成推流的主要工作。

注意这里需要将TXLivePush对象设置为强引用属性,否则无法预览。

    TXLivePushConfig *config = [[TXLivePushConfig alloc] init];  // 一般情况下不需要修改默认 config
    self.pusher = [[TXLivePush alloc] initWithConfig: config]; // config 参数不能为空

5.开启摄像头预览

调用 TXLivePush 中的startPreview接口可以开启当前手机的摄像头预览。您需要为startPreview 接口提供一个用于显示视频画面的 view 对象。
这里我们自定义一个UIView属性preView作为预览界面。

self.preView = [[UIView alloc] initWithFrame:self.view.bounds]; 
_preView.backgroundColor = [UIColor blackColor];
[self.view addSubview:_preView];
[self.pusher startPreview:self.preView];

6. 启动和结束推流

启动推流:如果已经通过startPreview接口启动了摄像头预览,就可以调用 TXLivePush 中的startPush接口开始推流。如果 startPush 接口返回 -5,则代表您的 License 校验失败了,请检查第2步“给 SDK 配置 License 授权”中的工作是否有问题。

int code = [self.pusher startPush:rtmpUrl];
NSLog(@"pushCode=%d", code);

推流结束后,可以调用 TXLivePush 中的stopPush接口结束推流。请注意,如果已经启动了摄像头预览,请在结束推流时将其关闭,否则会导致 SDK 的表现异常。

 //如果已经启动了摄像头预览,请在结束推流时将其关闭。
[_pusher stopPreview];
//结束推流
[_pusher stopPush];

7.如何获取可用的推流 URL

开通直播服务后,可以使用 直播控制台 > 辅助工具 > 地址生成器 生成推流地址,详细信息请参见 推拉流 URL

在生成推流url这里有个坑,就是自己拼接的时候,过期时间如果用十六进制,记得一定要转为大写。 还有最后转为MD5格式的txSecret一定要转为小写格式。否则验证会失败,无法推流!
下面贴上自己拼接推流地址代码:

    NSInteger currentTime = [self getNowTimestamp];
    NSInteger expireTime = currentTime + 24 * 3600;
    // 过期时间转为十六进制并转为大写格式
    NSString *expireTimeString = [[NSString stringWithFormat:@"%lx", expireTime] uppercaseString];
    
    NSString *streamName = @"450";
    NSString *txSecret = [self createPusherSecretKeyWithKey:@"85865ef4ddc14eaf259737bbc6d91cf0" StreamName:streamName txTime:expireTimeString];
    NSString* rtmpUrl = [NSString stringWithFormat:@"rtmp://67392.livepush.myqcloud.com/live/%@?txSecret=%@&txTime=%@", streamName, txSecret, expireTimeString];

#pragma mark==下面为封装的方法======================================================
// 获取当前时间戳 10位
- (NSInteger)getNowTimestamp {
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
    [formatter setDateStyle:NSDateFormatterMediumStyle];
    
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    
    [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
    
    //设置时区,这个对于时间的处理有时很重要
    
    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];
    
    [formatter setTimeZone:timeZone];
    
    NSDate *datenow = [NSDate date];//现在时间
    
    //时间转时间戳的方法:
    NSInteger timeSp = [[NSNumber numberWithDouble:[datenow timeIntervalSince1970]] integerValue];
    
    return timeSp;
}


/// 生成txSecret
/// @param key 密钥
/// @param streamName 流ID
/// @param txTime 过期时间
- (NSString *)createPusherSecretKeyWithKey:(NSString *)key StreamName:(NSString *)streamName txTime:(NSString *)txTime {
    // txSecret 的生成方法是 = MD5(KEY + StreamName + txTime)
    NSString *string = [NSString stringWithFormat:@"%@%@%@", key, streamName, txTime];
    NSString *secretKeyMD5 = [self MD5StringWithString:string];
    NSString *secretKey = [secretKeyMD5 lowercaseString];
    return secretKey;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,996评论 0 15
  • 全局创建context? 创建一个全局的context,然后退出SDK层房间时不销毁只是停止context。 SD...
    Carden阅读 1,626评论 0 2
  • 版本记录 前言 以前做过移动直播项目,做直播的推流和拉流用的是乐视的移动直播业务,集成乐视的移动业务的SDK。 详...
    刀客传奇阅读 1,730评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 我最近遇见的卡点,在今天终于抓到了,不舒服的地方一定有成长的地方 我最近一段时间一直都不是很舒服,但我慢慢的接纳这...
    清欢的心灵花园阅读 332评论 0 2