腾讯云实时音视频Flutter_音视频解决方案_同尘科技
本文档主要介绍如何使用 TRTC Flutter SDK 实现自定义音频原数据获取。
获取音频原数据
Flutter TRTC SDK 提供两种音频原数据的获取方式:Native 接入。直接使用 Flutter 的 Dart 接口。由于将高频且庞大的音频原数据从 Native 传输到 Dart 层会耗费较多性能, 我们推荐使用 Native 接入,获取音频原数据。
1. Native 接入
具体接入过程和接入效果可使用 demo 体验。1.1 在 Native 层监听音频原数据,获取音频原数据。javaswift
void enableTRTCAudioFrameDelegate() { TRTCCloud.sharedInstance(getApplicationContext()).setAudioFrameListener(new AudioFrameListener()); result.success("");}
void disableTRTCAudioFrameDelegate() { TRTCCloud.sharedInstance(getApplicationContext()).setAudioFrameListener(null); result.success("");}
class AudioFrameListener implements TRTCCloudListener.TRTCAudioFrameListener { @Override public void onCapturedAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { // TODO }
@Override public void onLocalProcessedAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { // TODO }
@Override public void onRemoteUserAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame, String s) { // TODO }
@Override public void onMixedPlayAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { // TODO }
@Override public void onMixedAllAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { // TODO }
@Override public void onVoiceEarMonitorAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { // TODO }}
let listener = AudioFrameProcessListener()func enableTRTCAudioFrameDelegate() { TRTCCloud.sharedInstance().setAudioFrameDelegate(listener) result(nil)}
func disableTRTCAudioFrameDelegate() { TRTCCloud.sharedInstance().setAudioFrameDelegate(nil) result(nil)}
class AudioFrameProcessListener: NSObject, TRTCAudioFrameDelegate { func onCapturedAudioFrame(_ frame: TRTCAudioFrame) { //MARK: TODO } func onLocalProcessedAudioFrame(_ frame: TRTCAudioFrame) { // MARK: TODO }
func onRemoteUserAudioFrame(_ frame: TRTCAudioFrame, userId: String) { // MARK: TODO }
func onMixedAllAudioFrame(_ frame: TRTCAudioFrame) { // MARK: TODO }
func onMixedPlay(_ frame: TRTCAudioFrame) { // MARK: TODO }
func onVoiceEarMonitorAudioFrame(_ frame: TRTCAudioFrame) { // MARK: TODO }}
1.2 使用 Method Channel 实现开始/停止获取音频原数据。步骤一:在 Dart 层实现获取音频原数据的开始/停止接口。
final channel = MethodChannel('TRCT_FLUTTER_EXAMPLE'); void enableAudioFrame() async { await channel.invokeMethod('enableTRTCAudioFrameDelegate'); }
void disableAudioFrame() async { await channel.invokeMethod('disableTRTCAudioFrameDelegate'); }
步骤二:在 Native 层实现获取音频原数据的开始/停止接口。javaswift
public class MainActivity extends FlutterActivity { private static final String channelName = "TRCT_FLUTTER_EXAMPLE"; private MethodChannel channel; @Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); channel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), channelName); channel.setMethodCallHandler(((call, result) -> { switch (call.method) { case "enableTRTCAudioFrameDelegate": enableTRTCAudioFrameDelegate(); break; case "disableTRTCAudioFrameDelegate": disableTRTCAudioFrameDelegate(); break; default: break; } })); }}
@UIApplicationMain@objc class AppDelegate: FlutterAppDelegate { var channel: FlutterMethodChannel? override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { GeneratedPluginRegistrant.register(with: self) guard let controller = window?.rootViewController as? FlutterViewController else { fatalError("Invalid root view controller") } channel = FlutterMethodChannel(name: "TRCT_FLUTTER_EXAMPLE", binaryMessenger: controller.binaryMessenger) channel?.setMethodCallHandler({ [weak self] call, result in guard let self = self else { return } switch (call.method) { case "enableTRTCAudioFrameDelegate": self.enableTRTCAudioFrameDelegate() break case "disableTRTCAudioFrameDelegate": self.disableTRTCAudioFrameDelegate() break default: break } }) return super.application(application, didFinishLaunchingWithOptions: launchOptions) }}
2. Flutter 层接口接入
目前 Flutter Dart 接口仅支持 onCapturedAudioFrame 接口的使用。具体使用方法如下:
TRTCCloud trtcCloud = (await TRTCCloud.sharedInstance())!;
// 开启音频原数据获取final audioFrameListener = TRTCAudioFrameListener( onCapturedAudioFrame: (audioFrame) { // TODO } ); trtcCloud.setAudioFrameListener(audioFrameListener); // 停止音频原数据获取trtcCloud.setAudioFrameListener(null);
对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠
阿里云解决方案也看看?: 点击对比阿里云的解决方案
暂无评论,你要说点什么吗?