Android: Screen shot get black image for org.webrtc.SurfaceViewRenderer

757 views Asked by At

I am trying to get screen shot programmatically. The same code is working for other screens where SurfaceViewRenderer is not present. Even in same screen other views are getting captured but not the view of SurfaceViewRenderer view.

Any help will be appreciated.

I am attaching my code below which include xml file and function which captures screen.

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/call_layout_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_light"
        android:orientation="vertical">

        <org.webrtc.SurfaceViewRenderer
            android:id="@+id/remote_gl_surface_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <FrameLayout
            android:id="@+id/screen_share_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="right"
            android:visibility="gone">

            <org.webrtc.SurfaceViewRenderer
                android:id="@+id/remote_screen_gl_surface_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </FrameLayout>

        <org.webrtc.SurfaceViewRenderer
            android:id="@+id/local_gl_surface_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </FrameLayout>

    <LinearLayout
        android:id="@+id/top_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="#20000000"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingTop="@dimen/activity_horizontal_margin"
        android:paddingBottom="@dimen/activity_horizontal_margin">

        <ImageView
            android:id="@+id/back_button"
            style="@style/ScreenBackButtonStyle"
            android:tint="@color/pure_white" />

        <LinearLayout
            android:id="@+id/top_bar_buttons_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:visibility="visible">

            <com.workapps.chat.custom.FontTextView
                android:id="@+id/contact_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ellipsize="end"
                android:maxLines="1"
                android:textColor="@color/pure_white"
                android:textSize="20sp"
                tools:text="Rudrajeet Desai" />

            <ImageButton
                android:id="@+id/start_screen_share"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_screen_share"
                android:visibility="gone"
                tools:visibility="visible" />

            <ImageButton
                android:id="@+id/stop_screen_share"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_screen_share_stop"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/screenshot"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_screen_capture"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/record_video"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginStart="@dimen/video_calls_btn_margin"
                android:layout_marginEnd="@dimen/video_calls_btn_margin"
                android:background="@null"
                android:padding="10dp"
                android:scaleType="center"
                android:src="@drawable/ic_start_recording"
                android:visibility="gone" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/outgoing_call_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:orientation="vertical"
        android:visibility="visible">

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <com.workapps.chat.custom.RoundedImageView
                android:id="@+id/contactPhotoIV"
                android:layout_width="75dp"
                android:layout_height="75dp" />

            <LinearLayout
                android:layout_width="75dp"
                android:layout_height="75dp">

                <TextView
                    android:id="@+id/contactInitialTV"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/contact_initial_background_gray"
                    android:gravity="center"
                    android:text=""
                    android:textColor="@color/pure_white"
                    android:textSize="24sp"
                    android:visibility="visible"
                    tools:text="RD" />
            </LinearLayout>
        </FrameLayout>

        <com.workapps.chat.custom.FontTextView
            android:id="@+id/calling_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textColor="@color/pure_white"
            android:textSize="20sp" />

        <com.workapps.chat.custom.FontTextView
            android:id="@+id/call_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textColor="@color/pure_white"
            android:textSize="20sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/bottom_btns_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="bottom"
        android:background="@android:color/transparent"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/swap"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_camera_swipe"
            android:visibility="invisible" />

        <ImageButton
            android:id="@+id/end_call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_video_end" />


        <ImageButton
            android:id="@+id/mute_audio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_audio_mute" />

        <ImageButton
            android:id="@+id/unmute_audio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_audio_mute_active"
            android:visibility="gone" />

        <ImageButton
            android:id="@+id/mute_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_video_feed" />

        <ImageButton
            android:id="@+id/unmute_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:padding="8dp"
            android:scaleType="centerInside"
            android:src="@drawable/ic_video_feed_off"
            android:visibility="gone" />

    </LinearLayout>
</RelativeLayout>

Following code is to capture screen shot

public void takeScreenshot2() {
        Date now = new Date();
        android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

        View rootView = getWindow().getDecorView().getRootView();

        rootView.setDrawingCacheEnabled(true);
        rootView.buildDrawingCache(true);
        Bitmap bm = Bitmap.createBitmap(rootView.getDrawingCache(true));
        bm = bm.copy(Bitmap.Config.RGB_565, true);
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

        rootView.setDrawingCacheEnabled(false);
        File f = new File(DeviceUtil.getExternalPath()+ "/" + now + ".jpg");
        try {
            f.createNewFile();
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());
            MessageHelper.showMessageToast(this,"Screen shot has taken successfully");

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Also attaching images which shows actual and expected behavior.Actual and expected behavior

1

There are 1 answers

0
manishak On

PixelCopy worked for me.

 final Bitmap bitmap = Bitmap.createBitmap(remoteVideoView.getWidth(), remoteVideoView.getHeight(),
            Bitmap.Config.ARGB_8888);
    // Make the request to copy.
    PixelCopy.request(remoteVideoView, bitmap, (copyResult) -> {
        if (copyResult == PixelCopy.SUCCESS) {
            Log.e(TAG, bitmap.toString());
            saveBitmapToFile(bitmap, contactId);
        } else {
            MessageHelper.showMessageToast(WACApplication.getApp(),
                    R.string.screen_capture_failed + copyResult);
        }
    }, new Handler());