Skip to content

Content Sharing is not working In Android #662

Open
@ajay91kukreja

Description

@ajay91kukreja

I have implemented a screen-sharing feature in my Android application, but I am not receiving a callback in onVideoTileAdded(). However, I do receive a callback in onAttendeesJoined() with my ID and #content.

I am sharing my code below. Could you please review it and help me identify any issues in my implementation?

Thank you for your time and assistance.

 mediaProjectionManager =
            (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);

startActivityForResult(
mediaProjectionManager.createScreenCaptureIntent(),
SCREEN_SHARE_REQUEST_CODE
);

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

if (requestCode == SCREEN_SHARE_REQUEST_CODE && resultCode == RESULT_OK) {
startScreenShare( resultCode,data,this);
} else {
Log.e("ScreenShare", "Screen sharing permission denied");
}
super.onActivityResult(requestCode, resultCode, data);
}

private void startScreenShare(int resultCode, Intent data, Context fragmentContext) {
    // Get DisplayManager service
    DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);

    // Initialize Logger
    ConsoleLogger logger = new ConsoleLogger(LogLevel.DEBUG);

    // Define Service Connection for Screen Sharing
    mMeetingModel.setScreenShareServiceConnection(new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            Log.d("ScreenShare", "📢 Screen Share Service Connected");

            // Ensure EGL Factory and Meeting Session are available
            if (mMeetingSessionModel.getEglCoreFactory() == null || sessionConfig == null || audioVideo == null) {
                Log.e("ScreenShare", "📢 Required dependencies are null. Cannot start screen sharing.");
                return;
            }

            // Initialize Screen Capture Source
            DefaultScreenCaptureSource screenCaptureSource = new DefaultScreenCaptureSource(
                    activity,
                    logger,
                    new DefaultSurfaceTextureCaptureSourceFactory(logger, mMeetingSessionModel.getEglCoreFactory()),
                    resultCode,
                    data,
                    displayManager,
                    mediaProjectionManager
            );

            // Mark screen share service as bound
            mMeetingModel.setScreenShareServiceBound(true);

            // Define Capture Observer
            CaptureSourceObserver screenCaptureSourceObserver = new CaptureSourceObserver() {
                @Override
                public void onCaptureStarted() {
                    Log.d("ScreenShare", "📢 Screen sharing started.");
                    if (screenShareManager != null && audioVideo != null) {
                        Log.d("ScreenShare", "📢 Screen sharing started function called .");
                  
                        mMeetingSessionModel.getMeetingSession().getAudioVideo().startContentShare(screenShareManager);
                    }
                }

                @Override
                public void onCaptureStopped() {
                    Log.d("ScreenShare", "📢 Screen sharing stopped.");
                }

                @Override
                public void onCaptureFailed(CaptureSourceError error) {
                    Log.e("ScreenShare", "📢 Screen sharing failed: " + error);
                    if (audioVideo != null) {
                        audioVideo.stopContentShare();
                    }
                }
            };

            // Set max resolution for screen share
            if (sessionConfig != null && sessionConfig.getFeatures() != null) {
                screenCaptureSource.setMaxResolution(sessionConfig.getFeatures().getContentMaxResolution());
            }

            // Initialize and Start Screen Share Manager
            screenShareManager = new ScreenShareManager(screenCaptureSource, fragmentContext);
            screenShareManager.setScreenCaptureConnectionService(mMeetingModel.getScreenShareServiceConnection());
            screenShareManager.addObserver(screenCaptureSourceObserver);
            screenShareManager.start();

        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            Log.d("ScreenShare", "📢 Screen Share Service Disconnected");
            mMeetingModel.setScreenShareServiceBound(false);
        }
    });

    // Start Screen Capture Service
    Intent intent = new Intent(fragmentContext, ScreenCaptureService.class);
    fragmentContext.startService(intent);

    // Bind Service if Connection is Available
    if (mMeetingModel.getScreenShareServiceConnection() != null) {
        fragmentContext.bindService(intent, mMeetingModel.getScreenShareServiceConnection(), Context.BIND_AUTO_CREATE);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions