Getting Started with ConoStream SDK

ConoStream SDK provides a simple and powerful way to add real-time audio and video streaming capabilities to your Android application. This guide will walk you through the installation and basic setup process.

Requirements

Installation

Step 1: Add the AAR file

Copy the conostream-android-sdk-release.aar file to your project's app/libs directory.

app/
├── libs/
│   └── conostream-android-sdk-release.aar
├── src/
└── build.gradle

Step 2: Configure build.gradle

Add the following dependencies to your app-level build.gradle file:

android {
    // Enable ViewBinding (recommended)
    buildFeatures {
        viewBinding true
    }
}

dependencies {
    // ConoStream SDK
    implementation files('libs/conostream-android-sdk-release.aar')

    // Required dependencies
    implementation 'io.github.webrtc-sdk:android-prefixed:137.7151.05'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'

    // OkHttp for networking
    implementation 'com.squareup.okhttp3:okhttp:4.10.0'

    // Protobuf for protocol
    implementation 'com.google.protobuf:protobuf-javalite:3.21.12'
}

Step 3: Add Permissions

Add the required permissions to your AndroidManifest.xml:

<manifest>
    <!-- Internet permission -->
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- Audio permissions -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

    <!-- Camera permission (for video) -->
    <uses-permission android:name="android.permission.CAMERA" />

    <!-- Bluetooth permissions (for headsets) -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

    <application>
        ...
    </application>
</manifest>

Basic Setup

Initialize in Application Class

Create a manager instance in your Application class for app-wide access:

public class MyApplication extends Application {
    private ConoStreamManager conoStreamManager;

    @Override
    public void onCreate() {
        super.onCreate();
        initConoStreamManager();
    }

    private void initConoStreamManager() {
        conoStreamManager = new ConoStreamManager(this);
    }

    public ConoStreamManager getConoStreamManager() {
        return conoStreamManager;
    }

    public void releaseConoStreamManager() {
        if (conoStreamManager != null) {
            conoStreamManager.release();
            conoStreamManager = null;
        }
    }
}

Register in Manifest

<application
    android:name=".MyApplication"
    ...
>

Connect to a Room

Now you can connect to a streaming room from any Activity:

public class LiveActivity extends AppCompatActivity {

    private ConoStreamManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Get manager from Application
        manager = ((MyApplication) getApplication()).getConoStreamManager();

        // Connect to room
        String serverUrl = "wss://your-server.com";
        String token = "your-access-token";

        manager.connect(serverUrl, token, new ConoStreamEventListener() {
            @Override
            public void onConnected() {
                Log.d("ConoStream", "Connected to room!");

                // Start publishing audio
                manager.publishMicrophone();
            }

            @Override
            public void onDisconnected() {
                Log.d("ConoStream", "Disconnected from room");
            }

            @Override
            public void onError(String error) {
                Log.e("ConoStream", "Error: " + error);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        manager.leaveRoom();
    }
}
ℹ️

Note: You need a valid access token to connect to a room. See the Authentication guide for details on token generation.

Next Steps