Git Product home page Git Product logo

videosdk-rtc-android-java-sdk-example's Introduction


Documentation Firebase Discord Register

At Video SDK, we’re building tools to help companies create world-class collaborative products with capabilities of live audio/videos, compose cloud recordings/rtmp/hls and interaction APIs

Demo App

πŸ“± Download the sample Android app here: https://appdistribution.firebase.dev/i/99ae2c5db3a7e446

Features

  • Real-time video and audio conferencing
  • Enable/disable camera
  • Mute/unmute mic
  • Switch between front and back camera
  • Change audio device
  • Screen share
  • Chat
  • Raise hand
  • Recording
  • External call detection

Setup Guide


Prerequisites


Run the Sample Project

1. Clone the sample project

Clone the repository to your local environment.

git clone https://github.com/videosdk-live/videosdk-rtc-android-java-sdk-example.git

2. Modify local.properties

Generate temporary token from Video SDK Account.

auth_token = "TEMPORARY-TOKEN";

3. Run the sample app

Run the android app with Shift+F10 or the β–Ά Run from toolbar.


Key Concepts

  • Meeting - A Meeting represents Real time audio and video communication.

    Note : Don't confuse with Room and Meeting keyword, both are same thing πŸ˜ƒ

  • Sessions - A particular duration you spend in a given meeting is a referred as session, you can have multiple session of a particular meetingId.

  • Participant - Participant represents someone who is attending the meeting's session, local partcipant represents self (You), for this self, other participants are remote participants.

  • Stream - Stream means video or audio media content that is either published by local participant or remote participants.


Android Permission

Add all the following permissions to AndroidManifest.xml file.

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

    <!-- Needed to communicate with already-paired Bluetooth devices. (Legacy up to Android 11) -->
    <uses-permission
        android:name="android.permission.BLUETOOTH"
        android:maxSdkVersion="30" />
    <uses-permission
        android:name="android.permission.BLUETOOTH_ADMIN"
        android:maxSdkVersion="30" />

    <!-- Needed to communicate with already-paired Bluetooth devices. (Android 12 upwards)-->
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />


Token Generation

Token is used to create and validate a meeting using API and also initialise a meeting.

πŸ› οΈ Development Environment:

  • For development, you can use temporary token. Visit VideoSDK dashboard to generate temporary token.

🌐 Production Environment:

  • For production, you have to set up an authentication server to authorize users. Follow our official example repositories to setup authentication server, videosdk-rtc-api-server-examples

API: Create and Validate meeting

  • create meeting - Please refer this documentation to create meeting.
  • validate meeting- Please refer this documentation to validate the meetingId.

  1. For meeting initialization, you have to first initialize the VideoSDK. You can initialize the VideoSDK using initialize() method.
  VideoSDK.initialize(Context context)
  1. After successfully initialization, you can configure VideoSDK by passing token in config method
  VideoSDK.config(String token)
  1. After VideoSDK initialization and configuration, you can initialize the meeting using initMeeting() method. initMeeting() will generate a new Meeting class and the initiated meeting will be returned.
  Meeting meeting = VideoSDK.initMeeting(
                       Context context,
                       String meetingId,
                       String name,
                       boolean micEnabled,
                       boolean webcamEnabled,
                       String participantId)

// unmute mic
meeting.unmuteMic();

// mute mic
meeting.muteMic();

  • The meeting.getMics() function allows a participant to list all of the attached microphones (e.g., Bluetooth and Earphone).
 // get connected mics
 Set<AppRTCAudioManager.AudioDevice> mics = meeting.getMics();
  • Local participant can change the audio device using changeMic(AppRTCAudioManager.AudioDevice device) method of meeting class.
// change mic
 meeting.changeMic(AppRTCAudioManager.AudioDevice device);

Please consult our documentation Change Audio Device for more infromation.


// enable webcam
meeting.enableWebcam();

// disable webcam
meeting.disableWebcam();

// switch webcam
meeting.changeWebcam();

The chat feature allows participants to send and receive messages about specific topics to which they have subscribed.

