Skip to content

集成到客户端

这页带你把 TiRTC 客户端 SDK 集成到自己的 App,并完成 SDK 初始化。

前置条件

开始写客户端代码前,先准备好这几项:

你需要准备从哪里来
AppId你的 TiRTC 应用配置

支持平台与接入要求

平台接入要求
FlutterFlutter >=3.13.0
Dart >=3.1.0 <4.0.0
支持 Android / iOS / macOS / OpenHarmony / HarmonyOS NEXT
AndroidAndroid 5.0(API Level 21)及以上
arm64-v8a
compileSdk35
HarmonyOSOpenHarmony / HarmonyOS NEXT 原生应用
DevEco Studio 或 OpenHarmony SDK 12 及以上
运行设备需支持 arm64-v8a 原生库
iOSiOS 13.0 及以上
arm64
Web现代浏览器
页面需要通过 HTTP(S) 访问

引用 SDK

代码块中的 <latest-version> 从对应平台发布说明获取:FlutterAndroidHarmonyOSiOSWeb

text
# pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  tirtc_av_kit: <latest-version>

# android/build.gradle.kts
# 仅构建 Android 目标时需要
allprojects {
  repositories {
    google()
    mavenCentral()
    maven {
      url = uri("http://repo-sdk.tange-ai.com/repository/maven-public/")
      isAllowInsecureProtocol = true
      credentials {
        username = "tange_user"
        password = "tange_user"
      }
    }
  }
}
kotlin
// settings.gradle.kts
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
    maven {
      url = uri("http://repo-sdk.tange-ai.com/repository/maven-public/")
      isAllowInsecureProtocol = true
      credentials {
        username = providers.gradleProperty("TIRTC_PUBLIC_MAVEN_USERNAME").orElse("tange_user").get()
        password = providers.gradleProperty("TIRTC_PUBLIC_MAVEN_PASSWORD").orElse("tange_user").get()
      }
    }
  }
}

// app/build.gradle.kts
dependencies {
  implementation("com.tange.ai:tirtc-av:<latest-version>")
}
json5
// oh-package.json5
{
  "dependencies": {
    "tirtc-av": "<latest-version>"
  }
}
ruby
target 'YourApp' do
  pod 'TiRTC_AV', '<latest-version>'
end
html
<!-- Web SDK 下载:https://github.com/tangeai/tirtc-web-demo/releases -->
<!-- tirtc.es.min.js 和 librender.wasm 需要部署到同一个目录。 -->
<!-- 页面只需要引入 tirtc.es.min.js,它会自动加载同目录下的 librender.wasm。 -->
<script type="module">
  import {
    TiRtc,
    TiRtcInitOptions,
    TiRtcConn,
    TiRtcAudioOutput,
    TiRtcVideoOutput,
  } from './tirtc.es.min.js';
</script>

初始化 SDK

应用启动后,先用你的 AppId 初始化 SDK。初始化成功后,再进入连接、播放、收发消息等后续流程。

dart
import 'package:flutter/material.dart';
import 'package:tirtc_av_kit/tirtc_av_kit.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  final int code = await TiRtc.initialize(
    const TiRtcInitOptions(
      appId: 'your-app-id'
    ),
  );
  if (code != 0) {
    throw StateError('TiRTC initialize failed: ${TiRtc.formatError(code)}');
  }

  runApp(const YourApp());
}
kotlin
class DemoApp : Application() {
  override fun onCreate() {
    super.onCreate()
    TiRtc.initialize(
      applicationContext,
      TiRtcInitOptions(appId = "your-app-id"),
    )
  }
}
ts
import type { common } from '@kit.AbilityKit';
import { TiRtc } from 'tirtc-av/Index';

async function initializeTiRtc(context: common.UIAbilityContext): Promise<void> {
  const code = await TiRtc.initialize({
    context,
    appId: 'your-app-id',
  });
  if (code !== 0) {
    throw new Error(`TiRTC initialize failed: ${TiRtc.formatError(code)}`);
  }
}
swift
import OSLog
import TiRTC_AV
import UIKit

@main
final class AppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?

  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
  ) -> Bool {
    let config = TiRtcInitOptions(appId: "your-app-id")
    TiRtc.initialize(config)
    return true
  }
}
html
<!-- 需固定 id="canvas" 的 canvas 节点用于视频渲染。 -->
<canvas id="canvas"></canvas>

<script type="module">
  import { TiRtc, TiRtcInitOptions } from './tirtc.es.min.js';

  TiRtc.initialize(TiRtcInitOptions({ appId: 'your-app-id' }));

  // 创建视频播放链路前,先等待渲染依赖准备完成。
  await TiRtc.videoOutputReady();
</script>

TiRTC 开发文档