logologo
售前咨询
直播云
产品简介
产品定价
控制台操作指南
客户端SDK
服务端API
相关协议
文档中心
客户端SDKiOS快速接入指南

iOS快速接入指南


本文将介绍如何在 iOS 端使用 KRtcEngine SDK 快速实现直播推流。详细接口文档及说明请点开查看 iOS端推流SDK

前提条件

  • Xcode 11.0 及以上
  • iOS 10.0 及以上
  • Cocoapods
  • 有效的 直播云 开发者账号 和 App ID

创建 iOS 项目(集成到已有项目跳过此步骤)

  1. 打开 Xcode 并点击 Create a new Xcode project。
  2. 选择平台类型为 iOS、项目类型为 Single View App,并点击 Next。
  3. 输入项目名称(Product Name)、开发团队信息(Team)、组织名称(Organization Name)和语言(Language)等项目信息,并点击Next。
  4. 选择项目存储路径,并点击Create。

获取 SDK

  1. 开始前确保您已经安装 Cocoapods。参考 Getting Started with CocoaPods 安装说明。
  2. 在终端里进入项目根目录,并运行 pod init 命令。项目文件夹下会生成一个 Podfile 文本文件。
  3. 打开 Podfile 文件,添加以下内容。注意将 Your App 替换为您的 Target 名称。
 # platform: ios, '10.0'
 use_frameworks!
 target 'Your App' do
     pod 'KRtcEngine', podspec => '请联系我们的技术支持获取 SDK 的 podspec 地址'
 end
  1. 在终端内运行 pod install 命令安装 SDK。成功安装后,终端中会显示 Pod installation complete!,此时项目文件夹下会生成一个 xcworkspace 文件。
  2. 打开新生成的 xcworkspace 文件。

基本流程

现在,我们已经将 KRtcEngine iOS SDK 集成到项目中了。接下来我们要在 ViewController 中调用 KRtcEngine iOS SDK 提供的核心 API 实现直播推流功能,API 调用时序见下图。

image.png

注意,在下文中: 您需要将 YourToken 替换成您自己生成的 Token; 您需要将 YourChannelId 替换为您生成 Token 时填入的频道名称; 您需要将 YourUid 替换成您自己生成的 uid。

1. 导入类

在调用 KRtcEngine API 前,您需要在项目中导入 KRtcEngine 类,并定义一个 ksRtcEngine 变量。

// ViewController.h
#import <KRtcEngine/KRtcEngine.h>

@interface ViewController : UIViewController <KRtcEngineDelegate>

@property (nonatomic, strong) KRtcEngine *ksRtcEngine;

@end

2. 创建用户界面

根据场景需要,为您的项目创建视频通话的用户界面。我们推荐您在项目中添加如下元素:

  • 本地视频窗口
  • 停止直播按钮
    您可以参考以下代码创建一个基础的用户界面。
// ViewController.m
#import <UIKit/UIKit.h>
@interface ViewController ()

@property (nonatomic, strong) UIView *localView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self buildUI];
    
    [self initializeKRtcEngine];
    [self setupLocalVideo];
    [self setupMediaParameters];
    [self startLivePush];
}

- (void)buildUI {
    self.localView = [[UIView alloc] init];
    self.localView.frame = CGRectMake(self.view.bounds.size.width - 90, 0, 90, 160);
    [self.view addSubview:self.localView];
}

@end

3. 初始化 KRtcEngine 对象

调用 initEngineWithConfig:delegate: 创建并初始化 KRtcEngine 对象。 您还可以根据场景需要,在初始化时注册想要监听的回调事件。

// ViewController.m
- (void)initializeKRtcEngine {
    // 初始化日志配置
    NSArray* docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* logPath = [NSString stringWithFormat:@"%@/krtc_sdk_logs", docPaths[0]];
    KLogConfig* logConfig = [[KLogConfig alloc] init];
    logConfig.level = KRtcEngineLogLevelDebug;
    logConfig.filePath = [NSString stringWithFormat:@"%@/krtc.log", logPath];
    logConfig.fileSize = 10 * 1024;

    // 初始化 KRtcEngine 配置
    KRtcEngineConfig *config = [[KRtcEngineConfig alloc] init];
    config.appId = @"YourAppId";
    config.logConfig = logConfig;

    // 创建 KRtcEngine 实例
    self.ksRtcEngine = [[KRtcEngine alloc] initEngineWithConfig:config delegate:self];
}

4. 设置本端视频预览

