腾讯云实时音视频Flutter_音视频解决方案_同尘科技

实时音视频 2年前 (2023-12-28) 浏览 158

本文档主要介绍如何使用 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折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?