// publish
meeting.pubSub.publish(String topic,String message, PubSubPublishOptions pubSubPublishoptions);

// pubSubPublishoptions is an object of PubSubPublishOptions, which provides an option, such as persist, which persists message history for upcoming participants.


//subscribe
List<PubSubMessage> pubSubMessageList = meeting.pubSub.subscribe(String topic, PubSubMessageListener pubSubMessageListener)


//unsubscribe
meeting.pubSub.unsubscribe(topic, PubSubMessageListener pubSubMessageListener);


// receiving messages
// PubSubMessageListener will be invoked with onMessageReceived(PubSubMessage message)
PubSubMessageListener pubSubMessageListener = new PubSubMessageListener() {
    @Override
    public void onMessageReceived(PubSubMessage message) {
        Log.d("#message", "onMessageReceived: " + message.getMessage());
    }
};

// Only one participant will leave/exit the meeting; the rest of the participants will remain.
meeting.leave();

// The meeting will come to an end for each and every participant. So, use this function in accordance with your requirements.
meeting.end();

By implementing MeetingEventListener, VideoSDK sends callbacks to the client app whenever there is a change or update in the meeting after a user joins.

  MeetingEventListener meetingEventListener = new MeetingEventListener() {
        @Override
        public void onMeetingJoined() {
           // This event will be emitted when a localParticipant(you) successfully joined the meeting.
        }

        @Override
        public void onMeetingLeft() {
           // This event will be emitted when a localParticipant(you) left the meeting.
        }

        @Override
        public void onParticipantJoined(Participant participant) {
           // This event will be emitted when a new participant joined the meeting.
           // [participant]: new participant who joined the meeting
        }

        @Override
        public void onParticipantLeft(Participant participant) {
           // This event will be emitted when a joined participant left the meeting.
           // [participant]: participant who left the meeting
        }

        @Override
        public void onPresenterChanged(String participantId) {
           // This event will be emitted when any participant starts or stops screen sharing.
           // [participantId]: Id of participant who shares the screen.
        }

        @Override
        public void onSpeakerChanged(String participantId) {
           // This event will be emitted when a active speaker changed.
           // [participantId] : Id of active speaker
        }

        @Override
        public void onRecordingStarted() {
           // This event will be emitted when recording of the meeting is started.
        }

        @Override
        public void onRecordingStopped() {
           // This event will be emitted when recording of the meeting is stopped.
        }

        @Override
        public void onExternalCallStarted() {
           // This event will be emitted when local particpant receive incoming call.
        }

        @Override
        public void onMeetingStateChanged(String state) {
           // This event will be emitted when state of meeting changes.
        }
    };

By implementing ParticipantEventListener, VideoSDK sends callbacks to the client app whenever a participant's video, audio, or screen share stream is enabled or disabled.

  ParticipantEventListener participantEventListener = new ParticipantEventListener() {
       @Override
       public void onStreamEnabled(Stream stream) {
          // This event will be triggered whenever a participant's video, audio or screen share stream is enabled.
       }

       @Override
       public void onStreamDisabled(Stream stream) {
          // This event will be triggered whenever a participant's video, audio or screen share stream is disabled.
       }
   };

If you want to learn more about, read the complete documentation of Android VideoSDK


Project Description


Note :

  • master branch: Better UI with One-to-One and Group call experience.
  • v1-code-sample branch: Simple UI with Group call experience.

App behaviour with different meeting types

  • One-to-One meeting - The One-to-One meeting allows 2 participants to join a meeting in the app.

  • Group meeting - The Group meeting allows 2 or more participants to join a meeting in the app.


Project Structure

We have 3 packages :

  1. OneToOneCall - OneToOneCall package includes all classes/files related to OneToOne meeting.
  2. GroupCall - GroupCall package includes all classes/files related to Group meeting.
  3. Common - Common package inclues all the classes/files that are used in both meeting type.