在开始推流前设置本地视图,以便在通话中看到本地图像。参考以下步骤设置本地视图:

  1. 调用 enableVideo 方法启用视频模块。
  2. 调用 bindLocalVideoView: 方法设置本地视图。
  3. 调用 startPreview 开启摄像头。
// ViewController.m
- (void)setupLocalVideo {
    [self.ksRtcEngine enableVideo];
    KRtcEngineVideoCanvas* canvas = [[KRtcEngineVideoCanvas alloc] initWithUIView:self.localView  channelId:@"YourChannelId" uid:self.@"YourUserId" renderMode:KRtcEngineVideoRenderModeScaleToFit mirrorMode:KRtcEngineVideoMirrorModeAuto];
    [self.ksRtcEngine bindLocalVideoView:canvas];
    [self.ksRtcEngine startPreview]; 
}

5. 设置音视频编码参数

调用 setVideoEncoderConfiguration:videoEncoderConfig: 设置视频编码的分辨率,码率,帧率等参数;调用 setLiveAudioProfile:profile: 设置音频相应 profile。

// ViewController.m
- (void)setupMediaParameters {
  	// 设置视频编码参数
    KRtcEngineVideoEncoderConfiguration* config = [[KRtcEngineVideoEncoderConfiguration alloc] initWithWidth:720 height:1280 frameRate:15 bitrate:1500];
    [self.ksRtcEngine setVideoEncoderConfiguration:@"YourChannelId" videoEncoderConfig:config];
  	// 设置音频编码参数
  	[self.ksRtcEngine setLiveAudioProfile:@"YourChannelId" profile:KRtcEngineLiveAudioProfileMusicHigherQualityStereo];
}

6. 实现 KRtcEngineDelegate 中的推流事件监听

// ViewController.m
- (void)KRtcEngine:(KRtcEngine*)engine
                  channelId:(NSString*)channelId
  didPushStreamStateChanged:(KRtcEnginePushStreamState)state
                      error:(KRtcEnginePushStreamError)error {
    switch (state) {
        case KRtcEnginePushStreamStateRunning:
            // do sth.
            break;
        case KRtcEnginePushStreamStateFailed:
            // do sth.
            break;
        default:
            break;
    }
}

7. 开始直播

调用 startPushByToken:channelId:streamUrl: 开始直播。

  • "YourToken" :传入用于鉴权的 Token,获取方式:在控制台里创建应用获取对应的 AppID 和 token;或者从业务方服务器获取的动态token。
  • "YourChannelId":传入能标识频道的自定义频道 ID。
  • ”StreamUrl“:推流地址需要业务层根据指定规则生成,例如:
    image.png
// ViewController.m
- (void)startLivePush {
    [self.ksRtcEngine startPushByToken:@"YourToken" channelId:@"YourChannelId" streamUrl:@"rtmp://yourstreamurl"];
}

8. 停止直播

根据场景需要,如停止直播、关闭 app 或 app 切换至后台时,调用 stopPush 停止直播。

// ViewController.m
[self.ksRtcEngine stopPush:@"YourChannelId"];

9. 销毁 KRtcEngine 对象

停止推流后,如果您想释放 KRtcEngine SDK 使用的所有资源,需调用 destroy 销毁 KRtcEngine 对象。

// ViewController.m
[self.ksRtcEngine destroy];

运行项目

在运行项目前,您需要设置签名和开发团队,并添加设备权限。

1. 设置签名和开发团队

  1. 在 Xcode 中,进入 TARGETS > Project Name > Signing & Capabilities > Signing 菜单,勾选 Automatically manage signing。
  2. 仔细阅读弹窗提示,并点击 Enable Automatic。
  3. 成功设置签名后,在 Team 处选择您的开发团队。

2. 添加设备权限

在 Xcode 中,打开 info.plist 文件。在右侧列表中添加如下内容,获取相应的设备权限:

Key Type Value
Privacy - Microphone Usage Description String 使用麦克风的目的,例如:for a call or live interactive streaming。
Privacy - Camera Usage Description String 使用摄像头的目的,例如:for a call or live interactive streaming。

3. 体验直播推流

我们建议在 iOS 真机中运行您的项目。运行成功后,您可以看到本地视频,同时可以通过 ffplay 等工具拉取到直播流(拉流地址由业务层根据指定规则生成)。

上一篇:Android快速接入指南下一篇:API概览
该篇文档内容是否对您有帮助?
有帮助没帮助