agora_rtc_rawdata 0.1.0 agora_rtc_rawdata: ^0.1.0 copied to clipboard
A new flutter plugin project.
import 'dart:developer';
import 'package:agora_rtc_engine/rtc_engine.dart';
import 'package:agora_rtc_engine/rtc_local_view.dart' as RtcLocalView;
import 'package:agora_rtc_engine/rtc_remote_view.dart' as RtcRemoteView;
import 'package:agora_rtc_rawdata/agora_rtc_rawdata.dart';
import 'package:agora_rtc_rawdata_example/config/agora.config.dart' as config;
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late RtcEngine engine;
bool startPreview = false, isJoined = false;
List<int> remoteUid = [];
@override
void initState() {
super.initState();
this._initEngine();
}
@override
void dispose() {
super.dispose();
this._deinitEngine();
}
_initEngine() async {
if (defaultTargetPlatform == TargetPlatform.android) {
await [Permission.microphone, Permission.camera].request();
}
engine = await RtcEngine.create(config.appId);
engine.setEventHandler(
RtcEngineEventHandler(joinChannelSuccess: (channel, uid, elapsed) {
log('joinChannelSuccess $channel $uid $elapsed');
setState(() {
isJoined = true;
});
}, userJoined: (uid, elapsed) {
log('userJoined $uid $elapsed');
setState(() {
remoteUid.add(uid);
});
}, userOffline: (uid, reason) {
log('userJoined $uid $reason');
setState(() {
remoteUid.removeWhere((element) => element == uid);
});
}));
await engine.enableVideo();
await engine.startPreview();
setState(() {
startPreview = true;
});
var handle = await engine.getNativeHandle();
if (handle != null) {
await AgoraRtcRawdata.registerAudioFrameObserver(handle);
await AgoraRtcRawdata.registerVideoFrameObserver(handle);
}
await engine.joinChannel(config.token, config.channelId, null, config.uid);
}
_deinitEngine() async {
await AgoraRtcRawdata.unregisterAudioFrameObserver();
await AgoraRtcRawdata.unregisterVideoFrameObserver();
await engine.destroy();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Stack(
children: [
if (startPreview) RtcLocalView.SurfaceView(),
Align(
alignment: Alignment.topLeft,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: List.of(remoteUid.map(
(e) => Container(
width: 120,
height: 120,
child: RtcRemoteView.SurfaceView(
uid: e,
channelId: config.channelId,
),
),
)),
),
),
)
],
),
),
);
}
}