Skip to content

Commit 1aed756

Browse files
vincepzhangMinTate
vincepzhang
authored andcommitted
feat: fix android local recording
1 parent 1d19164 commit 1aed756

File tree

7 files changed

+59
-27
lines changed

7 files changed

+59
-27
lines changed

TRTC-Simple-Demo/lib/ui/login.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class LoginPageState extends State<LoginPage> {
2828
bool _enabledCamera = true;
2929

3030
/// whether turn on the microphone
31-
bool _enabledMicrophone = false;
31+
bool _enabledMicrophone = true;
3232

3333
bool _enableTextureRendering = false;
3434

@@ -106,7 +106,8 @@ class LoginPageState extends State<LoginPage> {
106106
_unFocus();
107107
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
108108
if (!(await Permission.camera.request().isGranted) ||
109-
!(await Permission.microphone.request().isGranted)) {
109+
!(await Permission.microphone.request().isGranted) ||
110+
!(await Permission.storage.request().isGranted)) {
110111
MeetingTool.toast(
111112
'You need to obtain audio and video permission to enter', context);
112113
return;

TRTC-Simple-Demo/lib/ui/meeting.dart

+42-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart';
1212
import 'package:tencent_trtc_cloud/trtc_cloud.dart';
1313
import 'package:tencent_trtc_cloud/tx_beauty_manager.dart';
1414
import 'package:tencent_trtc_cloud/tx_device_manager.dart';
15-
import 'package:tencent_trtc_cloud/tx_audio_effect_manager.dart';
1615
import 'package:tencent_trtc_cloud/trtc_cloud_def.dart';
1716
import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart';
1817
import 'package:trtc_demo/ui/login.dart';
@@ -40,15 +39,14 @@ class MeetingPageState extends State<MeetingPage> with WidgetsBindingObserver {
4039
late TRTCCloud _trtcCloud;
4140
late TXDeviceManager _txDeviceManager;
4241
late TXBeautyManager _txBeautyManager;
43-
late TXAudioEffectManager _txAudioManager;
4442

4543
List<UserModel> _userList = [];
4644
List _screenUserList = [];
4745

4846
@override
4947
initState() {
5048
super.initState();
51-
WidgetsBinding.instance!.addObserver(this);
49+
WidgetsBinding.instance.addObserver(this);
5250
_meetModel = context.read<MeetingModel>();
5351
_initRoom();
5452
}
@@ -61,7 +59,6 @@ class MeetingPageState extends State<MeetingPage> with WidgetsBindingObserver {
6159
// Beauty filter and animated effect parameter management
6260
_txBeautyManager = _trtcCloud.getBeautyManager();
6361
// Tencent Cloud Audio Effect Management Module
64-
_txAudioManager = _trtcCloud.getAudioEffectManager();
6562
// Register event callback
6663
_trtcCloud.registerListener(_onRtcListener);
6764
// trtcCloud.setVideoEncoderParam(TRTCVideoEncParam(
@@ -103,6 +100,8 @@ class MeetingPageState extends State<MeetingPage> with WidgetsBindingObserver {
103100
break;
104101
case AppLifecycleState.detached:
105102
break;
103+
case AppLifecycleState.hidden:
104+
break;
106105
}
107106
}
108107

@@ -150,7 +149,7 @@ class MeetingPageState extends State<MeetingPage> with WidgetsBindingObserver {
150149

151150
@override
152151
dispose() {
153-
WidgetsBinding.instance!.removeObserver(this);
152+
WidgetsBinding.instance.removeObserver(this);
154153
_destoryRoom();
155154
super.dispose();
156155
}
@@ -175,6 +174,12 @@ class MeetingPageState extends State<MeetingPage> with WidgetsBindingObserver {
175174
MeetingTool.toast('Enter room success', context);
176175
}
177176
}
177+
if (type == TRTCCloudListener.onAudioRouteChanged) {
178+
print("TRTCCloudListener onAudioRouteChanged route:${param['route']}, fromRoute:${param['fromRoute']}");
179+
}
180+
if (type == TRTCCloudListener.onDeviceChange) {
181+
print("TRTCCloudListener onDeviceChange deviceId:${param['deviceId']}, type:${param['type']}, state:${param['state']}");
182+
}
178183
if (type == TRTCCloudListener.onExitRoom) {
179184
if (param > 0) {
180185
MeetingTool.toast('Exit room success', context);
@@ -259,6 +264,32 @@ class MeetingPageState extends State<MeetingPage> with WidgetsBindingObserver {
259264
this.setState(() {});
260265
_meetModel.setList(_userList);
261266
}
267+
268+
if (type == TRTCCloudListener.onMusicObserverStart) {
269+
print('TRTCCloudListener onMusicObserverStart id:${param['id']} errCode:${param['errCode']}');
270+
}
271+
if (type == TRTCCloudListener.onMusicObserverPlayProgress) {
272+
print('TRTCCloudListener onMusicObserverPlayProgress id:${param['id']} curPtsMS:${param['curPtsMS']} durationMS:${param['durationMS']}');
273+
}
274+
if (type == TRTCCloudListener.onMusicObserverComplete) {
275+
print('TRTCCloudListener onMusicObserverComplete id:${param['id']} errCode:${param['errCode']}');
276+
}
277+
278+
if (type == TRTCCloudListener.onRecvCustomCmdMsg) {
279+
print('TRTCCloudListener onRecvCustomCmdMsg userId:${param['userId']} cmdID:${param['cmdID']} seq:${param['seq']} message:${param['message']}');
280+
}
281+
if (type == TRTCCloudListener.onMissCustomCmdMsg) {
282+
print('TRTCCloudListener onMissCustomCmdMsg userId:${param['userId']} cmdID:${param['cmdID']} errCode:${param['errCode']} missed:${param['missed']}');
283+
}
284+
if (type == TRTCCloudListener.onRecvSEIMsg) {
285+
print('TRTCCloudListener onRecvSEIMsg userId:${param['userId']} message:${param['message']}');
286+
}
287+
if (type == TRTCCloudListener.onLocalRecordBegin) {
288+
print('TRTCCloudListener onLocalRecordBegin errCode:${param['errCode']} storagePath:${param['storagePath']}');
289+
}
290+
if (type == TRTCCloudListener.onLocalRecordComplete) {
291+
print('TRTCCloudListener onLocalRecordComplete errCode:${param['errCode']} storagePath:${param['storagePath']}');
292+
}
262293
}
263294

264295
Future<bool?> _showErrordDialog(errorMsg) {
@@ -786,10 +817,12 @@ class MeetingPageState extends State<MeetingPage> with WidgetsBindingObserver {
786817
Widget build(BuildContext context) {
787818
return Scaffold(
788819
key: _scaffoldKey,
789-
body: WillPopScope(
790-
onWillPop: () async {
791-
_trtcCloud.exitRoom();
792-
return true;
820+
body: PopScope(
821+
canPop: false,
822+
onPopInvoked: (value) {
823+
if (value) {
824+
_trtcCloud.exitRoom();
825+
}
793826
},
794827
child: Stack(
795828
children: <Widget>[

TRTC-Simple-Demo/lib/ui/settings.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class SettingsPageState extends State<SettingsPage> with WidgetsBindingObserver
9494
@override
9595
initState() {
9696
super.initState();
97-
WidgetsBinding.instance!.addObserver(this);
97+
WidgetsBinding.instance.addObserver(this);
9898
_initRoom();
9999
}
100100

@@ -412,6 +412,8 @@ class SettingsPageState extends State<SettingsPage> with WidgetsBindingObserver
412412
}
413413
}
414414
break;
415+
case AppLifecycleState.hidden:
416+
break;
415417
}
416418
}
417419

TRTC-Simple-Demo/lib/ui/test/test_api.dart

+9-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:path_provider/path_provider.dart';
1414
import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart';
1515
import 'package:trtc_demo/models/user_model.dart';
1616
import 'package:trtc_demo/utils/tool.dart';
17+
import 'package:path_provider/path_provider.dart';
1718

1819
/// Video page
1920
class TestPage extends StatefulWidget {
@@ -519,15 +520,20 @@ class TestPageState extends State<TestPage> {
519520
),
520521
TextButton(
521522
onPressed: () async {
522-
Directory appDocDir =
523-
await getApplicationDocumentsDirectory();
523+
Directory? appDocDir;
524+
if(Platform.isAndroid) {
525+
appDocDir = await getExternalStorageDirectory();
526+
} else {
527+
appDocDir = await getApplicationDocumentsDirectory();
528+
}
524529
await trtcCloud.startLocalRecording(
525530
TRTCLocalRecordingParams(
526531
recordType: TRTCCloudDef.TRTCRecordTypeBoth,
527532
interval: 2000,
528533
maxDurationPerFile: 20000,
529534
filePath:
530-
appDocDir.path + '/isolocalVideo.mp4'));
535+
'${appDocDir?.path}/isolocalVideo.mp4'));
536+
MeetingTool.toast('${appDocDir?.path}/isolocalVideo.mp4 Start Recording!', context);
531537
},
532538
child: Text('startLocalRecording-Android&ios'),
533539
),

TRTC-Simple-Demo/lib/ui/test/test_web.dart

-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
1-
import 'dart:convert';
2-
import 'dart:io';
3-
import 'package:flutter/cupertino.dart';
41
import 'package:flutter/material.dart';
5-
import 'package:provider/provider.dart';
6-
import 'package:trtc_demo/debug/GenerateTestUserSig.dart';
7-
import 'package:trtc_demo/models/meeting_model.dart';
82
import 'package:tencent_trtc_cloud/trtc_cloud.dart';
93
import 'package:tencent_trtc_cloud/tx_beauty_manager.dart';
104
import 'package:tencent_trtc_cloud/tx_device_manager.dart';
115
import 'package:tencent_trtc_cloud/tx_audio_effect_manager.dart';
126
import 'package:tencent_trtc_cloud/trtc_cloud_def.dart';
13-
import 'package:path_provider/path_provider.dart';
147
import 'package:trtc_demo/utils/tool.dart';
158

169
class TestWebPage extends StatefulWidget {

TRTC-Simple-Demo/lib/utils/tool.dart

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
import 'dart:io';
2-
import 'dart:ui';
3-
4-
import 'package:flutter/material.dart';
52
import 'package:flutter/services.dart';
63
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
74
import 'package:path_provider/path_provider.dart';
@@ -39,7 +36,7 @@ class MeetingTool {
3936
}
4037

4138
static Future<String> copyAssetToLocal(String asset,
42-
{bool rewrite: false}) async {
39+
{bool rewrite = false}) async {
4340
int lastIndex = asset.lastIndexOf("/");
4441

4542
final dir = await getApplicationDocumentsDirectory();

TRTC-Simple-Demo/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ environment:
66
sdk: '>=2.12.0 <3.0.0'
77

88
dependencies:
9-
tencent_trtc_cloud: ^2.8.0
9+
tencent_trtc_cloud: ^2.8.2
1010
cupertino_icons: ^1.0.5
1111
provider: ^5.0.0
1212
crypto: ^3.0.1

0 commit comments

Comments
 (0)