flutter_banuba_agora_ar

A bridge plugin that pipes Banuba AR-processed frames directly into Agora RTC as an external video source. One-liner integration for AR filters in live streams.

Features

  • ๐Ÿ”— Automatic frame forwarding from Banuba โ†’ Agora
  • ๐ŸŽญ Convenience methods for effect loading and camera switching
  • ๐Ÿ“Š Frame count tracking
  • ๐Ÿงน Clean start/stop lifecycle

Getting Started

1. Install

dependencies:
  flutter_banuba_agora_ar: ^0.1.0
  # This automatically pulls flutter_banuba_ar and agora_rtc_engine

2. Usage

import 'package:flutter_banuba_agora_ar/flutter_banuba_agora_ar.dart';
import 'package:agora_rtc_engine/agora_rtc_engine.dart';

// 1. Initialize Banuba
final banuba = BanubaARController();
await banuba.initialize(token: 'YOUR_BANUBA_TOKEN');

// 2. Initialize Agora with external video source
final agoraEngine = createAgoraRtcEngine();
await agoraEngine.initialize(RtcEngineContext(appId: 'YOUR_AGORA_APP_ID'));
await agoraEngine.getMediaEngine().setExternalVideoSource(
  enabled: true,
  useTexture: false,
);

// 3. Create the bridge โ€” this is all you need!
final bridge = BanubaAgoraBridge(
  banuba: banuba,
  agoraEngine: agoraEngine,
);

// 4. Start capture and forwarding
await banuba.startCapture();
await bridge.startForwarding();
// AR-processed frames now flow into Agora automatically!

// 5. Load effects
await bridge.loadEffect('TrollGrandma');

// 6. Stop when done
bridge.stopForwarding();
await banuba.stopCapture();
bridge.dispose();

How It Works

The bridge subscribes to BanubaARController.frameStream and pushes each frame to Agora via MediaEngine.pushVideoFrame(). It handles:

  • RGBA (Android) and BGRA (iOS) format detection
  • Frame timestamping
  • Error resilience (frame push failures are non-fatal)

License

MIT License. See LICENSE for details.

Libraries

flutter_banuba_agora_ar
Bridge plugin that pipes Banuba AR-processed frames directly into Agora RTC as an external video source.