Blog スタッフブログ

Android システム開発

[Android][Kotlin]選択した動画ファイルの指定秒のサムネイル取得

システム開発担当のTFです。

※Android10対応(他バージョンの場合、細かい部分等が異なる事があります)

やり方

  • intentで動画のピッカーを立ち上げる
  • registerForActivityResultで受け取る
  • 受け取った結果から動画のuriを取得する
  • uriからメディアファイルのメタ情報を取得する
  • メタ情報から指定秒のサムネイルを取得する

参考

  [Android][Kotlin]動画ファイルを選択しファイル名とファイルサイズの取得
  【Androidでデータやファイルと戯れる】MediaMetadataRetrieverを使ってファイルのメタデータや動画のキャプチャの取得する
  動画の指定秒のフレームをBitmapとして取得する
  android ContentProviderで取得したvideoのパスを取得して再生する

サンプル

// 動画のuriの保存用変数
var videoUri : Uri? = null
// intentで動画のピッカー立ち上げ
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.setType("video/*");
activityResult.launch(intent)
// 結果の受け取り
val activityResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
	if (result.resultCode == RESULT_OK) {
		// intent 取得
		val intent = result.data
		intent?.data?.let { returnUri ->
			// 動画のuriの保存
			videoUri = returnUri
			contentResolver.query(returnUri, null, null, null, null)
		}?.use { cursor ->
			// ファイル名等の情報取得
		}
	}
}
// サムネイル取得
if (videoUri != null){
	var mediaMetadataRetriever:MediaMetadataRetriever = MediaMetadataRetriever()
	mediaMetadataRetriever.setDataSource(this, videoUri)
	// 60秒目のサムネイル生成
	var microtime:Long = (60 * 1000 * 1000).toLong()
	// サムネイル画像の取得
	var thumbnail:Bitmap? = mediaMetadataRetriever.getFrameAtTime(microtime)
}