Find The Latest Tech Insights, News and Updates to Read

Integrating Agora SDK for Live Streaming in Flutter

Written by Achin Verma | Dec 28, 2023 9:45:09 AM

Introduction

Live streaming has become an integral part of modern applications, enabling real-time communication and engagement. Flutter, Google's UI toolkit for building natively compiled applications for mobile, web, and desktop from a single codebase, provides a seamless environment for creating cross-platform applications. In this article, we will explore how to integrate the Agora SDK into a Flutter application for live streaming.

What is Agora SDK?

Agora SDK is a powerful and flexible platform that enables developers to integrate real-time communication features into their applications. It supports audio, video, and interactive broadcasting, making it an excellent choice for building live-streaming applications.

Prerequisites: Before we dive into the integration process, make sure you have the following:

  1. Flutter installed on your machine. You can download it from Flutter website (https://flutter.dev/docs/get-started/install).
  2. An Agora developer account. You can sign up for one at (https://console.agora.io/).

Setting up Agora Project:

  1. Create a new project on the Agora Console.
  2. Retrieve your App ID from the Agora Console, which you will use to initialize the Agora SDK.

Integrating Agora SDK in Flutter

Open your Flutter project, and add the Agora Flutter SDK to your `pubspec.yaml` file:

dependencies:

  agora_rtc_engine: ^3.1.3

Run `flutter packages get` to install the dependency.

Now, let's initialize Agora in your Flutter app. Add the following code to your Dart file (e.g., `main.dart`):

import 'package:flutter/material.dart';

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;


void main() => runApp(MyApp());


class MyApp extends StatefulWidget {

  @override

  _MyAppState createState() => _MyAppState();

}


class _MyAppState extends State<MyApp> {

  final _channelController = TextEditingController();

  bool _joined = false;

  int _remoteUid = 0;


  @override

  void dispose() {

    // Dispose of the controller when the widget is disposed.

    _channelController.dispose();

    super.dispose();

  }


  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      home: Scaffold(

        appBar: AppBar(

          title: Text('Agora Flutter SDK'),

        ),

        body: Center(

          child: Column(

            children: <Widget>[

              TextField(

                controller: _channelController,

                decoration: InputDecoration(labelText: 'Channel Name'),

              ),

              ElevatedButton(

                onPressed: _joinChannel,

                child: Text('Join Channel'),

              ),

              _joined ? _videoView() : Container(),

            ],

          ),

        ),

      ),

    );

  }


  Widget _videoView() {

    return Expanded(

      child: Container(

        child: Stack(

          children: <Widget>[

            RtcLocalView.SurfaceView(),

            _remoteVideoView(),

          ],

        ),

      ),

    );

  }


  Widget _remoteVideoView() {

    if (_remoteUid != 0) {

      return Container(

        child: RtcRemoteView.SurfaceView(uid: _remoteUid),

      );

    } else {

      return Container();

    }

  }


  void _joinChannel() async {

    // Add your Agora App ID here

    const appId = 'YOUR_APP_ID';


    if (_channelController.text.isEmpty) {

      return;

    }


    try {

      await RtcEngine.create(appId);

      await RtcEngine.joinChannel(null, _channelController.text, null, 0);

      RtcEngine.onUserJoined = (int uid, int elapsed) {

        setState(() {

          _remoteUid = uid;

        });

      };

      setState(() {

        _joined = true;

      });

    } catch (e) {

      print(e);

    }

  }

}

 

Make sure to replace `'YOUR_APP_ID'` with your actual Agora App ID.

Conclusion

Integrating the Agora SDK into your Flutter application for live streaming is a straightforward process. With just a few steps, you can enable real-time communication features, allowing you to build engaging and interactive applications. Experiment with the code, explore additional Agora SDK functionalities, and create compelling live-streaming experiences for your users. Happy coding!

Ready to elevate your Flutter app design? Unlock the full potential of Flutter layouts with our professional Flutter developers.