Flutter实时音视频通信插件tencent_trtc_cloud的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter实时音视频通信插件tencent_trtc_cloud的使用

初始化

import 'package:trtc/trtc.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final trtcCloud = await TRTCCloud.sharedInstance();
  final txDeviceManager = trtcCloud.getDeviceManager();
  final txBeautyManager = trtcCloud.getBeautyManager();
  final txAudioManager = trtcCloud.getAudioEffectManager();
}

加入/退出房间

void joinRoom(String sdkAppId, String userId, String userSig, String roomId) async {
  await trtcCloud.enterRoom(
      TRTCParams(
        sdkAppId: sdkAppId,
        userId: userId,
        userSig: userSig,
        roomId: roomId),
      TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL);
}

void leaveRoom() async {
  await trtcCloud.exitRoom();
}

注册监听器

void registerListener(Function(type, param) onRtcListener) {
  trtcCloud.registerListener(onRtcListener);
}

void unregisterListener() {
  trtcCloud.unRegisterListener(onRtcListener);
}

播放本地视频

void startLocalPreview(bool frontCamera, int viewId) async {
  await trtcCloud.startLocalPreview(frontCamera, viewId);
}

显示远程视频

void startRemoteView(String userId, int streamType, int viewId) async {
  await trtcCloud.startRemoteView(userId, streamType, viewId);
}

显示远程屏幕共享

void startRemoteScreenSharing(String userId, int streamType, int viewId) async {
  await trtcCloud.startRemoteView(userId, streamType, viewId);
}

查看TRTC日志

TRTC日志默认以压缩和加密的形式存储,文件名为XLOG。可以通过设置setLogCompressEnabled来控制是否压缩和加密。

  • iOS:

    Documents/log of the application sandbox
    
  • Android (6.7及以下):

    /sdcard/log/tencent/liteav
    
  • Android (6.8及以上):

    /sdcard/Android/data/package name/files/log/tencent/liteav/
    

常见问题

1 iOS无法显示视频(Android正常)

  • 确认io.flutter.embedded_views_previewinfo.plist中为YES

<key>ios.flutter.embedded_views_preview</key>
<true/>

<property-list>
  <dict>
    <key>xmlns:tools</key>
    <string>http://schemas.android.com/tools</string>
  </dict>
  <dict>
    <key>android:label</key>
    <string></string>
  </dict>
</property-list>

更多关于Flutter实时音视频通信插件tencent_trtc_cloud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter实时音视频通信插件tencent_trtc_cloud的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用tencent_trtc_cloud插件来实现实时音视频通信的代码示例。这个示例将展示如何初始化SDK、加入房间、开始音视频通信等核心功能。

首先,确保你已经在pubspec.yaml文件中添加了tencent_trtc_cloud依赖:

dependencies:
  flutter:
    sdk: flutter
  tencent_trtc_cloud: ^最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤来实现实时音视频通信:

1. 初始化SDK

在你的应用的主入口文件(通常是main.dart)中,初始化TencentTRTCCloud实例:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late TencentTRTCCloud _trtcCloud;

  @override
  void initState() {
    super.initState();
    _initTRTC();
  }

  void _initTRTC() {
    _trtcCloud = TencentTRTCCloud();
    _trtcCloud.initSDK(
      SDKOptions(
        appId: '你的SDKAppId', // 替换为你的SDKAppId
      ),
    );
    _trtcCloud.setListener(TRTCListener()
      ..onEnterRoom = (int roomId, int userId, TRTCRoomInfo? roomInfo) {
        print('进入房间成功,房间ID:$roomId,用户ID:$userId');
      }
      ..onUserVideoAvailable = (int userId, bool isAvailable) {
        print('用户$userId的视频流${isAvailable ? '可用' : '不可用'}');
      }
      // 添加其他需要的回调
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Tencent TRTC Demo'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              _joinRoom(123456); // 假设加入房间号为123456的房间
            },
            child: Text('加入房间'),
          ),
        ),
      ),
    );
  }

  void _joinRoom(int roomId) {
    _trtcCloud.joinRoom(
      RoomOptions(
        roomId: roomId,
        userId: 1000, // 替换为你的用户ID
        role: TRTCRole.audience, // 观众或主播角色
      ),
    );
  }
}

2. 显示本地和远程视频流

为了显示本地和远程视频流,你需要创建一个自定义的Widget来渲染视频。这里是一个简单的示例:

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

class VideoView extends StatefulWidget {
  final int userId;
  final bool isLocal;

  VideoView({required this.userId, required this.isLocal});

  @override
  _VideoViewState createState() => _VideoViewState();
}

class _VideoViewState extends State<VideoView> {
  late TRTCVideoView _videoView;

  @override
  void initState() {
    super.initState();
    _videoView = TRTCVideoView();
    if (widget.isLocal) {
      _startLocalPreview();
    } else {
      _subscribeRemoteStream(widget.userId);
    }
  }

  void _startLocalPreview() {
    _videoView.startLocalPreview();
  }

  void _subscribeRemoteStream(int userId) {
    // 假设你已经有一个TRTCCloud实例_trtcCloud
    _trtcCloud.subscribeRemoteStream(userId);
    _videoView.setupRemoteView(userId);
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Stack(
        children: [
          AspectRatio(
            aspectRatio: 16 / 9,
            child: TRTCVideoViewWidget(_videoView),
          ),
        ],
      ),
    );
  }

  @override
  void dispose() {
    _videoView.stopPreview();
    _videoView.dispose();
    super.dispose();
  }
}

在你的主页面(_MyAppStatebuild方法)中,你可以添加这个VideoView来显示视频:

@override
Widget build(BuildContext context) {
  return MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text('Flutter Tencent TRTC Demo'),
      ),
      body: Column(
        children: [
          Expanded(
            child: Stack(
              children: [
                if (_isLocalVideoVisible)
                  VideoView(userId: 0, isLocal: true),
                // 你可以根据需要添加多个远程视频流
                // VideoView(userId: remoteUserId1, isLocal: false),
                // VideoView(userId: remoteUserId2, isLocal: false),
              ],
            ),
          ),
          ElevatedButton(
            onPressed: () {
              _joinRoom(123456); // 假设加入房间号为123456的房间
            },
            child: Text('加入房间'),
          ),
        ],
      ),
    ),
  );
}

请注意,上述代码仅展示了核心功能的实现,并省略了一些细节,例如错误处理、UI布局优化、视频流的切换管理等。在实际项目中,你需要根据具体需求进行完善。

另外,由于tencent_trtc_cloud插件可能会不断更新,请参考最新的官方文档和示例代码来获取最新的使用方法和最佳实践。

回到顶部