美文网首页iOS
iOS集成腾讯云移动直播SDK

iOS集成腾讯云移动直播SDK

作者: 夜凉听风雨 | 来源:发表于2019-11-13 20:41 被阅读0次

    说明:本次集成的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;
    }
    
    

    相关文章

      网友评论

        本文标题:iOS集成腾讯云移动直播SDK

        本文链接:https://www.haomeiwen.com/subject/kaohictx.html