说明:本次集成的SDK为基础版。因为官方文档有些地方比较坑,以此记录来帮助可能会踩坑的人。本文借鉴官方文档编写,加上了自己填的坑。
1. 下载 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;
}
网友评论