diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 107b7e977..69a600f8d 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -47,7 +47,7 @@ android:value="2" /> diff --git a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/MainActivity.kt b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/MainActivity.kt index 7db1691e3..2e7b2a2ba 100644 --- a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/MainActivity.kt +++ b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/MainActivity.kt @@ -1,8 +1,8 @@ package io.agora.agora_rtc_engine_example import android.os.Bundle -import io.agora.agora_rtc_engine_example.custom_audio_source.CustomAudioPlugin -import io.agora.agora_rtc_engine_example.custom_audio_source.CustomAudioSource +import io.agora.agora_rtc_engine_example.custom_capture_audio.CustomCaptureAudioPlugin +import io.agora.agora_rtc_engine_example.custom_capture_audio.CustomCaptureAudio import io.agora.rtc.base.RtcEnginePlugin import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine @@ -10,25 +10,25 @@ import java.lang.ref.WeakReference class MainActivity: FlutterActivity() { - private val customAudioPlugin = CustomAudioPlugin(WeakReference(this)) + private val customCaptureAudioPlugin = CustomCaptureAudioPlugin(WeakReference(this)) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // Register the `CustomAudioPlugin` to interect with the `RtcEngine` - RtcEnginePlugin.register(customAudioPlugin) + // Register the `CustomCaptureAudioPlugin` to interect with the `RtcEngine` + RtcEnginePlugin.register(customCaptureAudioPlugin) } override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) - // The `CustomAudioSource` is generated by [pigeon](https://pub.dev/packages/pigeon), you can see the + // The `CustomCaptureAudioPlugin` is generated by [pigeon](https://pub.dev/packages/pigeon), you can see the // the definiton on `example/lib/examples/advanced/custom_audio/custom_audio_source_api.dart` - CustomAudioSource.CustomAudioSourceApi.setup(flutterEngine.dartExecutor, customAudioPlugin) + CustomCaptureAudio.CustomCaptureAudioApi.setup(flutterEngine.dartExecutor, customCaptureAudioPlugin) } override fun onDestroy() { super.onDestroy() - RtcEnginePlugin.unregister(customAudioPlugin) + RtcEnginePlugin.unregister(customCaptureAudioPlugin) } } diff --git a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/AudioRecordService.java b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/AudioRecordService.java similarity index 98% rename from example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/AudioRecordService.java rename to example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/AudioRecordService.java index 3c3eb63c8..2731cb044 100644 --- a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/AudioRecordService.java +++ b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/AudioRecordService.java @@ -1,4 +1,4 @@ -package io.agora.agora_rtc_engine_example.custom_audio_source; +package io.agora.agora_rtc_engine_example.custom_capture_audio; import android.app.Notification; import android.app.NotificationChannel; diff --git a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/AudioStatus.java b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/AudioStatus.java similarity index 52% rename from example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/AudioStatus.java rename to example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/AudioStatus.java index 585f76699..bd345b059 100644 --- a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/AudioStatus.java +++ b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/AudioStatus.java @@ -1,4 +1,4 @@ -package io.agora.agora_rtc_engine_example.custom_audio_source; +package io.agora.agora_rtc_engine_example.custom_capture_audio; public enum AudioStatus { INITIALISING, diff --git a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/CustomAudioSource.java b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/CustomCaptureAudio.java similarity index 84% rename from example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/CustomAudioSource.java rename to example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/CustomCaptureAudio.java index 7187e865b..89faa9b12 100644 --- a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/CustomAudioSource.java +++ b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/CustomCaptureAudio.java @@ -1,7 +1,7 @@ -// Autogenerated from Pigeon (v1.0.7), do not edit directly. +// Autogenerated from Pigeon (v1.0.8), do not edit directly. // See also: https://pub.dev/packages/pigeon -package io.agora.agora_rtc_engine_example.custom_audio_source; +package io.agora.agora_rtc_engine_example.custom_capture_audio; import io.flutter.plugin.common.BasicMessageChannel; import io.flutter.plugin.common.BinaryMessenger; @@ -17,29 +17,29 @@ /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) -public class CustomAudioSource { - private static class CustomAudioSourceApiCodec extends StandardMessageCodec { - public static final CustomAudioSourceApiCodec INSTANCE = new CustomAudioSourceApiCodec(); - private CustomAudioSourceApiCodec() {} +public class CustomCaptureAudio { + private static class CustomCaptureAudioApiCodec extends StandardMessageCodec { + public static final CustomCaptureAudioApiCodec INSTANCE = new CustomCaptureAudioApiCodec(); + private CustomCaptureAudioApiCodec() {} } /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ - public interface CustomAudioSourceApi { + public interface CustomCaptureAudioApi { void setExternalAudioSource(Boolean enabled, Long sampleRate, Long channels); void setExternalAudioSourceVolume(Long sourcePos, Long volume); void startAudioRecord(Long sampleRate, Long channels); void stopAudioRecord(); - /** The codec used by CustomAudioSourceApi. */ + /** The codec used by CustomCaptureAudioApi. */ static MessageCodec getCodec() { - return CustomAudioSourceApiCodec.INSTANCE; + return CustomCaptureAudioApiCodec.INSTANCE; } - /** Sets up an instance of `CustomAudioSourceApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, CustomAudioSourceApi api) { + /** Sets up an instance of `CustomCaptureAudioApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, CustomCaptureAudioApi api) { { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomAudioSourceApi.setExternalAudioSource", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomCaptureAudioApi.setExternalAudioSource", getCodec()); if (api != null) { channel.setMessageHandler((message, reply) -> { Map wrapped = new HashMap<>(); @@ -71,7 +71,7 @@ static void setup(BinaryMessenger binaryMessenger, CustomAudioSourceApi api) { } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomAudioSourceApi.setExternalAudioSourceVolume", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomCaptureAudioApi.setExternalAudioSourceVolume", getCodec()); if (api != null) { channel.setMessageHandler((message, reply) -> { Map wrapped = new HashMap<>(); @@ -99,7 +99,7 @@ static void setup(BinaryMessenger binaryMessenger, CustomAudioSourceApi api) { } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomAudioSourceApi.startAudioRecord", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomCaptureAudioApi.startAudioRecord", getCodec()); if (api != null) { channel.setMessageHandler((message, reply) -> { Map wrapped = new HashMap<>(); @@ -127,7 +127,7 @@ static void setup(BinaryMessenger binaryMessenger, CustomAudioSourceApi api) { } { BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomAudioSourceApi.stopAudioRecord", getCodec()); + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CustomCaptureAudioApi.stopAudioRecord", getCodec()); if (api != null) { channel.setMessageHandler((message, reply) -> { Map wrapped = new HashMap<>(); diff --git a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/CustomAudioPlugin.kt b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/CustomCaptureAudioPlugin.kt similarity index 91% rename from example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/CustomAudioPlugin.kt rename to example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/CustomCaptureAudioPlugin.kt index 04e2a9997..ead56b6ea 100644 --- a/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_audio_source/CustomAudioPlugin.kt +++ b/example/android/app/src/main/kotlin/io/agora/agora_rtc_engine_example/custom_capture_audio/CustomCaptureAudioPlugin.kt @@ -1,4 +1,4 @@ -package io.agora.agora_rtc_engine_example.custom_audio_source +package io.agora.agora_rtc_engine_example.custom_capture_audio import android.app.Activity import android.content.BroadcastReceiver @@ -11,9 +11,9 @@ import io.agora.rtc.RtcEngine import io.agora.rtc.base.RtcEnginePlugin import java.lang.ref.WeakReference -class CustomAudioPlugin(private val activity: WeakReference) : +class CustomCaptureAudioPlugin(private val activity: WeakReference) : RtcEnginePlugin, - CustomAudioSource.CustomAudioSourceApi { + CustomCaptureAudio.CustomCaptureAudioApi { private var rtcEngine: RtcEngine? = null diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 192e165d6..de127bc17 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -11,11 +11,11 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 5E9D826C4B1F29399F8A7742 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28CEF344452C45083E367B0C /* Pods_Runner.framework */; }; 6D48449932DC5CD432350C00 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43CA39DDEDE840FF44D1F750 /* Pods_RunnerTests.framework */; }; - 7110181B2727DA66003816A9 /* CustomAudioSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 7110181A2727DA66003816A9 /* CustomAudioSource.m */; }; 711018242727DE9A003816A9 /* ExternalAudio.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7110181E2727DE9A003816A9 /* ExternalAudio.mm */; }; 711018252727DE9A003816A9 /* AudioWriteToFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 711018222727DE9A003816A9 /* AudioWriteToFile.m */; }; 711018262727DE9A003816A9 /* AudioController.m in Sources */ = {isa = PBXBuildFile; fileRef = 711018232727DE9A003816A9 /* AudioController.m */; }; - 711018282727E05A003816A9 /* CustmoAudioSourcePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711018272727E05A003816A9 /* CustmoAudioSourcePlugin.swift */; }; + 711018282727E05A003816A9 /* CustomCaptureAudioPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711018272727E05A003816A9 /* CustomCaptureAudioPlugin.swift */; }; + 715C838B273012A30080FA35 /* CustomCaptureAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = 715C8389273012A30080FA35 /* CustomCaptureAudio.m */; }; 71E2A2A22722C75F00C7B7BC /* OCTestRtcEnginePlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E2A29E2722C75F00C7B7BC /* OCTestRtcEnginePlugin.m */; }; 71E2A2A32722C75F00C7B7BC /* FakeAgoraRtcEngineKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71E2A2A02722C75F00C7B7BC /* FakeAgoraRtcEngineKit.swift */; }; 71E2A2A52722C80800C7B7BC /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71E2A2A42722C80800C7B7BC /* RunnerTests.swift */; }; @@ -56,8 +56,6 @@ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 43CA39DDEDE840FF44D1F750 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 592BF9E1006B18851CF75B6B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 711018192727DA66003816A9 /* CustomAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomAudioSource.h; sourceTree = ""; }; - 7110181A2727DA66003816A9 /* CustomAudioSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomAudioSource.m; sourceTree = ""; }; 7110181D2727DE9A003816A9 /* AudioOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioOptions.h; sourceTree = ""; }; 7110181E2727DE9A003816A9 /* ExternalAudio.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ExternalAudio.mm; sourceTree = ""; }; 7110181F2727DE9A003816A9 /* ExternalAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExternalAudio.h; sourceTree = ""; }; @@ -65,7 +63,9 @@ 711018212727DE9A003816A9 /* AudioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioController.h; sourceTree = ""; }; 711018222727DE9A003816A9 /* AudioWriteToFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioWriteToFile.m; sourceTree = ""; }; 711018232727DE9A003816A9 /* AudioController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioController.m; sourceTree = ""; }; - 711018272727E05A003816A9 /* CustmoAudioSourcePlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustmoAudioSourcePlugin.swift; sourceTree = ""; }; + 711018272727E05A003816A9 /* CustomCaptureAudioPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomCaptureAudioPlugin.swift; sourceTree = ""; }; + 715C8389273012A30080FA35 /* CustomCaptureAudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomCaptureAudio.m; sourceTree = ""; }; + 715C838A273012A30080FA35 /* CustomCaptureAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomCaptureAudio.h; sourceTree = ""; }; 71E2A2932722C73000C7B7BC /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 71E2A29E2722C75F00C7B7BC /* OCTestRtcEnginePlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCTestRtcEnginePlugin.m; sourceTree = ""; }; 71E2A29F2722C75F00C7B7BC /* OCTestRtcEnginePlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCTestRtcEnginePlugin.h; sourceTree = ""; }; @@ -130,9 +130,11 @@ name = Frameworks; sourceTree = ""; }; - 711018292727FFF1003816A9 /* CustomAudioSource */ = { + 711018292727FFF1003816A9 /* CustomCaptureAudio */ = { isa = PBXGroup; children = ( + 715C838A273012A30080FA35 /* CustomCaptureAudio.h */, + 715C8389273012A30080FA35 /* CustomCaptureAudio.m */, 711018212727DE9A003816A9 /* AudioController.h */, 711018232727DE9A003816A9 /* AudioController.m */, 7110181D2727DE9A003816A9 /* AudioOptions.h */, @@ -140,11 +142,9 @@ 711018222727DE9A003816A9 /* AudioWriteToFile.m */, 7110181F2727DE9A003816A9 /* ExternalAudio.h */, 7110181E2727DE9A003816A9 /* ExternalAudio.mm */, - 711018192727DA66003816A9 /* CustomAudioSource.h */, - 7110181A2727DA66003816A9 /* CustomAudioSource.m */, - 711018272727E05A003816A9 /* CustmoAudioSourcePlugin.swift */, + 711018272727E05A003816A9 /* CustomCaptureAudioPlugin.swift */, ); - path = CustomAudioSource; + path = CustomCaptureAudio; sourceTree = ""; }; 71E2A2942722C73000C7B7BC /* RunnerTests */ = { @@ -194,7 +194,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - 711018292727FFF1003816A9 /* CustomAudioSource */, + 711018292727FFF1003816A9 /* CustomCaptureAudio */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -427,11 +427,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 715C838B273012A30080FA35 /* CustomCaptureAudio.m in Sources */, 711018262727DE9A003816A9 /* AudioController.m in Sources */, - 7110181B2727DA66003816A9 /* CustomAudioSource.m in Sources */, 711018252727DE9A003816A9 /* AudioWriteToFile.m in Sources */, 711018242727DE9A003816A9 /* ExternalAudio.mm in Sources */, - 711018282727E05A003816A9 /* CustmoAudioSourcePlugin.swift in Sources */, + 711018282727E05A003816A9 /* CustomCaptureAudioPlugin.swift in Sources */, 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, ); diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift index 488acd686..6bc4c09ca 100644 --- a/example/ios/Runner/AppDelegate.swift +++ b/example/ios/Runner/AppDelegate.swift @@ -4,7 +4,7 @@ import Flutter @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { - private var customAudioSourcePlugin: CustomAudioPlugin! + private var customCaptureAudioPlugin: CustomCaptureAudioPlugin! override func application( _ application: UIApplication, @@ -12,15 +12,15 @@ import Flutter ) -> Bool { let controller : FlutterViewController = window?.rootViewController as! FlutterViewController - customAudioSourcePlugin = CustomAudioPlugin() + customCaptureAudioPlugin = CustomCaptureAudioPlugin() // The `CustomAudioSourceApiSetup` is generated by [pigeon](https://pub.dev/packages/pigeon), you can see the - // the definiton on `example/lib/examples/advanced/custom_audio/custom_audio_source_api.dart` - CustomAudioSourceApiSetup( - controller.binaryMessenger, customAudioSourcePlugin) + // the definiton on `example/lib/examples/advanced/custom_capture_audio/custom_capture_audio_api.dart` + CustomCaptureAudioApiSetup( + controller.binaryMessenger, customCaptureAudioPlugin) // Register the `CustomAudioPlugin` to interect with the `AgoraRtcEngineKit` - RtcEnginePluginRegistrant.register(customAudioSourcePlugin) + RtcEnginePluginRegistrant.register(customCaptureAudioPlugin) GeneratedPluginRegistrant.register(with: self) @@ -28,6 +28,6 @@ import Flutter } override func applicationWillTerminate(_ application: UIApplication) { - RtcEnginePluginRegistrant.unregister(customAudioSourcePlugin) + RtcEnginePluginRegistrant.unregister(customCaptureAudioPlugin) } } diff --git a/example/ios/Runner/CustomAudioSource/AudioController.h b/example/ios/Runner/CustomCaptureAudio/AudioController.h similarity index 100% rename from example/ios/Runner/CustomAudioSource/AudioController.h rename to example/ios/Runner/CustomCaptureAudio/AudioController.h diff --git a/example/ios/Runner/CustomAudioSource/AudioController.m b/example/ios/Runner/CustomCaptureAudio/AudioController.m similarity index 100% rename from example/ios/Runner/CustomAudioSource/AudioController.m rename to example/ios/Runner/CustomCaptureAudio/AudioController.m diff --git a/example/ios/Runner/CustomAudioSource/AudioOptions.h b/example/ios/Runner/CustomCaptureAudio/AudioOptions.h similarity index 100% rename from example/ios/Runner/CustomAudioSource/AudioOptions.h rename to example/ios/Runner/CustomCaptureAudio/AudioOptions.h diff --git a/example/ios/Runner/CustomAudioSource/AudioWriteToFile.h b/example/ios/Runner/CustomCaptureAudio/AudioWriteToFile.h similarity index 100% rename from example/ios/Runner/CustomAudioSource/AudioWriteToFile.h rename to example/ios/Runner/CustomCaptureAudio/AudioWriteToFile.h diff --git a/example/ios/Runner/CustomAudioSource/AudioWriteToFile.m b/example/ios/Runner/CustomCaptureAudio/AudioWriteToFile.m similarity index 100% rename from example/ios/Runner/CustomAudioSource/AudioWriteToFile.m rename to example/ios/Runner/CustomCaptureAudio/AudioWriteToFile.m diff --git a/example/ios/Runner/CustomAudioSource/CustomAudioSource.h b/example/ios/Runner/CustomCaptureAudio/CustomCaptureAudio.h similarity index 69% rename from example/ios/Runner/CustomAudioSource/CustomAudioSource.h rename to example/ios/Runner/CustomCaptureAudio/CustomCaptureAudio.h index 100e08867..7c754bc05 100644 --- a/example/ios/Runner/CustomAudioSource/CustomAudioSource.h +++ b/example/ios/Runner/CustomCaptureAudio/CustomCaptureAudio.h @@ -1,4 +1,4 @@ -// Autogenerated from Pigeon (v1.0.7), do not edit directly. +// Autogenerated from Pigeon (v1.0.8), do not edit directly. // See also: https://pub.dev/packages/pigeon #import @protocol FlutterBinaryMessenger; @@ -9,16 +9,16 @@ NS_ASSUME_NONNULL_BEGIN -/// The codec used by CustomAudioSourceApi. -NSObject *CustomAudioSourceApiGetCodec(void); +/// The codec used by CustomCaptureAudioApi. +NSObject *CustomCaptureAudioApiGetCodec(void); -@protocol CustomAudioSourceApi +@protocol CustomCaptureAudioApi - (void)setExternalAudioSourceEnabled:(NSNumber *)enabled sampleRate:(NSNumber *)sampleRate channels:(NSNumber *)channels error:(FlutterError *_Nullable *_Nonnull)error; - (void)setExternalAudioSourceVolumeSourcePos:(NSNumber *)sourcePos volume:(NSNumber *)volume error:(FlutterError *_Nullable *_Nonnull)error; - (void)startAudioRecordSampleRate:(NSNumber *)sampleRate channels:(NSNumber *)channels error:(FlutterError *_Nullable *_Nonnull)error; - (void)stopAudioRecordWithError:(FlutterError *_Nullable *_Nonnull)error; @end -extern void CustomAudioSourceApiSetup(id binaryMessenger, NSObject *_Nullable api); +extern void CustomCaptureAudioApiSetup(id binaryMessenger, NSObject *_Nullable api); NS_ASSUME_NONNULL_END diff --git a/example/ios/Runner/CustomAudioSource/CustomAudioSource.m b/example/ios/Runner/CustomCaptureAudio/CustomCaptureAudio.m similarity index 62% rename from example/ios/Runner/CustomAudioSource/CustomAudioSource.m rename to example/ios/Runner/CustomCaptureAudio/CustomCaptureAudio.m index 573fd6e9e..8f4f62ec1 100644 --- a/example/ios/Runner/CustomAudioSource/CustomAudioSource.m +++ b/example/ios/Runner/CustomCaptureAudio/CustomCaptureAudio.m @@ -1,6 +1,6 @@ -// Autogenerated from Pigeon (v1.0.7), do not edit directly. +// Autogenerated from Pigeon (v1.0.8), do not edit directly. // See also: https://pub.dev/packages/pigeon -#import "CustomAudioSource.h" +#import "CustomCaptureAudio.h" #import #if !__has_feature(objc_arc) @@ -23,47 +23,47 @@ } -@interface CustomAudioSourceApiCodecReader : FlutterStandardReader +@interface CustomCaptureAudioApiCodecReader : FlutterStandardReader @end -@implementation CustomAudioSourceApiCodecReader +@implementation CustomCaptureAudioApiCodecReader @end -@interface CustomAudioSourceApiCodecWriter : FlutterStandardWriter +@interface CustomCaptureAudioApiCodecWriter : FlutterStandardWriter @end -@implementation CustomAudioSourceApiCodecWriter +@implementation CustomCaptureAudioApiCodecWriter @end -@interface CustomAudioSourceApiCodecReaderWriter : FlutterStandardReaderWriter +@interface CustomCaptureAudioApiCodecReaderWriter : FlutterStandardReaderWriter @end -@implementation CustomAudioSourceApiCodecReaderWriter +@implementation CustomCaptureAudioApiCodecReaderWriter - (FlutterStandardWriter *)writerWithData:(NSMutableData *)data { - return [[CustomAudioSourceApiCodecWriter alloc] initWithData:data]; + return [[CustomCaptureAudioApiCodecWriter alloc] initWithData:data]; } - (FlutterStandardReader *)readerWithData:(NSData *)data { - return [[CustomAudioSourceApiCodecReader alloc] initWithData:data]; + return [[CustomCaptureAudioApiCodecReader alloc] initWithData:data]; } @end -NSObject *CustomAudioSourceApiGetCodec() { +NSObject *CustomCaptureAudioApiGetCodec() { static dispatch_once_t s_pred = 0; static FlutterStandardMessageCodec *s_sharedObject = nil; dispatch_once(&s_pred, ^{ - CustomAudioSourceApiCodecReaderWriter *readerWriter = [[CustomAudioSourceApiCodecReaderWriter alloc] init]; + CustomCaptureAudioApiCodecReaderWriter *readerWriter = [[CustomCaptureAudioApiCodecReaderWriter alloc] init]; s_sharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; }); return s_sharedObject; } -void CustomAudioSourceApiSetup(id binaryMessenger, NSObject *api) { +void CustomCaptureAudioApiSetup(id binaryMessenger, NSObject *api) { { FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.CustomAudioSourceApi.setExternalAudioSource" + messageChannelWithName:@"dev.flutter.pigeon.CustomCaptureAudioApi.setExternalAudioSource" binaryMessenger:binaryMessenger - codec:CustomAudioSourceApiGetCodec()]; + codec:CustomCaptureAudioApiGetCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(setExternalAudioSourceEnabled:sampleRate:channels:error:)], @"CustomAudioSourceApi api (%@) doesn't respond to @selector(setExternalAudioSourceEnabled:sampleRate:channels:error:)", api); + NSCAssert([api respondsToSelector:@selector(setExternalAudioSourceEnabled:sampleRate:channels:error:)], @"CustomCaptureAudioApi api (%@) doesn't respond to @selector(setExternalAudioSourceEnabled:sampleRate:channels:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSNumber *arg_enabled = args[0]; @@ -81,11 +81,11 @@ void CustomAudioSourceApiSetup(id binaryMessenger, NSObj { FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.CustomAudioSourceApi.setExternalAudioSourceVolume" + messageChannelWithName:@"dev.flutter.pigeon.CustomCaptureAudioApi.setExternalAudioSourceVolume" binaryMessenger:binaryMessenger - codec:CustomAudioSourceApiGetCodec()]; + codec:CustomCaptureAudioApiGetCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(setExternalAudioSourceVolumeSourcePos:volume:error:)], @"CustomAudioSourceApi api (%@) doesn't respond to @selector(setExternalAudioSourceVolumeSourcePos:volume:error:)", api); + NSCAssert([api respondsToSelector:@selector(setExternalAudioSourceVolumeSourcePos:volume:error:)], @"CustomCaptureAudioApi api (%@) doesn't respond to @selector(setExternalAudioSourceVolumeSourcePos:volume:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSNumber *arg_sourcePos = args[0]; @@ -102,11 +102,11 @@ void CustomAudioSourceApiSetup(id binaryMessenger, NSObj { FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.CustomAudioSourceApi.startAudioRecord" + messageChannelWithName:@"dev.flutter.pigeon.CustomCaptureAudioApi.startAudioRecord" binaryMessenger:binaryMessenger - codec:CustomAudioSourceApiGetCodec()]; + codec:CustomCaptureAudioApiGetCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(startAudioRecordSampleRate:channels:error:)], @"CustomAudioSourceApi api (%@) doesn't respond to @selector(startAudioRecordSampleRate:channels:error:)", api); + NSCAssert([api respondsToSelector:@selector(startAudioRecordSampleRate:channels:error:)], @"CustomCaptureAudioApi api (%@) doesn't respond to @selector(startAudioRecordSampleRate:channels:error:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; NSNumber *arg_sampleRate = args[0]; @@ -123,11 +123,11 @@ void CustomAudioSourceApiSetup(id binaryMessenger, NSObj { FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.CustomAudioSourceApi.stopAudioRecord" + messageChannelWithName:@"dev.flutter.pigeon.CustomCaptureAudioApi.stopAudioRecord" binaryMessenger:binaryMessenger - codec:CustomAudioSourceApiGetCodec()]; + codec:CustomCaptureAudioApiGetCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(stopAudioRecordWithError:)], @"CustomAudioSourceApi api (%@) doesn't respond to @selector(stopAudioRecordWithError:)", api); + NSCAssert([api respondsToSelector:@selector(stopAudioRecordWithError:)], @"CustomCaptureAudioApi api (%@) doesn't respond to @selector(stopAudioRecordWithError:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { FlutterError *error; [api stopAudioRecordWithError:&error]; diff --git a/example/ios/Runner/CustomAudioSource/CustmoAudioSourcePlugin.swift b/example/ios/Runner/CustomCaptureAudio/CustomCaptureAudioPlugin.swift similarity index 95% rename from example/ios/Runner/CustomAudioSource/CustmoAudioSourcePlugin.swift rename to example/ios/Runner/CustomCaptureAudio/CustomCaptureAudioPlugin.swift index 092eeffc0..aa17b14fa 100644 --- a/example/ios/Runner/CustomAudioSource/CustmoAudioSourcePlugin.swift +++ b/example/ios/Runner/CustomCaptureAudio/CustomCaptureAudioPlugin.swift @@ -1,7 +1,7 @@ import Foundation import agora_rtc_engine -class CustomAudioPlugin : NSObject, RtcEnginePlugin, CustomAudioSourceApi { +class CustomCaptureAudioPlugin : NSObject, RtcEnginePlugin, CustomCaptureAudioApi { private var agoraRtcEngineKit: AgoraRtcEngineKit? = nil diff --git a/example/ios/Runner/CustomAudioSource/ExternalAudio.h b/example/ios/Runner/CustomCaptureAudio/ExternalAudio.h similarity index 100% rename from example/ios/Runner/CustomAudioSource/ExternalAudio.h rename to example/ios/Runner/CustomCaptureAudio/ExternalAudio.h diff --git a/example/ios/Runner/CustomAudioSource/ExternalAudio.mm b/example/ios/Runner/CustomCaptureAudio/ExternalAudio.mm similarity index 100% rename from example/ios/Runner/CustomAudioSource/ExternalAudio.mm rename to example/ios/Runner/CustomCaptureAudio/ExternalAudio.mm diff --git a/example/ios/Runner/Runner-Bridging-Header.h b/example/ios/Runner/Runner-Bridging-Header.h index 4127e4215..ebe17a1b2 100644 --- a/example/ios/Runner/Runner-Bridging-Header.h +++ b/example/ios/Runner/Runner-Bridging-Header.h @@ -7,7 +7,7 @@ #import #endif -#import "CustomAudioSource.h" +#import "CustomCaptureAudio.h" #import "ExternalAudio.h" diff --git a/example/lib/examples/advanced/media_channel_relay.dart b/example/lib/examples/advanced/channel_media_relay/media_channel_relay.dart similarity index 100% rename from example/lib/examples/advanced/media_channel_relay.dart rename to example/lib/examples/advanced/channel_media_relay/media_channel_relay.dart diff --git a/example/lib/examples/advanced/custom_audio/custom_audio_source.dart b/example/lib/examples/advanced/custom_capture_audio/custom_capture_audio.dart similarity index 96% rename from example/lib/examples/advanced/custom_audio/custom_audio_source.dart rename to example/lib/examples/advanced/custom_capture_audio/custom_capture_audio.dart index 0c76cb476..b8abc8974 100644 --- a/example/lib/examples/advanced/custom_audio/custom_audio_source.dart +++ b/example/lib/examples/advanced/custom_capture_audio/custom_capture_audio.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'custom_audio_source_api.generated.dart'; +import 'custom_capture_audio_api.generated.dart'; const int _defaultSampleRate = 16000; const int _defaultChannelCount = 1; @@ -42,14 +42,14 @@ extension AudioExternalSourcePosExt on AudioExternalSourcePos { } } -/// CustomAudioSource Example -class CustomAudioSource extends StatefulWidget { +/// CustomCaptureAudio Example +class CustomCaptureAudio extends StatefulWidget { @override - _CustomAudioSourceState createState() => _CustomAudioSourceState(); + _CustomCaptureAudioState createState() => _CustomCaptureAudioState(); } -class _CustomAudioSourceState extends State { - final CustomAudioSourceApi _api = CustomAudioSourceApi(); +class _CustomCaptureAudioState extends State { + final CustomCaptureAudioApi _api = CustomCaptureAudioApi(); bool _isJoined = false; bool _isMute = false; double _playoutSliderValue = 100.0; diff --git a/example/lib/examples/advanced/custom_audio/custom_audio_source_api.dart b/example/lib/examples/advanced/custom_capture_audio/custom_capture_audio_api.dart similarity index 87% rename from example/lib/examples/advanced/custom_audio/custom_audio_source_api.dart rename to example/lib/examples/advanced/custom_capture_audio/custom_capture_audio_api.dart index 7f97a2b76..ed1efe4b0 100644 --- a/example/lib/examples/advanced/custom_audio/custom_audio_source_api.dart +++ b/example/lib/examples/advanced/custom_capture_audio/custom_capture_audio_api.dart @@ -1,8 +1,8 @@ import 'package:pigeon/pigeon.dart'; -/// CustomAudioSource API definition +/// CustomCaptureAudio API definition @HostApi() -abstract class CustomAudioSourceApi { +abstract class CustomCaptureAudioApi { /// A binding function for setExternalAudioSource on Android/iOS void setExternalAudioSource(bool enabled, int sampleRate, int channels); diff --git a/example/lib/examples/advanced/custom_audio/custom_audio_source_api.generated.dart b/example/lib/examples/advanced/custom_capture_audio/custom_capture_audio_api.generated.dart similarity index 81% rename from example/lib/examples/advanced/custom_audio/custom_audio_source_api.generated.dart rename to example/lib/examples/advanced/custom_capture_audio/custom_capture_audio_api.generated.dart index 7a710a1d3..edb647ea5 100644 --- a/example/lib/examples/advanced/custom_audio/custom_audio_source_api.generated.dart +++ b/example/lib/examples/advanced/custom_capture_audio/custom_capture_audio_api.generated.dart @@ -1,4 +1,4 @@ -// Autogenerated from Pigeon (v1.0.7), do not edit directly. +// Autogenerated from Pigeon (v1.0.8), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name // @dart = 2.12 @@ -8,23 +8,23 @@ import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; import 'package:flutter/services.dart'; -class _CustomAudioSourceApiCodec extends StandardMessageCodec { - const _CustomAudioSourceApiCodec(); +class _CustomCaptureAudioApiCodec extends StandardMessageCodec { + const _CustomCaptureAudioApiCodec(); } -class CustomAudioSourceApi { - /// Constructor for [CustomAudioSourceApi]. The [binaryMessenger] named argument is +class CustomCaptureAudioApi { + /// Constructor for [CustomCaptureAudioApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - CustomAudioSourceApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + CustomCaptureAudioApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = _CustomAudioSourceApiCodec(); + static const MessageCodec codec = _CustomCaptureAudioApiCodec(); Future setExternalAudioSource(bool arg_enabled, int arg_sampleRate, int arg_channels) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CustomAudioSourceApi.setExternalAudioSource', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CustomCaptureAudioApi.setExternalAudioSource', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_enabled, arg_sampleRate, arg_channels]) as Map?; if (replyMap == null) { @@ -47,7 +47,7 @@ class CustomAudioSourceApi { Future setExternalAudioSourceVolume(int arg_sourcePos, int arg_volume) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CustomAudioSourceApi.setExternalAudioSourceVolume', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CustomCaptureAudioApi.setExternalAudioSourceVolume', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_sourcePos, arg_volume]) as Map?; if (replyMap == null) { @@ -70,7 +70,7 @@ class CustomAudioSourceApi { Future startAudioRecord(int arg_sampleRate, int arg_channels) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CustomAudioSourceApi.startAudioRecord', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CustomCaptureAudioApi.startAudioRecord', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send([arg_sampleRate, arg_channels]) as Map?; if (replyMap == null) { @@ -93,7 +93,7 @@ class CustomAudioSourceApi { Future stopAudioRecord() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.CustomAudioSourceApi.stopAudioRecord', codec, binaryMessenger: _binaryMessenger); + 'dev.flutter.pigeon.CustomCaptureAudioApi.stopAudioRecord', codec, binaryMessenger: _binaryMessenger); final Map? replyMap = await channel.send(null) as Map?; if (replyMap == null) { diff --git a/example/lib/examples/advanced/index.dart b/example/lib/examples/advanced/index.dart index 555b8a079..acffd1ed3 100644 --- a/example/lib/examples/advanced/index.dart +++ b/example/lib/examples/advanced/index.dart @@ -1,23 +1,22 @@ -import 'package:agora_rtc_engine_example/examples/advanced/create_stream_data.dart'; -import 'package:agora_rtc_engine_example/examples/advanced/custom_audio/custom_audio_source.dart'; -import 'package:agora_rtc_engine_example/examples/advanced/live_streaming.dart'; -import 'package:agora_rtc_engine_example/examples/advanced/media_channel_relay.dart'; -import 'package:agora_rtc_engine_example/examples/advanced/multi_channel.dart'; -import 'package:agora_rtc_engine_example/examples/advanced/voice_change.dart'; +import 'package:agora_rtc_engine_example/examples/advanced/stream_message/stream_message.dart'; +import 'package:agora_rtc_engine_example/examples/advanced/channel_media_relay/media_channel_relay.dart'; +import 'package:agora_rtc_engine_example/examples/advanced/join_multiple_channel/join_multi_channel.dart'; +import 'package:agora_rtc_engine_example/examples/advanced/voice_changer/voice_changer.dart'; + +import 'custom_capture_audio/custom_capture_audio.dart'; /// Data source for advanced examples final Advanced = [ {'name': 'Advanced'}, - {'name': 'MultiChannel', 'widget': MultiChannel()}, - {'name': 'LiveStreaming', 'widget': LiveStreaming()}, + {'name': 'JoinMultiChannel', 'widget': JoinMultiChannel()}, { - 'name': 'CreateStreamData', - 'widget': CreateStreamData(), + 'name': 'StreamMessage', + 'widget': StreamMessage(), }, { 'name': 'MediaChannelRelay', 'widget': MediaChannelRelay(), }, - {'name': 'VoiceChange', 'widget': VoiceChange()}, - {'name': 'CustomAudioSource', 'widget': CustomAudioSource()}, + {'name': 'VoiceChanger', 'widget': VoiceChanger()}, + {'name': 'CustomCaptureAudio', 'widget': CustomCaptureAudio()}, ]; diff --git a/example/lib/examples/advanced/multi_channel.dart b/example/lib/examples/advanced/join_multiple_channel/join_multi_channel.dart similarity index 98% rename from example/lib/examples/advanced/multi_channel.dart rename to example/lib/examples/advanced/join_multiple_channel/join_multi_channel.dart index a3bd31c07..5e5f2fd28 100644 --- a/example/lib/examples/advanced/multi_channel.dart +++ b/example/lib/examples/advanced/join_multiple_channel/join_multi_channel.dart @@ -13,13 +13,13 @@ import 'package:permission_handler/permission_handler.dart'; const _channelId0 = 'channel0'; const _channelId1 = 'channel1'; -/// MultiChannel Example -class MultiChannel extends StatefulWidget { +/// JoinMultiChannel Example +class JoinMultiChannel extends StatefulWidget { @override State createState() => _State(); } -class _State extends State { +class _State extends State { late final RtcEngine _engine; late final RtcChannel _channel0, _channel1; String? renderChannelId; diff --git a/example/lib/examples/advanced/live_streaming.dart b/example/lib/examples/advanced/live_streaming.dart deleted file mode 100644 index b109dc364..000000000 --- a/example/lib/examples/advanced/live_streaming.dart +++ /dev/null @@ -1,237 +0,0 @@ -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_engine_example/config/agora.config.dart' as config; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:permission_handler/permission_handler.dart'; - -/// LiveStreaming Example -class LiveStreaming extends StatefulWidget { - @override - State createState() => _State(); -} - -class _State extends State { - late final RtcEngine _engine; - bool isJoined = false; - ClientRole role = ClientRole.Audience; - int? remoteUid; - bool isLowAudio = true; - - @override - void initState() { - super.initState(); - SchedulerBinding.instance?.addPostFrameCallback((timeStamp) { - _showMyDialog(); - }); - } - - @override - void dispose() { - super.dispose(); - _engine.destroy(); - } - - Future _showMyDialog() async { - return showDialog( - context: context, - barrierDismissible: false, // user must tap button! - builder: (BuildContext context) { - return AlertDialog( - title: Text('AlertDialog Title'), - content: SingleChildScrollView( - child: ListBody( - children: [Text('Please choose role')], - ), - ), - actions: [ - TextButton( - child: Text('Broadcaster'), - onPressed: () { - this.setState(() { - role = ClientRole.Broadcaster; - Navigator.of(context).pop(); - }); - }, - ), - TextButton( - child: Text('Audience'), - onPressed: () { - this.setState(() { - role = ClientRole.Audience; - Navigator.of(context).pop(); - }); - }, - ), - ], - ); - }, - ); - } - - _initEngine() async { - if (defaultTargetPlatform == TargetPlatform.android) { - await Permission.microphone.request(); - } - _engine = await RtcEngine.createWithContext(RtcEngineContext(config.appId)); - - this._addListener(); - - // enable video module and set up video encoding configs - await _engine.enableVideo(); - - // make this room live broadcasting room - await _engine.setChannelProfile(ChannelProfile.LiveBroadcasting); - await this._updateClientRole(role); - - // Set audio route to speaker - await _engine.setDefaultAudioRoutetoSpeakerphone(true); - - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - await _engine.joinChannel(config.token, config.channelId, null, 0, null); - } - - _addListener() { - _engine.setEventHandler(RtcEngineEventHandler(warning: (warningCode) { - log('Warning ${warningCode}'); - }, error: (errorCode) { - log('Warning ${errorCode}'); - }, joinChannelSuccess: (channel, uid, elapsed) { - log('joinChannelSuccess ${channel} ${uid} ${elapsed}'); - setState(() { - isJoined = true; - }); - }, userJoined: (uid, elapsed) { - log('userJoined $uid $elapsed'); - this.setState(() { - remoteUid = uid; - }); - }, userOffline: (uid, reason) { - log('userOffline $uid $reason'); - this.setState(() { - remoteUid = null; - }); - })); - } - - _updateClientRole(ClientRole role) async { - var option; - if (role == ClientRole.Broadcaster) { - await _engine.setVideoEncoderConfiguration(VideoEncoderConfiguration( - dimensions: VideoDimensions(width: 640, height: 360), - frameRate: VideoFrameRate.Fps30, - orientationMode: VideoOutputOrientationMode.Adaptative)); - // enable camera/mic, this will bring up permission dialog for first time - await _engine.enableLocalAudio(true); - await _engine.enableLocalVideo(true); - } else { - // You have to provide client role options if set to audience - option = ClientRoleOptions( - audienceLatencyLevel: isLowAudio - ? AudienceLatencyLevelType.LowLatency - : AudienceLatencyLevelType.UltraLowLatency); - } - await _engine.setClientRole(role, option); - } - - _onPressToggleRole() { - this.setState(() { - role = role == ClientRole.Audience - ? ClientRole.Broadcaster - : ClientRole.Audience; - _updateClientRole(role); - }); - } - - _onPressToggleLatencyLevel(value) { - this.setState(() { - isLowAudio = !isLowAudio; - _engine.setClientRole( - ClientRole.Audience, - ClientRoleOptions( - audienceLatencyLevel: isLowAudio - ? AudienceLatencyLevelType.LowLatency - : AudienceLatencyLevelType.UltraLowLatency)); - }); - } - - _renderToolBar() { - return Positioned( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ElevatedButton( - child: Text('Toggle Role'), - onPressed: _onPressToggleRole, - ), - Container( - color: Colors.white, - child: Row(mainAxisSize: MainAxisSize.min, children: [ - Text('Toggle Audience Latency Level'), - Switch( - value: isLowAudio, - onChanged: _onPressToggleLatencyLevel, - activeTrackColor: Colors.grey[350], - activeColor: Colors.white, - ), - ]), - ) - ], - ), - left: 10, - bottom: 10, - ); - } - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - Column( - children: [ - Row( - children: [ - if (!isJoined) - Expanded( - flex: 1, - child: ElevatedButton( - onPressed: _initEngine, - child: Text('Join channel'), - ), - ) - ], - ), - if (isJoined) _renderVideo(), - ], - ), - if (isJoined) _renderToolBar(), - ], - ); - } - - _renderVideo() { - return Expanded( - child: Stack( - children: [ - role == ClientRole.Broadcaster - ? RtcLocalView.SurfaceView() - : remoteUid != null - ? RtcRemoteView.SurfaceView( - uid: remoteUid!, - ) - : Container() - ], - ), - ); - } -} diff --git a/example/lib/examples/advanced/create_stream_data.dart b/example/lib/examples/advanced/stream_message/stream_message.dart similarity index 97% rename from example/lib/examples/advanced/create_stream_data.dart rename to example/lib/examples/advanced/stream_message/stream_message.dart index 049fb8366..f828fb0f0 100644 --- a/example/lib/examples/advanced/create_stream_data.dart +++ b/example/lib/examples/advanced/stream_message/stream_message.dart @@ -9,13 +9,13 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; -/// CreateStreamData Example -class CreateStreamData extends StatefulWidget { +/// StreamMessage Example +class StreamMessage extends StatefulWidget { @override State createState() => _State(); } -class _State extends State { +class _State extends State { late final RtcEngine _engine; bool isJoined = false; int? remoteUid; diff --git a/example/lib/examples/config/voice_changer.config.dart b/example/lib/examples/advanced/voice_changer/voice_changer.config.dart similarity index 100% rename from example/lib/examples/config/voice_changer.config.dart rename to example/lib/examples/advanced/voice_changer/voice_changer.config.dart diff --git a/example/lib/examples/advanced/voice_change.dart b/example/lib/examples/advanced/voice_changer/voice_changer.dart similarity index 98% rename from example/lib/examples/advanced/voice_change.dart rename to example/lib/examples/advanced/voice_changer/voice_changer.dart index b51c9cfca..b0cffe006 100644 --- a/example/lib/examples/advanced/voice_change.dart +++ b/example/lib/examples/advanced/voice_changer/voice_changer.dart @@ -2,19 +2,19 @@ import 'dart:developer'; import 'package:agora_rtc_engine/rtc_engine.dart'; import 'package:agora_rtc_engine_example/config/agora.config.dart' as config; -import 'package:agora_rtc_engine_example/examples/config/voice_changer.config.dart'; +import 'package:agora_rtc_engine_example/examples/advanced/voice_changer/voice_changer.config.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; -/// VoiceChange Example -class VoiceChange extends StatefulWidget { +/// VoiceChanger Example +class VoiceChanger extends StatefulWidget { @override State createState() => _State(); } -class _State extends State { +class _State extends State { late final RtcEngine _engine; bool isJoined = false; List remoteUids = []; diff --git a/example/lib/examples/basic/index.dart b/example/lib/examples/basic/index.dart index 3db05577a..ce4fe7658 100644 --- a/example/lib/examples/basic/index.dart +++ b/example/lib/examples/basic/index.dart @@ -1,6 +1,6 @@ -import 'package:agora_rtc_engine_example/examples/basic/join_channel_audio.dart'; -import 'package:agora_rtc_engine_example/examples/basic/join_channel_video.dart'; -import 'package:agora_rtc_engine_example/examples/basic/string_uid.dart'; +import 'package:agora_rtc_engine_example/examples/basic/join_channel_audio/join_channel_audio.dart'; +import 'package:agora_rtc_engine_example/examples/basic/join_channel_video/join_channel_video.dart'; +import 'package:agora_rtc_engine_example/examples/basic/string_uid/string_uid.dart'; /// Data source for basic examples final Basic = [ diff --git a/example/lib/examples/basic/join_channel_audio.dart b/example/lib/examples/basic/join_channel_audio/join_channel_audio.dart similarity index 100% rename from example/lib/examples/basic/join_channel_audio.dart rename to example/lib/examples/basic/join_channel_audio/join_channel_audio.dart diff --git a/example/lib/examples/basic/join_channel_video.dart b/example/lib/examples/basic/join_channel_video/join_channel_video.dart similarity index 100% rename from example/lib/examples/basic/join_channel_video.dart rename to example/lib/examples/basic/join_channel_video/join_channel_video.dart diff --git a/example/lib/examples/basic/string_uid.dart b/example/lib/examples/basic/string_uid/string_uid.dart similarity index 100% rename from example/lib/examples/basic/string_uid.dart rename to example/lib/examples/basic/string_uid/string_uid.dart