Flutter Video Conferencing SDK & Sample App

Overview

Pub Version License Documentation Discord Firebase TestFlight Register

100ms Flutter SDK 🎉

Here you will find everything you need to build experiences with video using 100ms iOS/Android SDK. Dive into our SDKs, quick starts, add real-time video, voice, and screen sharing to your web and mobile applications.

📲 Download the Sample iOS app here: https://testflight.apple.com/join/Uhzebmut

🤖 Download the Sample Android app here: https://appdistribution.firebase.dev/i/b623e5310929ab70

🏃‍♀️ How to run the Sample App

The Example app can be found here.

  1. In project root, run flutter pub get
  2. Change directory to example folder, run flutter packages pub run build_runner build --delete-conflicting-outputs
  3. Run either flutter build ios OR flutter build apk
  4. Finally, flutter run

🚂 Setup Guide

  1. Sign up on https://dashboard.100ms.live/register & visit the Developer tab to access your credentials.

  2. Get familiarized with Tokens & Security here

  3. Complete the steps in Auth Token Quick Start Guide

  4. Get the HMSSDK via pub.dev. Add the hmssdk_flutter to your pubspec.yaml

☝️ Pre-requisites

  • Support for Android API level 24 or higher
  • Support for Java 8
  • Support for iOS 10 or higher
  • Xcode 12 or higher

📱 Supported Devices

The Android SDK supports Android API level 21 and higher. It is built for armeabi-v7a, arm64-v8a, x86, and x86_64 architectures.

iPhone & iPads with iOS version 10 or higher.

Android Permissions

Add following permissions in Android AndroidManifest.xml file

<uses-feature android:name="android.hardware.camera"/>

<uses-feature android:name="android.hardware.camera.autofocus"/>

<uses-permission android:name="android.permission.CAMERA"/>

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

<uses-permission android:name="android.permission.BLUETOOTH"/>

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

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

iOS Permissions

Add following permissions in iOS Info.plist file

<key>NSMicrophoneUsageDescription</key>
<string>{YourAppName} wants to use your microphone</string>

<key>NSCameraUsageDescription</key>
<string>{YourAppName} wants to use your camera</string>

<key>NSLocalNetworkUsageDescription</key>
<string>{YourAppName} App wants to use your local network</string>

🧐 Key Concepts

  • Room - A room represents real-time audio, video session, the basic building block of the 100mslive Video SDK
  • Track - A track represents either the audio or video that makes up a stream
  • Peer - A peer represents all participants connected to a room. Peers can be "local" or "remote"
  • Broadcast - A local peer can send any message/data to all remote peers in the room

Generating Auth Token

Auth Token is used in HMSConfig instance to setup configuration. So you need to make an HTTP request. you can use any package we are using http package. You will get your token endpoint at your 100ms dashboard and append api/token to that endpoint and make an http post request.

Example:

http.Response response = await http.post(Uri.parse(Constant.getTokenURL),
        body: {'room_id': room, 'user_id': user, 'role': Constant.defaultRole});

after generating token parse it using json.

var body = json.decode(response.body);
String token = body['token'];

You will need this token later explained below.

♻️ Setup event listeners

100ms SDK provides callbacks to the client app about any change or update happening in the room after a user has joined by implementing HMSUpdateListener. These updates can be used to render the video on screen or to display other info regarding the room.

abstract class HMSUpdateListener {

  /// This will be called on a successful JOIN of the room by the user
  ///
  /// This is the point where applications can stop showing its loading state
  /// - Parameter room: the room which was joined
  void onJoin({required HMSRoom room});
  


  /// This will be called whenever there is an update on an existing peer
  /// or a new peer got added/existing peer is removed.
  ///
  /// This callback can be used to keep a track of all the peers in the room
  /// - Parameters:
  ///   - peer: the peer who joined/left or was updated
  ///   - update: the triggered update type. Should be used to perform different UI Actions
  void onPeerUpdate({required HMSPeer peer, required HMSPeerUpdate update});



  /// This is called when there are updates on an existing track
  /// or a new track got added/existing track is removed
  ///
  /// This callback can be used to render the video on screen whenever a track gets added
  /// - Parameters:
  ///   - track: the track which was added, removed or updated
  ///   - trackUpdate: the triggered update type
  ///   - peer: the peer for which track was added, removed or updated
  void onTrackUpdate(
      {required HMSTrack track,
      required HMSTrackUpdate trackUpdate,
      required HMSPeer peer});



  /// This is called when there is a new broadcast message from any other peer in the room
  ///
  /// This can be used to implement chat is the room
  /// - Parameter message: the received broadcast message
  void onMessage({required HMSMessage message});
  
  
  
  /// This is called every 1 second with list of active speakers
  ///
  ///    A HMSSpeaker object contains -
  ///    - peerId: the peer identifier of HMSPeer who is speaking
  ///    - trackId: the track identifier of HMSTrack which is emitting audio
  ///    - audioLevel: a number within range 1-100 indicating the audio volume
  ///
  /// A peer who is not present in the list indicates that the peer is not speaking
  ///
  /// This can be used to highlight currently speaking peers in the room
  /// - Parameter speakers: the list of speakers
  void onUpdateSpeakers({required List<HMSSpeaker> updateSpeakers});



  /// This is called when someone asks for change or role
  ///
  /// for eg. admin can ask a peer to become host from guest.
  /// this triggers this call on peer's app
  void onRoleChangeRequest({required HMSRoleChangeRequest roleChangeRequest});



  /// This will be called when there is an error in the system
  ///
  /// and SDK has already retried to fix the error
  /// - Parameter error: the error that occurred
  void onError({required HMSError error});
  
  
  
  /// This is called when there is a change in any property of the Room
  ///
  /// - Parameters:
  ///   - room: the room which was joined
  ///   - update: the triggered update type. Should be used to perform different UI Actions
  void onRoomUpdate({required HMSRoom room, required HMSRoomUpdate update});



  /// This is called when SDK detects a network issue and is trying to recover
  void onReconnecting();


  /// This is called when SDK successfully recovered from a network issue
  void onReconnected();
}

🤔 How to listen to Track, Peer and Room updates?

The HMS SDK sends updates to the application about any change in HMSPeer , HMSTrack or HMSRoom via the callbacks in HMSUpdateListener. Application need to listen to the corresponding updates in onPeerUpdate , onTrackUpdate or onRoomUpdate

The following are the different types of updates that are emitted by the SDK -

HMSPeerUpdate
  case PEER_JOINED A new peer joins the room
  case PEER_LEFT - An existing peer leaves the room
  case BECAME_DOMINANT_SPEAKER - A peer becomes a dominant speaker
  case NO_DOMINANT_SPEAKER - There is silence in the room (No speaker is detected)