1. Create or Join Meeting

  • NetworkUtils.java - This class is used to call the api to generate token,create and validate the meeting.

  • CreateOrJoinActivity.java and activity_create_or_join.xml

    • This activity is used to ask permissions to the partcipant,and to initiate webcam and mic status.
    • CreateOrJoinFragment,CreateMeetingFragment,JoinMeetingFragment will be bound to this activity.
  • CreateOrJoinFragment.java and fragment_createorjoin.xml - This fragment will include

    • Create Meeting Button - This button will navigate to CreateMeetingFragment.
    • Join Meeting Button - This button will navigate to JoinMeetingFragment.

  • CreateMeetingFragment.java and fragment_create_meeting.xml - This fragement will include

    • Dropdown to select meeting type - This dropdown will give choice for meeting type.
    • EditText for ParticipantName - This edit text will contain name of the participant.
    • Create Meeting Button - This button will call api for create a new meeting and navigate to OneToOneCallActivity or GroupCallActivity according to user choice.

  • JoinMeetingFragment.java and fragment_join_meeting.xml - This fragement will include

    • Dropdown to select meeting type - This dropdown will give choice for meeting type.
    • EditText for ParticipantName - This edit text will contain name of the participant.
    • EditText for MeetingId - This edit text will contain the meeting Id that you want to join.
    • Join Meeting Button - This button will call api for join meeting with meetingId that you provided and navigate to OneToOneCallActivity or GroupCallActivity according to user choice.

2. ParticipantList

3. Dialogs




Examples

Examples for Conference

Examples for Live Streaming


Documentation

Read the documentation to start using Video SDK.


Community

  • Discord - To get involved with the Video SDK community, ask questions and share tips.
  • Twitter - To receive updates, announcements, blog posts, and general Video SDK tips.

videosdk-rtc-android-java-sdk-example's People

Contributors

ahmedbhesaniya97 avatar arjun-kava avatar ishabodiwala avatar mrsurana avatar rajansurani avatar shuaixiaoqiang avatar videosdkadmin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

videosdk-rtc-android-java-sdk-example's Issues

Not stopping "org.webrtc.Logging: EglRenderer: Duration.." after calling meeting.leave()

2022-01-20 14:44:14.355 25534-25817/app.video I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2022-01-20 14:44:15.582 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 2049 us. Average swapBuffer time: 1030 us.
2022-01-20 14:44:15.618 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:28.162 25534-25534/app.video W/Binder:25534_3: type=1400 audit(0.0:160317): avc: denied { read } for name="u:object_r:vendor_camera_prop:s0" dev="tmpfs" ino=15030 scontext=u:r:untrusted_app:s0:c190,c257,c512,c768 tcontext=u:object_r:vendor_camera_prop:s0 tclass=file permissive=0
2022-01-20 14:44:16.355 25534-25817/app.video I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2022-01-20 14:44:18.356 25534-25817/app.video I/org.webrtc.Logging: CameraStatistics: Camera fps: 30.
2022-01-20 14:44:28.177 25534-25587/app.video E/libc: Access denied finding property "vendor.camera.aux.packagelist"
2022-01-20 14:44:28.179 25534-25817/app.video I/org.webrtc.Logging: Camera2Session: Stop done
2022-01-20 14:44:28.179 25534-25817/app.video I/org.webrtc.Logging: Camera2Session: Camera device closed.
2022-01-20 14:44:31.594 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4005 ms. Frames received: 11. Dropped: 0. Rendered: 11. Render fps: 2.7. Average render time: 4024 us. Average swapBuffer time: 2357 us.
2022-01-20 14:44:31.631 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4005 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:35.602 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4007 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:35.639 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4007 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:39.613 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:39.648 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4008 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:43.623 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4009 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:43.657 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4008 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:47.634 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:47.667 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:51.645 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:51.679 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4011 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:55.656 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4011 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:55.688 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4009 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:59.668 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4011 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:44:59.699 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4011 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:45:03.678 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4010 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:45:03.708 25534-25761/app.video I/org.webrtc.Logging: EglRenderer: svrRemoteDuration: 4008 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
2022-01-20 14:45:07.684 25534-25762/app.video I/org.webrtc.Logging: EglRenderer: svrLocalDuration: 4006 ms. Frames received: 0. Dropped: 0. Rendered: 0. Render fps: .0. Average render time: NA. Average swapBuffer time: NA.
................

