본문 바로가기
안드로이드 자바

[JAVA][Android] 동영상 썸네일 추출하기

by teamnova 2021. 3. 4.
728x90

안드로이드 갤러리에서 동영상을 불러오고,

불러온 동영상에서 썸네일을 추출하는 방법을 공유하겠습니다!

 

먼저 갤러리에서 동영상을 불러오기 위해서 먼저 필요한건 권한 설정입니다

 

<AndroidManifest.xml>

매니페스트 파일에 가서 외부 저장소에 대한 퍼미션을 받아야 합니다.

이때 stickode를 활용해서 permission을 추가합니다.

갤러리 사용을 위해 퍼미션 추가 - manifest.xml

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

<build.gradle (app)>

갤러리에서 동영상을 가져 오기 위해서는 권한을 허락받아야하는데,

이때 기존에 일일히 설정하는 권환 확인 방법이 아닌 라이브러리를 활용하기 위해 

build.gradle에 tedpermission 라이브러리를 추가한다

    //권할설정할때 사용할 라이브러리
    implementation "gun0912.ted:tedpermission:2.2.0"

<activity_main.xml>

레이아웃에 

동영상을 보여줄 VideoView와 썸네일을 보여주기 위한 ImageView를 추가해줍니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="2"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/video_select_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="동영상 갤러리에서 가져오기" />

    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <ImageView
        android:id="@+id/thumbnail_iv"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

 

<MainActivity.java>

먼저 findViewById를 통해 각 뷰를 참조해줘야한다. 

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    VideoView videoView;
    ImageView thumbnailIv;
    Button videoSelectBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView = findViewById(R.id.video_view);
        thumbnailIv = findViewById(R.id.thumbnail_iv);
        videoSelectBtn = findViewById(R.id.video_select_btn);
        videoSelectBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getVideo();
            }
        });
    }
}

이대로 입력하면 getVideo(); 부분이 빨갛게 표시 된다.

 

이때 getVideo라고 치면 구독한 stickode의 게시글을 볼 수 있다.

스틱코드 동영상 불러오기 코드

    private void getVideo() {
        //먼저 사용자에게 카메라 및 갤러리를 선택할때 사용할 권한을 물어야한다.
        PermissionListener permissionListener = new PermissionListener() {
            @Override
            public void onPermissionGranted() {
                // 권한 요청 성공
                //갤러리 동영상 호출
                Intent vod_intent = new Intent(Intent.ACTION_PICK);
                //ACTION_GET_CONTENT을 하게되면, 갤러리뿐 아니라 다른 저장공간에도 접근한다.
//                      vod_intent.setAction(Intent.ACTION_GET_CONTENT);
                vod_intent.setType(MediaStore.Video.Media.CONTENT_TYPE);
                startActivityForResult(vod_intent, VIDEO_FILE_REQUEST);
            }

            @Override
            public void onPermissionDenied(ArrayList<String> deniedPermissions) {
                // 권한 요청 실패
                Log.d(TAG, "onPermissionDenied: ");
                Toast.makeText(MainActivity.this, "권한요청실패", Toast.LENGTH_SHORT);
            }
        };

        TedPermission.with(this)
                .setPermissionListener(permissionListener)
                .setRationaleMessage("[설정] > [권한] 에서 권한을 허용할 수 있습니다.")
                .setDeniedMessage("동영상 및 파일을 저장하기 위하여 접근 권한이 필요합니다.")
                .setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .check();
    }

이렇게 스틱코드를 활용하면 한번에 해당 메소드가 생성된다.

갤러리에서 파일을 가져오고, 동영상을 재생하기 위해서는 이때 onActivityResult가 필요하다.

startVideo를 이용하면 

동영상 파일을 가져와서 VideoView에서 재생되는 것까지 자동으로 세팅이 된다.

이때 썸네일을 추가하기 위해서는

썸네일을 추출하는 메소드가 필요하다

안드로이드 동영상 썸네일 추출하기

createThumbnail을 활용하면 썸네일을 추출할 수 있다. 

스틱코드 안드로이드 동영상 썸네일 추출 메소드

여기까지 했다면, 동영상 uri를 받아왔던 onActivityResult 메소드 안에  아래 코드를 삽입해준다.

thumbnailIv.setImageBitmap(createThumbnail(MainActivity.this, videoUri.toString()));

안드로이드 동영상 썸네일 만들기

스틱코드를 활용해 따라하기만하면

1. 안드로이드 동영상을 갤러리에서 불러오기

2. 동영상 썸네일 추출하기 (동영상 썸네일 만들기)

모두 가능하다.

 

 


갤러리에서 동영상 불러오기 및 썸네일 추출하기

stickode.com/detail.html?no=1931

  • gallery_permission
  • getVideo
  • startVideo
  • createThumbnail