HMSTrackUpdate
  case TRACK_ADDED - A new track is added by a remote peer
  case TRACK_REMOVED - An existing track is removed from a remote peer
  case TRACK_MUTED - An existing track of a remote peer is muted
  case TRACK_UNMUTED - An existing track of a remote peer is unmuted
  case TRACK_DESCRIPTION_CHANGED - The optional description of a track of a remote peer is changed

🛤 How to know the type and source of Track?

HMSTrack contain a field called source which denotes the source of the Track. Source can have the following values - regular (normal), screen (for screenshare)and plugin (for plugins)

To know the type of track, check the value of type which would be one of the enum values - AUDIO or VIDEO

🤝 Provide joining configuration

To join a room created by following the steps described in the above section, clients need to create a HMSConfig instance and use that instance to call join method of HMSSDK

// Create a new HMSConfig
HMSConfig config = HMSConfig( userId: userId,
                              roomId: roomId,
                              authToken: token,
                              userName: userName);

userId: should be unique we are using Uuid package to generate one. roomId: id of the room which you want to join. token: follow the above step 1 to generate token. userName: your name using which you want to join the room.

🙏 Join a room

Use the HMSConfig and HMSUpdateListener instances to call the join method on the instance of HMSSDK created above. Once Join succeeds, all the callbacks keep coming on every change in the room and the app can react accordingly

HMSMeeting meeting = HMSMeeting()
meeting.joinMeeting(config: this.config);

👋 Leave Room

Call the leave method on the HMSSDK instance

meeting.leave() // to leave a room

🙊 Mute/Unmute Local Audio

// Turn on
meeting.switchAudio(isOn:true)

// Turn off  
meeting.switchAudio(isOn:false)

🙈 Mute/Unmute Local Video

meeting.startCapturing()

meeting.stopCapturing()

meeting.switchCamera()

🛤 HMSTracks Explained

HMSTrack is the super-class of all the tracks that are used inside HMSSDK. Its hierarchy looks like this -

HMSTrack
    - AudioTrack
        - LocalAudioTrack
        - RemoteAudioTrack
    - VideoTrack
        - LocalVideoTrack
        - RemoteVideoTrack

🎞 Display a Track

To display a video track, first get the HMSVideoTrack & pass it on to HMSVideoView using setVideoTrack function. Ensure to attach the HMSVideoView to your UI hierarchy.

HMSVideoView(
    track: videoTrack,
    args: {
      'height': customHeight,
      'width': customWidth,
    },
  );

Change a Role

To change role, you will provide peerId of selected peer and new roleName from roles. If forceChange is true, the system will prompt user for the change. If forceChange is false, user will get a prompt to accept/reject the role. After changeRole is called, HMSUpdateListener's onRoleChangeRequest will be called on selected user's end.

 meeting.changeRole(
        peerId: peerId, roleName: roleName, forceChange: forceChange);

📨 Chat Messaging

You can send a chat or any other kind of message from local peer to all remote peers in the room.

To send a message first create an instance of HMSMessage object.

Add the information to be sent in the message property of HMSMessage.

Then use the Future<void> sendMessage(String message) function on instance of HMSMeeting.

When you(the local peer) receives a message from others(any remote peer), void onMessage({required HMSMessage message}) function of HMSUpdateListener is invoked.

// following is an example implementation of chat messaging

// to send a broadcast message
String message = 'Hello World!'
meeting.sendMessage(message);  // meeting is an instance of `HMSMeeting` object


// receiving messages
// the object conforming to `HMSUpdateListener` will be invoked with `on(message: HMSMessage)`, add your logic to update Chat UI within this listener
void onMessage({required HMSMessage message}){
    let messageReceived = message.message // extract message payload from `HMSMessage` object that is received
    // update your Chat UI with the messageReceived
}

🏃‍♀️ Checkout the sample implementation in the Example app folder.

🎞 Preview

You can use our preview feature to unmute/mute audio/video before joining the room.

You can implement your own preview listener using this abstract class HMSPreviewListener

abstract class HMSPreviewListener {

  //you will get all error updates here
  void onError({required HMSError error});

  //here you will get room instance where you are going to join and your own local tracks to render the video by checking the type of trackKind and then using the 
  //above mentioned VideoView widget
  void onPreview({required HMSRoom room, required List<HMSTrack> localTracks});
}

📖 Read the Complete Documentation here: https://docs.100ms.live/flutter/v2/foundation/basics

📲 Download the Sample iOS app here: https://testflight.apple.com/join/Uhzebmut

🤖 Download the Sample Android app here: https://appdistribution.firebase.dev/i/b623e5310929ab70