ANR when calling meeting?.leave()

Hello!
I got an error while calling meeting?.leave() to leave room.
Permission WRITE_EXTERNAL_STORAGE, CAMERA, RECORD_AUDIO granted.

01-20 09:55:36.706 1058 921 921 I /system/bin/tombstoned: received crash request for pid 15011
01-20 09:55:36.707 10446 15514 15514 I crash_dump64: performing dump of process 15011 (target tid = 15011)
01-20 09:55:36.708 1047 4722 4722 I CameraService: disconnect: Disconnected client for camera 1 for PID 15011
01-20 09:55:36.708 10446 15011 15282 E libc : Access denied finding property "vendor.camera.aux.packagelist"
01-20 09:55:36.692 10446 15011 15011 W Binder:15011_4: type=1400 audit(0.0:152853): avc: denied { read } for name="u:object_r:vendor_camera_prop:s0" dev="tmpfs" ino=15030 scontext=u:r:untrusted_app:s0:c190,c257,c512,c768 tcontext=u:object_r:vendor_camera_prop:s0 tclass=file permissive=0
01-20 09:55:36.710 10446 15011 15400 I org.webrtc.Logging: Camera2Session: Stop done
01-20 09:55:36.711 10446 15011 15400 I org.webrtc.Logging: Camera2Session: Camera device closed.
01-20 09:55:36.736 10446 15514 15514 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-20 09:55:36.736 10446 15514 15514 F DEBUG : Build fingerprint: 'xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.5.0.PFLCNXM:user/release-keys'
01-20 09:55:36.736 10446 15514 15514 F DEBUG : Revision: '0'
01-20 09:55:36.736 10446 15514 15514 F DEBUG : ABI: 'arm64'
01-20 09:55:36.736 10446 15514 15514 F DEBUG : pid: 15011, tid: 15011, name: >>> <<<
01-20 09:55:36.736 10446 15514 15514 F DEBUG : signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0x756fd901b2
01-20 09:55:36.736 10446 15514 15514 F DEBUG : x0 0000007559bf3100 x1 0000007fcb3ee6b0 x2 0000007fcb3ee620 x3 0000000000000000
01-20 09:55:36.736 10446 15514 15514 F DEBUG : x4 0000000000000000 x5 0000000000000000 x6 0000007fcb3ee770 x7 000000757e0e8c64
01-20 09:55:36.736 10446 15514 15514 F DEBUG : x8 000000756fd901b2 x9 0000000000000001 x10 0000000000000000 x11 0000000000000000
01-20 09:55:36.737 10446 15514 15514 F DEBUG : x12 0000000000000000 x13 0000000000000030 x14 0000000000000000 x15 aaaaaaaaaaaaaaab
01-20 09:55:36.737 10446 15514 15514 F DEBUG : x16 000000755f7ea550 x17 00000075ff74490c x18 0000000000000008 x19 0000007fcb3ee618
01-20 09:55:36.737 10446 15514 15514 F DEBUG : x20 0000007fcb3ee6b0 x21 0000007559bf3100 x22 0000007fcb3eea30 x23 00000075629928d5
01-20 09:55:36.737 10446 15514 15514 F DEBUG : x24 0000000000000010 x25 00000076047095e0 x26 000000757e80dca0 x27 0000000000000004
01-20 09:55:36.737 10446 15514 15514 F DEBUG : x28 0000007fcb3ee760 x29 0000007fcb3ee5e0
01-20 09:55:36.737 10446 15514 15514 F DEBUG : sp 0000007fcb3ee5e0 lr 000000755ee0f330 pc 000000756fd901b2
01-20 09:55:37.231 10446 15514 15514 F DEBUG :
01-20 09:55:37.231 10446 15514 15514 F DEBUG : backtrace:
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #00 pc 0000000000d831b2 /vendor/lib64/libllvm-glnext.so
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #1 pc 00000000001c032c /data/app/-KEgOWAeBcke2w874tTWNtA==/lib/arm64/libmediasoupclient_so.so
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #2 pc 0000000000261ca0 /data/app/-KEgOWAeBcke2w874tTWNtA==/lib/arm64/libmediasoupclient_so.so
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #3 pc 0000000000261148 /data/app/-KEgOWAeBcke2w874tTWNtA==/lib/arm64/libmediasoupclient_so.so
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #4 pc 000000000055fde0 /system/lib64/libart.so (art_quick_generic_jni_trampoline+144)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #5 pc 000000000055704c /system/lib64/libart.so (art_quick_invoke_static_stub+604)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #6 pc 00000000000cfce8 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+232)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #7 pc 00000000002803c0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #8 pc 000000000027a3c8 /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+968)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #9 pc 000000000052791c /system/lib64/libart.so (MterpInvokeStatic+204)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #10 pc 0000000000549514 /system/lib64/libart.so (ExecuteMterpImpl+14612)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #11 pc 0000000000372e4c /dev/ashmem/dalvik-classes20.dex extracted in memory from /data/app/k-KEgOWAeBcke2w874tTWNtA==/base.apk!classes20.dex (deleted) (org.webrtc.VideoTrack.removeSink+36)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #12 pc 00000000002540cc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1976858083+488)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #13 pc 0000000000259bc0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #14 pc 000000000027a3ac /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+940)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #15 pc 0000000000526418 /system/lib64/libart.so (MterpInvokeVirtual+588)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #16 pc 0000000000549394 /system/lib64/libart.so (ExecuteMterpImpl+14228)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #17 pc 00000000000192e2 /dev/ashmem/dalvik-classes11.dex extracted in memory from /data/app/-KEgOWAeBcke2w874tTWNtA==/base.apk!classes11.dex (deleted) ($setLocalListeners$1.onStreamDisabled+70)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #18 pc 00000000002540cc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1976858083+488)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #19 pc 0000000000259bc0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #20 pc 000000000027a3ac /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+940)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #21 pc 0000000000526418 /system/lib64/libart.so (MterpInvokeVirtual+588)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #22 pc 0000000000549394 /system/lib64/libart.so (ExecuteMterpImpl+14228)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #23 pc 00000000002d3d3c /dev/ashmem/dalvik-classes20.dex extracted in memory from /data/app/-KEgOWAeBcke2w874tTWNtA==/base.apk!classes20.dex (deleted) (live.videosdk.rtc.android.Participant.lambda$deleteStream$1$Participant+36)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #24 pc 00000000002540cc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1976858083+488)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #25 pc 0000000000259bc0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #26 pc 000000000027a3ac /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+940)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #27 pc 0000000000526418 /system/lib64/libart.so (MterpInvokeVirtual+588)
01-20 09:55:37.231 10446 15514 15514 F DEBUG : #28 pc 0000000000549394 /system/lib64/libart.so (ExecuteMterpImpl+14228)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #29 pc 00000000002d2c08 /dev/ashmem/dalvik-classes20.dex extracted in memory from /data/app/-KEgOWAeBcke2w874tTWNtA==/base.apk!classes20.dex (deleted) (live.videosdk.rtc.android.-$$Lambda$Participant$bAxP1MS9mmUIwjvSlYKckuuHzt8.run+8)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #30 pc 00000000002540cc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1976858083+488)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #31 pc 0000000000516cac /system/lib64/libart.so (artQuickToInterpreterBridge+1020)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #32 pc 000000000055fefc /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #33 pc 000000000007fe40 /dev/ashmem/dalvik-jit-code-cache (deleted) (android.os.Handler.handleCallback+64)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #34 pc 000000000000fb0c /dev/ashmem/dalvik-jit-code-cache (deleted) (android.os.Handler.dispatchMessage+60)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #35 pc 0000000000556d88 /system/lib64/libart.so (art_quick_invoke_stub+584)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #36 pc 00000000000cfcc8 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #37 pc 00000000002803c0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #38 pc 000000000027a3c8 /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+968)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #39 pc 0000000000526418 /system/lib64/libart.so (MterpInvokeVirtual+588)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #40 pc 0000000000549394 /system/lib64/libart.so (ExecuteMterpImpl+14228)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #41 pc 0000000000be3e54 /system/framework/boot-framework.vdex (android.os.Looper.loop+414)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #42 pc 00000000002540cc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1976858083+488)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #43 pc 0000000000259bc0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #44 pc 000000000027a3ac /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+940)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #45 pc 000000000052791c /system/lib64/libart.so (MterpInvokeStatic+204)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #46 pc 0000000000549514 /system/lib64/libart.so (ExecuteMterpImpl+14612)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #47 pc 000000000042e506 /system/framework/boot-framework.vdex (android.app.ActivityThread.main+214)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #48 pc 00000000002540cc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1976858083+488)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #49 pc 0000000000516cac /system/lib64/libart.so (artQuickToInterpreterBridge+1020)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #50 pc 000000000055fefc /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #51 pc 000000000055704c /system/lib64/libart.so (art_quick_invoke_static_stub+604)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #52 pc 00000000000cfce8 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+232)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #53 pc 000000000045dcfc /system/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #54 pc 000000000045f750 /system/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+1440)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #55 pc 00000000003ef450 /system/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+52)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #56 pc 000000000078eed4 /system/framework/arm64/boot-core-oj.oat (offset 0x2dc000) (java.lang.Class.getDeclaredMethodInternal [DEDUPED]+180)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #57 pc 0000000000556d88 /system/lib64/libart.so (art_quick_invoke_stub+584)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #58 pc 00000000000cfcc8 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #59 pc 00000000002803c0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #60 pc 000000000027a3c8 /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+968)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #61 pc 0000000000526418 /system/lib64/libart.so (MterpInvokeVirtual+588)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #62 pc 0000000000549394 /system/lib64/libart.so (ExecuteMterpImpl+14228)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #63 pc 0000000001299ac4 /system/framework/boot-framework.vdex (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #64 pc 00000000002540cc /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1976858083+488)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #65 pc 0000000000516cac /system/lib64/libart.so (artQuickToInterpreterBridge+1020)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #66 pc 000000000055fefc /system/lib64/libart.so (art_quick_to_interpreter_bridge+92)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #67 pc 000000000248a928 /system/framework/arm64/boot-framework.oat (offset 0xa3d000) (com.android.internal.os.ZygoteInit.main+2104)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #68 pc 000000000055704c /system/lib64/libart.so (art_quick_invoke_static_stub+604)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #69 pc 00000000000cfce8 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+232)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #70 pc 000000000045dcfc /system/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #71 pc 000000000045d95c /system/lib64/libart.so (art::InvokeWithVarArgs(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+424)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #72 pc 0000000000362d70 /system/lib64/libart.so (art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list)+652)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #73 pc 00000000000b2768 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+116)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #74 pc 00000000000b5304 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vectorandroid::String8 const&, bool)+924)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #75 pc 0000000000002528 /system/bin/app_process64 (main+2012)
01-20 09:55:37.232 10446 15514 15514 F DEBUG : #76 pc 00000000000c2578 /system/lib64/libc.so (__libc_init+88)
01-20 09:55:37.878 1000 7730 7730 D SignalClusterView: updateMobileTypeImage 0
01-20 09:55:37.880 1000 7730 7730 I chatty : uid=1000(system) com.android.systemui identical 4 lines

Are you any solution for this issue?

Video quality issue at receivers end

I have streaming video in HD quality with this config.

CustomStreamTrack videoCustomTrack = VideoSDK.createCameraVideoTrack("h720p_w1280p", "front", this)

the quality of local connection is very good(camera view at local phone). but is getting degraded on the other end despite of using "h720p_w1280p" config.

what is the possible way to preserve the quality over the streaming?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.