Comments
  • HMSUpdateListener listener class not working.

    HMSUpdateListener listener class not working.

    Version tried Flutter 3.0.5 hmssdk_flutter: ^0.7.3

    What happens - After Joining the room HMSUpdateListener listener class is sometimes listening the events and sometimes it doesn’t listen.

    Code --

    
    class SdkInitializer {
      static HMSSDK hmssdk = HMSSDK();
    }
    
    final HMSInteractor hmsInteractor = HMSInteractor()
    
    SdkInitializer.hmssdk.build();
     SdkInitializer.hmssdk.addUpdateListener(listener: hmsInteractor);
     
     class HMSInteractor implements HMSUpdateListener {
      HMSInteractor({required this.bloc});
    
      final RoomBloc bloc;
    
      @override
      void onChangeTrackStateRequest({required HMSTrackChangeRequest hmsTrackChangeRequest}) {
        // TODO: implement onChangeTrackStateRequest
      }
    
      @override
      void onJoin({required HMSRoom room}) {
        bloc.add(OnJoinRoomEvent(room: room));
      }
    
      @override
      void onMessage({required HMSMessage message}) {
        bloc.add(OnHMSMessageEvent(message: message));
      }
    
      @override
      void onPeerUpdate({required HMSPeer peer, required HMSPeerUpdate update}) {
       }
      }
      
    
    opened by asmitzz 17
  • App crashes on release mode

    App crashes on release mode

    Works fine on the debug modem however it crashes when running on release mode.

    Proguard rules are intact and copied from the example project.

    Is there anything I'm missing ?

    My app/build.gradle dependencies -

    dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'com.github.100mslive:android-sdk:2.1.4'
        implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
    }
    

    flutter doctor -

    [✓] Flutter (Channel stable, 2.2.3, on macOS 11.6 20G165 darwin-arm, locale en-IN)
    [!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
        ✗ Android license status unknown.
          Run `flutter doctor --android-licenses` to accept the SDK licenses.
          See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
    [✓] Xcode - develop for iOS and macOS
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 4.2)
    [✓] VS Code (version 1.61.2)
    [✓] Connected device (2 available)
    
    opened by abbas2501 12
  • app is crashed on calling method hmssdk.startScreenShare()

    app is crashed on calling method hmssdk.startScreenShare()

    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=192, result=-1, data=Intent { (has extras) }} to activity {com.queira.clinicjet_device/com.queira.clinicjet_device.MainActivity}: kotlin.UninitializedPropertyAccessException: lateinit property hmssdk has not been initialized

    i have added all permissions

    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    

    my main activity code

     import io.flutter.embedding.android.FlutterActivity
     import live.hms.hmssdk_flutter.HmssdkFlutterPlugin
     import android.app.Activity
     import android.content.Intent
     import live.hms.hmssdk_flutter.Constants
    
    
     class MainActivity: FlutterActivity() {
         override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
             super.onActivityResult(requestCode, resultCode, data)
             if (requestCode == Constants.SCREEN_SHARE_INTENT_REQUEST_CODE && resultCode == Activity.RESULT_OK){
                 if (data != null) {
                     HmssdkFlutterPlugin.hmssdkFlutterPlugin?.requestScreenShare(data)
                 }
             }
         }
     }
    

    my dart file code

     class Page extends StatefulWidget {
       const Page({Key? key}) : super(key: key);
    
       @override
       State<Page> createState() => _PageState();
     }
    
     class _PageState extends State<Page> {
    
     @override
       void initState() {
         super.initState();
         hmssdk.build();
       }
    
     @override
       Widget build(BuildContext context) {
    
     return Container(
                            height: 50,
                            decoration: BoxDecoration(
                              color: Colors.blue.shade400,
                              borderRadius: BorderRadius.circular(10),
                            ),
                            child: TextButton(
                              child: Text(
                                isScreenShareActive == true
                                    ? "Stop Screen Share"
                                    : "Start Screen Share",
                                style: const TextStyle(color: Colors.white),
                              ),
                              style: TextButton.styleFrom(
                                  padding: const EdgeInsets.symmetric(
                                      horizontal: 20)),
                              onPressed: () async {
                                if (isScreenShareActive == true) {
                                  hmssdk.stopScreenShare(
                                      hmsActionResultListener:
                                          hmsActionResultListen);
                                  isScreenShareActive = false;
                                } else {
                                  hmsActionResultListen =
                                      HMSActionResultListen();
                                  hmssdk.startScreenShare(
                                      hmsActionResultListener:
                                          hmsActionResultListen);
                                  isScreenShareActive = true;
                                }
                                setState(() {});
                              },
                            ))
     )
    
    opened by amitmallah0509 10
  • The getter 'name' isn't defined for the class 'HMSAudioDevice'

    The getter 'name' isn't defined for the class 'HMSAudioDevice'

    Unable to integrate 100ms sdk hmssdk_flutter: 0.7.6 to flutter app. Getting below error:

    ../../Documents/flutter/.pub-cache/hosted/pub.dartlang.org/hmssdk_flutter-0.7.6/lib/src/hmssdk.dart:769:57: Error: The getter 'name' isn't defined for the class 'HMSAudioDevice'.

    • 'HMSAudioDevice' is from 'package:hmssdk_flutter/src/enum/hms_audio_device.dart' ('../../Documents/flutter/.pub-cache/hosted/pub.dartlang.org/hmssdk_flutter-0.7.6/lib/src/enum/hms_audio_device.dart'). Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'. arguments: {"audio_device_name": audioDevice!.name}); ^^^^ ../../Documents/flutter/.pub-cache/hosted/pub.dartlang.org/hmssdk_flutter-0.7.6/lib/src/hmssdk.dart:781:58: Error: The getter 'name' isn't defined for the class 'HMSAudioMixingMode'.
    • 'HMSAudioMixingMode' is from 'package:hmssdk_flutter/src/enum/hms_audio_mixing_mode.dart' ('../../Documents/flutter/.pub-cache/hosted/pub.dartlang.org/hmssdk_flutter-0.7.6/lib/src/enum/hms_audio_mixing_mode.dart'). Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'. arguments: {"audio_mixing_mode": audioMixingMode.name}); ^^^^ ../../Documents/flutter/.pub-cache/hosted/pub.dartlang.org/hmssdk_flutter-0.7.6/lib/src/hmssdk.dart:814:60: Error: The getter 'name' isn't defined for the class 'HMSAudioMixingMode'.
    • 'HMSAudioMixingMode' is from 'package:hmssdk_flutter/src/enum/hms_audio_mixing_mode.dart' ('../../Documents/flutter/.pub-cache/hosted/pub.dartlang.org/hmssdk_flutter-0.7.6/lib/src/enum/hms_audio_mixing_mode.dart'). Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'. arguments: {"audio_mixing_mode": audioMixingMode.name}); ^^^^

    FAILURE: Build failed with an exception.

    • Where: Script '/Users/user/Documents/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1005

    • What went wrong: Execution failed for task ':app:compileFlutterBuildDebug'.

    Process 'command '/Users/user/Documents/flutter/bin/flutter'' finished with non-zero exit value 1

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 12s Exception: Gradle task assembleDebug failed with exit code 1

    Flutter doctor: Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 2.5.3, on macOS 12.5 21G72 darwin-x64, locale en-GB) [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0) [✓] Xcode - develop for iOS and macOS [✓] Chrome - develop for the web [✓] Android Studio (version 2021.2) [✓] Connected device (3 available)

    • No issues found!

    I really want to use 100ms for video call in our app. Please help me on this issue.

    opened by madhukarNumen 8
  • onRemovedFromRoom throwing error - unhandled Exception: type '_InternalLinkedHashMap<Object?, Object?>' is not a subtype of type 'HMSPeer' in type cast

    onRemovedFromRoom throwing error - unhandled Exception: type '_InternalLinkedHashMap' is not a subtype of type 'HMSPeer' in type cast

    This issue lies in the 3rd line in following code snippet, map value needs to be passed thru the factory method fromMap in order to type cast properly

    factory HMSPeerRemovedFromPeer.fromMap(Map map) {
        return HMSPeerRemovedFromPeer(
          peerWhoRemoved: map['peer_who_removed'] as HMSPeer,
          reason: map['reason'] as String,
          roomWasEnded: map['room_was_ended'] as bool,
        );
      }
    
    opened by abbas2501 8
  • Can't run app after adding this plugin

    Can't run app after adding this plugin

    I get this error when I try to run my app on android (real device)

    error: cannot access HMSUpdateListener
          flutterEngine.getPlugins().add(new live.hms.hmssdk_flutter.HmssdkFlutterPlugin());
                                    ^
      class file for live.hms.video.sdk.HMSUpdateListener not found
    1 error
    

    Also doesn't work on the IOS simulator on M1 Mac with error messages along the lines of

    /flutter/.pub-cache/hosted/pub.dartlang.org/hmssdk_flutter-0.1.0/ios/Classes/Models/HMS
        MessageExtension.swift:16:36: error: value of type 'HMSMessage' has no member 'receiver'
                dict["receiver"] = message.receiver
    error: value of type 'HMSPermissions' has no member 'askToUnmute'
                dict["ask_to_un_mute"] = permission.askToUnmute
    
    opened by cokariinc 8
  • Apk Build in Mac doesnt Work

    Apk Build in Mac doesnt Work

    I'm trying to build a version for the android app but I keep getting an error. But when trying to do it on Windows the apk build correctly.

    The error:

    `FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':hmssdk_flutter:compileReleaseKotlin'.

    Error while evaluating property 'filteredArgumentsMap' of task ':hmssdk_flutter:compileReleaseKotlin' Could not resolve all files for configuration ':hmssdk_flutter:releaseCompileClasspath'. > Failed to transform webrtc-m104-hms-1.3.jar (com.github.100mslive:webrtc:m104-hms-1.3) to match attributes {artifactType=android-classes-jar, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-api}. > Could not find webrtc-m104-hms-1.3.jar (com.github.100mslive:webrtc:m104-hms-1.3). Searched in the following locations: https://www.jitpack.io/com/github/100mslive/webrtc/m104-hms-1.3/webrtc-m104-hms-1.3.jar

    • Try:

    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.`

    opened by WilliamBz12 7
  • Initializing HMSSDK with hmsTrackSetting causes crash on IOS.

    Initializing HMSSDK with hmsTrackSetting causes crash on IOS.

    Happens in the IOS emulator and running on a 9th generation iPad (running iPadOS 15.7.1) when running in debug or profile mode. No crash occurs on android. I have not tested in release mode yet.

    hmssdk_flutter version ^0.7.8

    HMS Dependencies in Podfile.lock

    - HMSBroadcastExtensionSDK (0.0.4)
      - HMSSDK (0.4.6):
        - HMSWebRTC (= 1.0.4898)
      - hmssdk_flutter (0.7.8):
        - Flutter
        - HMSBroadcastExtensionSDK (= 0.0.4)
        - HMSSDK (= 0.4.6)
      - HMSWebRTC (1.0.4898)
    

    Flutter Doctor

    [✓] Flutter (Channel stable, 3.3.8, on macOS 13.0.1 22A400
        darwin-x64, locale en-US)
    [✓] Android toolchain - develop for Android devices (Android
        SDK version 33.0.0)
    [✓] Xcode - develop for iOS and macOS (Xcode 14.1)
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 2020.3)
    [✓] VS Code (version 1.73.1)
    [✓] Connected device (3 available)
    [✓] HTTP Host Availability
    

    Log Output

    Launching lib/main.dart on Joshua’s iPad in profile mode...
    Automatically signing iOS for device deployment using specified development team in Xcode project: C89V55G77L
    Xcode build done.                                           560.2s
    (lldb) 2022-11-15 16:11:52.650677-0600 Runner[20531:1489098] 10.1.0 - [FirebaseCore][I-COR000005] No app has been configured yet.
    Connecting to VM Service at ws://127.0.0.1:49504/FLOiVmG5CyQ=/ws
    [CoreBluetooth] XPC connection invalid
    [connection] nw_socket_handle_socket_event [C3.1:1] Socket SO_ERROR [54: Connection reset by peer]
    [CoreBluetooth] XPC connection invalid
    Unsupported value: <HMSSimulcastLayerSettings: 0x280b5bf00> of type HMSSimulcastLayerSettings
    *** Assertion failure in -[FlutterStandardWriter writeValue:], FlutterStandardCodec.mm:338
    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unsupported value for standard codec'
    *** First throw call stack:
    (0x180b0a288 0x19983e744 0x18239b340 0x106be7684 0x106be7874 0x106be7874 0x106be7dfc 0x106be4e74 0x102aa71ac 0x102aa9a58 0x102a96ac0 0x106be4ddc 0x1066bf44c 0x18076fe6c 0x180771a30 0x18077ff48 0x18077fb98 0x180ac2800 0x180a7c704 0x180a8fbc8 0x19cbff374 0x183405b58 0x183187098 0x102050078 0x102499da4)
    libc++abi: terminating with uncaught exception of type NSException
    * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
        frame #0: 0x00000001b797db38 libsystem_kernel.dylib`__pthread_kill + 8
    libsystem_kernel.dylib`:
    ->  0x1b797db38 <+8>:  b.lo   0x1b797db58               ; <+40>
        0x1b797db3c <+12>: pacibsp
        0x1b797db40 <+16>: stp    x29, x30, [sp, #-0x10]!
        0x1b797db44 <+20>: mov    x29, sp
    Target 0: (Runner) stopped.
    Lost connection to device.
    Exited
    
    
    opened by joshmossas 7
  • app crashing after join is called

    app crashing after join is called

    What happens -

    1. User joins the meeting (can see that on 100ms dashboard)
    2. 2 seconds pause
    3. App crashes
    4. User leaves the meeting

    Code --

    Future<HMSSDK> join() async {
        meeting.build();
    
        try {
    
          final HMSConfig? config = getHmsConfig();
    
          print("HMS CONFIG -- ${config?.userName}");
    
          await meeting.join(
            config: config!,
          );
          print("Success join..hms");
          localPeer = await meeting.getLocalPeer();
    
      // This also triggers
          print("Local peer --- ${localPeer?.videoTrack}");
    
    // This also triggers
          log("Local Peer updated - ${localPeer?.name}",
              name: "HMS local peer updated");
    
          isRemoved = false;
          meeting.addMeetingListener(listener: this);
          
    // This also triggers
    log("HMS Joined.... ");
          return meeting;
        } catch (exception) {
    
    // THIS IS NOT TRIGGERED!
          log("hms Failed to join - ${exception.toString()}");
          this.leaveMeeting();
          throw exception;
        }
      }
    

    Conclusion -- No matter if I add breakpoints or without breakpoints, join() is called and after that, every piece of code is running fine (print statements are logging) BUT the app still crashes after a second or two.

    Please note - no other callback from the ones provided by HMSUpdateListener are triggered, not even void onError({required HMSException error})

    opened by abbas2501 7
  • A problem occurred configuring project ':hmssdk_flutter'

    A problem occurred configuring project ':hmssdk_flutter'

    When trying to run a project with HMS SDK today, this error came up:

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    A problem occurred configuring project ':hmssdk_flutter'.
    > Could not resolve all files for configuration ':hmssdk_flutter:classpath'.
       > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:+.
         Required by:
             project :hmssdk_flutter
          > Failed to list versions for org.jetbrains.kotlin:kotlin-gradle-plugin.
             > Unable to load Maven meta-data from https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/maven-metadata.xml.
                > Could not HEAD 'https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/maven-metadata.xml'.
                   > Read timed out
    > Failed to notify project evaluation listener.
       > Could not get unknown property 'android' for project ':hmssdk_flutter' of type org.gradle.api.Project.
       > Could not get unknown property 'android' for project ':hmssdk_flutter' of type org.gradle.api.Project.
    
    * Try:
    > Run with --stacktrace option to get the stack trace.
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 1m 36s
    Exception: Gradle task assembleDevDebug failed with exit code 1
    

    I tried switching connection/network, but the same error.

    I tried running ./gradlew build --refresh-dependencies in my android directory but it failed. Here's the full stacktrace:

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    A problem occurred configuring project ':hmssdk_flutter'.
    > Could not resolve all files for configuration ':hmssdk_flutter:classpath'.
       > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:+.
         Required by:
             project :hmssdk_flutter
          > Failed to list versions for org.jetbrains.kotlin:kotlin-gradle-plugin.
             > Unable to load Maven meta-data from https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/maven-metadata.xml.
                > Could not HEAD 'https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/maven-metadata.xml'.
                   > Read timed out
       > Could not resolve org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:aaptcompiler:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.lint:lint-gradle-api:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:gradle-api:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:builder-model:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:common:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:manifest-merger:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.analytics-library:tracker:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.lint:lint-gradle-api:27.1.3 > com.android.tools.lint:lint-model:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3 > com.android.tools:repository:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3 > com.android.tools.analytics-library:shared:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm-analysis:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm-commons:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm-util:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve net.sf.jopt-simple:jopt-simple:4.9.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve net.sf.proguard:proguard-gradle:6.0.3.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.squareup:javapoet:1.10.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.protobuf:protobuf-java:3.10.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:aapt2-proto:4.1.3-6503028
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.ddms:ddmlib:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.analytics-library:protos:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.analytics-library:tracker:27.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.protobuf:protobuf-java-util:3.10.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.crypto.tink:tink:1.3.0-rc2.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.flatbuffers:flatbuffers-java:1.12.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.tensorflow:tensorflow-lite-metadata:0.1.0-rc1.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.squareup:javawriter:2.5.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.bouncycastle:bcpkix-jdk15on:1.56.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:apkzlib:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.bouncycastle:bcprov-jdk15on:1.56.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:apkzlib:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm-tree:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve javax.inject:javax.inject:1.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3
          > Skipped due to earlier error
       > Could not resolve it.unimi.dsi:fastutil:7.2.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.googlecode.json-simple:json-simple:1.1.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.guava:guava:28.1-jre.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:aaptcompiler:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.analytics-library:crash:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.lint:lint-gradle-api:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:gradle-api:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:common:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.analytics-library:tracker:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3 > com.android.tools.analytics-library:shared:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.apache.httpcomponents:httpmime:4.5.6.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.analytics-library:crash:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.apache.httpcomponents:httpcore:4.4.10.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.analytics-library:crash:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.apache.httpcomponents:httpclient:4.5.6.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.analytics-library:crash:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.jetbrains.kotlin:kotlin-reflect:1.3.72.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.lint:lint-gradle-api:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.antlr:antlr4:4.5.3.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
          > Skipped due to earlier error
       > Could not resolve commons-io:commons-io:2.4.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.googlecode.juniversalchardet:juniversalchardet:1.0.3.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.code.gson:gson:2.8.5.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:manifest-merger:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3 > com.android.tools.analytics-library:shared:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.glassfish.jaxb:jaxb-runtime:2.3.1.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > androidx.databinding:databinding-compiler-common:4.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3 > com.android.tools:repository:27.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.auto.value:auto-value-annotations:1.6.2.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:bundletool:0.14.0
          > Skipped due to earlier error
       > Could not resolve com.google.errorprone:error_prone_annotations:2.3.1.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:bundletool:0.14.0
          > Skipped due to earlier error
       > Could not resolve com.google.guava:guava:28.1-jre.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:bundletool:0.14.0
          > Skipped due to earlier error
       > Could not resolve com.google.protobuf:protobuf-java:3.10.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:bundletool:0.14.0
          > Skipped due to earlier error
       > Could not resolve com.google.protobuf:protobuf-java-util:3.10.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:bundletool:0.14.0
          > Skipped due to earlier error
       > Could not resolve com.google.code.gson:gson:2.8.5.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09
          > Skipped due to earlier error
       > Could not resolve org.jetbrains.kotlin:kotlin-stdlib:1.3.60.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm-util:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09
          > Skipped due to earlier error
       > Could not resolve org.ow2.asm:asm-commons:7.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09
          > Skipped due to earlier error
       > Could not resolve org.jdom:jdom2:2.0.6.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09
          > Skipped due to earlier error
       > Could not resolve org.apache.commons:commons-compress:1.12.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3 > com.android.tools:repository:27.1.3
          > Skipped due to earlier error
       > Could not resolve org.jetbrains.trove4j:trove4j:20160824.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdk-common:27.1.3
          > Skipped due to earlier error
       > Could not resolve net.sf.kxml:kxml2:2.3.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:manifest-merger:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.ddms:ddmlib:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:aaptcompiler:4.1.3 > com.android.tools.layoutlib:layoutlib-api:27.1.3
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.lint:lint-gradle-api:27.1.3 > com.android.tools.lint:lint-model:27.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.code.findbugs:jsr305:1.3.9.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:apkzlib:4.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.guava:guava:28.1-jre.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools.build:apkzlib:4.1.3
          > Skipped due to earlier error
       > Could not resolve org.jetbrains:annotations:13.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:aaptcompiler:4.1.3 > com.android.tools.layoutlib:layoutlib-api:27.1.3
          > Skipped due to earlier error
       > Could not resolve com.sun.activation:javax.activation:1.2.0.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3 > com.android.tools:repository:27.1.3
          > Skipped due to earlier error
       > Could not resolve com.google.jimfs:jimfs:1.1.
         Required by:
             project :hmssdk_flutter > com.android.tools.build:gradle:4.1.3 > com.android.tools.build:builder:4.1.3 > com.android.tools:sdklib:27.1.3 > com.android.tools:repository:27.1.3
          > Skipped due to earlier error
    > Failed to notify project evaluation listener.
       > Could not get unknown property 'android' for project ':hmssdk_flutter' of type org.gradle.api.Project.
       > Could not get unknown property 'android' for project ':hmssdk_flutter' of type org.gradle.api.Project.
    
    * Try:
    > Run with --stacktrace option to get the stack trace.
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    
    opened by jsonmat 6
  • Could not find webrtc-m104-hms-1.2.jar

    Could not find webrtc-m104-hms-1.2.jar

    Unable to use 100ms. Getting error : Could not find webrtc-m104-hms-1.2.jar

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':hmssdk_flutter:compileDebugKotlin'.

    Could not resolve all files for configuration ':hmssdk_flutter:debugCompileClasspath'. Could not find webrtc-m104-hms-1.2.jar (com.github.100mslive:webrtc:m104-hms-1.2). Searched in the following locations: https://jitpack.io/com/github/100mslive/webrtc/m104-hms-1.2/webrtc-m104-hms-1.2.jar

    Above mention location is not working

    opened by madhukarNumen 6
  • Add docs for Background Mode Behaviour

    Add docs for Background Mode Behaviour

    • Add docs listing behaviours observed in #1044
    • Add sample code for handling AppStateChangeListener
    • Add screenshots for enabling Background Mode on iOS
    • Showcase how to use Wakelock to prevent the device from sleeping
    • Showcase how to setup Android Foreground Service to ensure consistent behaviour
    documentation P0 
    opened by ygit 0
  • Add docs for Interruption Handling

    Add docs for Interruption Handling

    • Add description about how onRoomUpdate is triggered when phone call starts / ends (Android only)
    • Add description about if another app takes away access of Mic when 100ms room is running then how to get it back
    • Add description about how we call setVolume API in AppStateChangeListener to handle this

    iOS: https://www.100ms.live/docs/ios/v2/features/interruption-handling

    Android: https://www.100ms.live/docs/android/v2/features/interruption-handling

    documentation P0 
    opened by ygit 0
  • Ensure app is capturing audio in Background + Screen is off even after 60 seconds

    Ensure app is capturing audio in Background + Screen is off even after 60 seconds

    1. Check the current Example app behaviour - Whether Audio is getting captured when the app is in background, screen is turned off & more than 60+ seconds have elapsed.

    2. Check if giving the App permission for Unrestricted Battery Usage changes this behaviour

    3. Add Foreground Service in the app if audio capturing is stopped by Android OS

    https://pub.dev/packages/flutter_foreground_task

    enhancement P1 
    opened by ygit 0
  • Make Method & Event Channels nullable

    Make Method & Event Channels nullable

    • In both HmssdkFlutterPlugin.kt & SwiftHmssdkFlutterPlugin.swift
    • Add null safety checks while using them
    • Log error messages when they are referred to & found to be null
    bug P0 
    opened by ygit 0
Releases(1.1.0)
  • 1.1.0(Dec 17, 2022)

    Added

    • Added support for Bulk Role Change

      Bulk Role Change is used when you want to convert all Roles from a list of Roles, to another Role.

      For example, if peers join a room with a Waiting Role and now you want to change all these peers to Viewer Role then use the changeRoleOfPeersWithRoles API.

      // fetch all available Roles in the room
      List<HMSRole> roles = await hmsSDK.getRoles();
      
      // get the Host Role object
      HMSRole toHostRole = roles.firstWhere((element) => element.name == "host");
      
      // get list of Roles to be updated - in this case "Waiting" and "Guest" Roles
      roles.retainWhere((element) => ((element.name == "waiting") || (element.name == "guest")));
      
      // now perform Role Change of all peers in "Waiting" and "Guest" Roles to the "Host" Role
      hmsSDK.changeRoleOfPeersWithRoles(
          toRole: toHostRole,
          ofRoles: roles,
          hmsActionResultListener: hmsActionResultListener);
      

      For More Information, refer: https://www.100ms.live/docs/flutter/v2/features/change-role

    • Added Switch Audio Output APIs on iOS

      Audio Output Routing is helpful when users want to switch output to a connected device other than the default one.

      hmsSDK.switchAudioOutput(audioDevice: HMSAudioDevice.SPEAKER_PHONE);
      

      For More Information, refer: https://www.100ms.live/docs/flutter/v2/features/audio-output-routing

    Deprecated

    • Deprecated changeRole API in favour of changeRoleOfPeer

      No change in functionality or method signature.

    Fixed

    • Microphone not getting captured on Role Change from a non-publishing to publishing Role on iOS
    • Corrected an issue where on iOS a default Audio Mixer was getting created if Track Settings was passed while building the HMSSDK instance

    Updated to Native Android SDK 2.5.4 & Native iOS SDK 0.5.3

    Full Changelog: 1.0.0...1.1.0

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Dec 9, 2022)

    Added

    • Added support for Picture in Picture mode on Android.

      PIP Mode lets the user watch the room video in a small window pinned to a corner of the screen while navigating between apps or browsing content on the main screen.

      Example implementation for checking device support & enabling PIP mode:

      // to start PIP mode invoke the `enterPipMode` function, the parameters passed to it are optional
      hmsSDK.enterPipMode(aspectRatio: [16, 9], autoEnterPip: true);
      
      // method to check whether PIP mode is available for current device
      bool isPipAvailable = await hmsSDK.isPipAvailable();
      
      // method to check whether PIP mode is active currently
      bool isPipActive = await hmsSDK.isPipActive();
      
    • Added roomPeerCountUpdated type in HMSRoomUpdate

    • Added isPlaybackAllowed to Remote Audio & Video Tracks to check if the track is allowed to be played locally

    • Added convenience APIs to Mute / Unmute Audio or Video of the entire room locally

    Fixed

    • Corrected parsing of HMSMessage objects sent Server-side APIs
    • Session Metadata can now be reset to a null value
    • Importing Native Android SDK dependency from Maven Central instead of Jitpack
    • HMSTrackSettings is now nullable while building the HMSSDK object
    • Corrected usage of Native Util functions to fetch Audio & Video tracks
    • Corrected default local audio track settings for iOS devices
    • Corrected sending of peer count in HMSRoom instance on iOS

    Updated to Native Android SDK 2.5.1 & Native iOS SDK 0.4.7

    Full Changelog: 0.7.8...1.0.0

    Source code(tar.gz)
    Source code(zip)
  • 0.7.8(Oct 31, 2022)

    • Added support for Joining with Muted Audio & Video on iOS devices
    • Added Maven Central repository to look for Android dependencies
    • Added support for receiving Server-side HMSMessage
    • Added HMSLogSettings to configure Native Android SDK logs
    • Corrected setters for local audio/video track settings while building the HMSSDK object
    • Updated to Native Android SDK 2.5.1 & Native iOS SDK 0.4.6

    Full Changelog: 0.7.7...0.7.8

    Source code(tar.gz)
    Source code(zip)
  • 0.7.7(Oct 20, 2022)

    • Added ability to set & get session metadata
    • Added ability to join with muted audio & video using Initial states (Muted / Unmuted) HMSVideoTrackSettings & HMSAudioTrackSettings in the builder of HMSSDK
    • Added better Telemetrics for analytics
    • Added option to use Software Decoder for Video rendering on Android devices
    • Added action result listener to switchCamera function on local video track
    • Fixed LetterBoxing (Black borders on top and bottom) observed when sharing the screen in landscape mode on Android
    • Fixed incorrect sending of Speaker Updates when peer has left the room
    • Removed unused setters for Local Audio & Video Track Settings
    • Updated to Native Android SDK 2.5.0 & Native iOS SDK 0.4.5

    Full Changelog: 0.7.6...0.7.7

    Source code(tar.gz)
    Source code(zip)
  • 0.7.6(Sep 23, 2022)

    • Added audio output change listener callback while in Preview on Android
    • Added API to show Native Audio Output Picker on iOS
    • Corrected an issue where audio was always coming from the Earpiece instead of Built-In Speaker on iOS
    • Fixed an issue where audio gets distorted when headset is used while sharing audio playing on iOS
    • Updated HMSException class. Added canRetry attribute

    Full Changelog: 0.7.6...0.7.5

    Source code(tar.gz)
    Source code(zip)
  • 0.7.5(Aug 18, 2022)

    • Added support on iOS for sharing audio from local files on your device & from other audio playing apps
    • Added ability to apply local peer track settings while initializing HMSSDK
    • Added APIs to fetch local peer track settings
    • Fixed an issue where exiting from Preview without joining room was not releasing camera access
    • Added destroy API to cleanup Native HMSSDK instance correctly
    • Disabled Hardware Scaler on Android to correct intermittent Video tile flickering
    • Updated to Native Android SDK 2.4.8 & Native iOS SDK 0.3.3
    Source code(tar.gz)
    Source code(zip)
  • 0.7.4(Jul 29, 2022)

    Added

    • Added APIs to stream device audio in different modes
    • Added APIs to view and change the output speaker selected by the SDK to playout
    • setAudioMode API to change the Audio out mode manually between in-call volume and media volume

    Fixed

    • Calling switchCamera API leads to triggering of onSuccess callback twice
    • onRoomUpdate with type HMSRoomUpdate.ROOM_PEER_COUNT_UPDATED not getting called when peer count changes in the room
    • Peer not able to publish tracks when updated to WebRTC from HLS if rejoins after a reconnection in WebRTC Mode

    Changed

    • HMSHLSConfig is now an optional parameter while calling startHLSStreaming and stopHLSStreaming
    • The meetingUrl parameter is optional while creating the HMSHLSMeetingURLVariant instance for HMSHLSConfig. If nothing is provided HMS system will take the default meetingUrl for starting HLS stream
    • changeRoleForce permission in HMSRole is now removed and no longer used
    • recording permission in HMSRole is now broken into - browserRecording and rtmpStreaming
    • streaming permission in HMSRole is now hlsStreaming
    Source code(tar.gz)
    Source code(zip)
  • 0.7.3(Jun 23, 2022)

    • Added support for iOS Screen-share
    • Added HMSHLSRecordingConfig to perform recording while HLS Streaming
    • Updated error callback in HMSUpdateListener to onHMSError
    • Updated to Native Android SDK 2.4.2 & Native iOS SDK 0.3.1
    Source code(tar.gz)
    Source code(zip)
  • 0.7.2(Jun 2, 2022)

    • Segregated RTC Stats update notifications from HMSUpdateListener into HMSStatsListener
    • Removed room_peer_count_updated from HMSRoomUpdate enum
    • Added sessionId to the HMSRoom class
    • Updated to Native Android SDK 2.3.9 & Native iOS SDK 0.3.1
    Source code(tar.gz)
    Source code(zip)
  • 0.7.1(May 20, 2022)

    • Added RTC Stats Listener which provides info about local & remote peer's audio/video quality
    • Improved video rendering performance for Android devices
    • Correct RTMP Streaming & Recording configuration settings
    • Added support for Server-side Subscribe Degradation
    • Updated to Native Android SDK 2.3.9 & Native iOS SDK 0.2.13
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Apr 19, 2022)

    Added

    • Network Quality in preview. Network quality reports can now be requested at the preview screen. Use the returned value to determine if you should suggest people's internet is too slow to join with video etc.

    • Network Quality during calls. Peer Network Quality updates are now received during the call. Use this to show how strong any peer's internet is during the call.

    • Added HLS Recording to initial PeerList

    • onPeerUpdate and onRoomUpdate callbacks in 'HMSPreviewListener' to get info about the room at Preview screen

    • Added startedAt and stoppedAt field for Browser and SFU recording

    Fixed

    • Error Analytics events not being sent

    • Leave not finishing if SDK is in reconnection state. Hence all join calls after that was getting queued up if called on the same HMSSDK instance

    • Improved subscribe degradation so that new add sinks are handled properly when SDK is already in degraded state

    • Crash fix on starting/stopping HLS where HlsStartRecording was null

    • HLS recording status wasn't always updated when stopped

    • Rare crash when cameras are unavailable and it seemed to the app like none exist

    • Updated to Native Android SDK 2.3.4 & Native iOS SDK 0.2.9

    Source code(tar.gz)
    Source code(zip)
  • 0.6.0(Jan 25, 2022)

    Breaking Change

    • Updated Change Role APIs argument types
    • Changed Messaging APIs argument types
    • Updated argument types of changeTrackState, changeRole, acceptRoleChange, changeTrackStateForRoles APIs

    Added

    • Added HLS Support. Now you can Start/Stop HLS Streaming from Flutter SDK
    • Added support to do ScreenShare from Android device

    Changed

    • Updated callbacks for Permission based action APIs
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Jan 15, 2022)

    Breaking Change

    • Renamed SDK Public interface to HMSSDK class
    • Updated HMSConfig object which is used to join the room

    Added

    • Added APIs to change remote track status
    • Added APIs to start/stop Recording
    • Added APIs to change metadata of local peer which can be used to implement raise hand functionality
    • Added API to change name of local peer
    • Added API to get current room status
    • Added API to get peer audio/video status
    • Added new Group & Direct Peer Messaging APIs
    • Added volume setter & getter APIs on audio tracks
    • Added Action Result Listeners to notify success or failure of API invocations

    Changed

    • Updated HMSException object with isTerminal
    • Changed sendMessage API to sendBroadcastMessage to send a message to all peers in room
    • Changed HMSMessageResultListener to HMSActionResultListener in Messaging APIs
    • Video Rendering flow for Android & iOS video tracks
    • Preview API implementation

    Fixed

    • Reconnection issues wherein even when network recovered, peer could not rejoin the room
    • Cleaning up config object whenever room is joined/left
    Source code(tar.gz)
    Source code(zip)
  • 0.4.1(Dec 6, 2021)

  • 0.4.0(Oct 22, 2021)

  • 0.3.0(Oct 14, 2021)

  • 0.2.0(Oct 7, 2021)

    This version of 100ms Flutter SDK comes loaded with a bunch of features & improvements like -

    • Improved low network performance
    • Added Active Speaker listener
    • Resolved build conflicts on iOS
    • Added APIs to Change Role of a Peer
    • Added APIs to Mute Audio/Video of a Remote Peer
    • Added APIs to End a Room
    • Updated Chat Messaging APIs to enable Broadcast, Group & Personal
    • Improved Reconnection after network switch/loss
    • Improved Interruption Handling when a Meeting is ongoing
    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Aug 17, 2021)

    The first version of 100ms Flutter SDK comes power-packed with support for multiple features like -

    • Join / Leave Rooms
    • Mute / Unmute Audio / Video
    • Switch Camera
    • Chat
    • Preview Screen
    • Change Role
    • Network Switch Support
    • Subscribe Degradation in bad network scenarios
    • Error Handling and much more.

    Take it for a spin! 🥳

    Source code(tar.gz)
    Source code(zip)
Owner
100ms
100ms
Sample app to demonstrate the integration and working of Dyte SDK for mobile, using Flutter.

Flutter Sample App by dyte Sample App to demonstrate Dyte SDK in flutter Explore the docs » View Demo · Report Bug · Request Feature Table of Contents

Dyte 12 Jan 1, 2023
Munem Sarker 1 Jan 25, 2022
Real short video app with firebase and pixels API.Where you can create a short video with pixels' stock videos and also merge your audio.

Flutter Short Videos Platform Short videos platform with Flutter and Firebase. About Real short video app with firebase and pixels API.Where you can c

Ansh rathod 55 Dec 26, 2022
Android app to show movie ratings when browsing Netflix, Amazon Prime Video and other supported video streaming apps on the phone

Flutter - Movie Ratings You can get the latest Playstore version here on Playstore - or download directly - 0.4.5 Screenshots of master Search Page Fa

Jay Rambhia 71 Nov 23, 2022
YoYo Video Player is a HLS(.m3u8) video player for flutter.

YoYo Video Player YoYo Video Player is a HLS(.m3u8) video player for flutter. The video_player is a video player that allows you to select HLS video s

Ko Htut 89 Dec 23, 2022
Video player-2.2.10 - A Flutter plugin for iOS, Android and Web for playing back video on a Widget surface

Video Player plugin for Flutter A Flutter plugin for iOS, Android and Web for pl

null 2 Sep 29, 2022
Flutter classified app - A sample app to showcase classified app using flutter

Flutter Classified App Demo A sample app to showcase classified app using flutter. Demo Android Screen iOS Screen Getting Started This project is a st

FlutterDevs 271 Dec 27, 2022
DoneIt is a sample note app 📝 Flutter application 📱 built to demonstrate use of Clean Architecture tools. Dedicated to all Flutter Developers with ❤️.

DoneIt ?? DoneIt is a sample note app ?? Flutter application ?? built to demonstrate use of Clean Architecture tools. Dedicated to all Flutter Develop

Shubham Chhimpa 175 Dec 24, 2022
Flutter sample app using MLKit Vision API for text recognition

Flutter ML Kit Vision This a sample Flutter app integrated with the ML Kit Vision API for recognition of email addresses from an image. NOTE: The ML K

Souvik Biswas 21 Oct 12, 2022
Sample Flutter Drawing App which allows the user to draw onto the canvas along with color picker and brush thickness slider.

DrawApp Sample Flutter Drawing App which allows the user to draw onto the canvas along with color picker and brush thickness slider. All code free to

Jake Gough 226 Nov 3, 2022
A quick sample app on how to implement a friend list and a profile page in Flutter.

FlutterMates All code resides in the /lib folder: there's no Android / iOS specific code needed. The article, slides and how this came to be, is here.

Codemate Ltd 526 Dec 29, 2022
a sample flutter app using Injection, routing and simple authentication follows clean code and best practices

Flutter Clean Project A sample flutter app using Injection, routing and simple authentication follows clean code and best practices Features Cleaned f

Moez Shakeri 12 Jan 2, 2023
A sample flutter app with mock API for movie details

movie_app A new Flutter project. screenshots Getting Started This project is a starting point for a Flutter application. A few resources to get you st

null 2 Oct 25, 2022
Flutter package and sample app to calculate Flight CO2 emissions

Flight CO2 Calculator About This plugin provides a collection of classes that can be used to: Load a list of airports from the OpenFlights.org dataset

Andrea Bizzotto 58 Sep 11, 2022
A sample app to showcase signin-signup UI demo using clippers in flutter

flutter_signin_signup A sample app to showcase signin-signup UI demo using clippers in flutter. Screenshots Login Register Pull Requests I welcome and

Faiz Rhm 7 Nov 3, 2022
A sample app that implement Uncle Bob's Clean Architecture in Flutter

Clean Architecture for Flutter This a sample app that implement Uncle Bob's Clea

Mahmoud Saeed 28 Nov 8, 2022
Sample app for Fullscale Learning - Flutter

notes_sample A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

null 0 Dec 23, 2021
App can detect COVID via X-Ray image, just use some sample image available in the listed links.

Covid19detector : Detecting COVID-19 from X-Ray ?? App can detect COVID via X-Ray image, just use some sample image available in the listed links. And

Sanskar Tiwari 21 Jun 14, 2022
Sample Horoscope app for Sirius 2021.

Astrology magic Идея Идея сделать гороскоп ришла к нам после того, как мы решили проверить нашу совместимость в работе. Тогда мы обнаружили, что не су

Marina Ivanova 4 Jan 30, 2022