Как получить миниатюру записанного видео в kotlin? - PullRequest
0 голосов
/ 13 февраля 2020

Я новичок в Kotlin, и только начал Kotlin. Я пытаюсь получить миниатюру из видео, которое я записал в своем приложении.

Я перепробовал почти все, что возможно, но каждый раз, когда я получаю NULL.

Итак, прежде всего, я добавил разрешение READ_EXTERNAL_STORAGE в манифест (я не знаю, может быть, это требуется или нет)

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

у меня есть видеофайл, который я создал с использованием:

fun createVideoFile(): File {

        val fileName = "GameXVideo"
        val storageDir = getExternalFilesDir(Environment.DIRECTORY_MOVIES)

        return File.createTempFile(fileName, "mp4", storageDir)

    }

, так я не сохраняю видео в физическом хранилище. Сразу после окончания записи я воспроизводлю это записанное видео, и оно работает довольно хорошо.

Следующее, что я хочу получить, это его миниатюра, я перепробовал много уже предоставленных ответов, но не могу его получить сделанный. вот что я уже пробовал:

val videoFile = intent.extras?.get("videoFile") as? File // getting videoFile from the intent
val videoPath = videoFile?.absolutePath // getting its absolute path
val videoUri = Uri.fromFile(videoFile) // getting its uri

Метод 1:

val bMap = ThumbnailUtils.createVideoThumbnail(videoPath!!, MediaStore.Video.Thumbnails.MICRO_KIND) // gives null

Метод 2:

val mMMR = MediaMetadataRetriever()
mMMR.setDataSource(this, videoUri)
val bmp = mMMR.frameAtTime // also gives null

Метод 3:

val asd: InputStream? = contentResolver.openInputStream(videoUri)
val bmap2 = BitmapFactory.decodeStream(asd)
asd?.close()

Метод 4:

val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
val cursor = this.contentResolver.query(videoUri, filePathColumn, null, null, null)
cursor?.moveToFirst()
val columnIndex = cursor?.getColumnIndex(filePathColumn[0])
val picturePath = cursor?.getString(columnIndex!!)
cursor?.close()

Ваш ПОМОЩЬ будет очень оценили. Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2020

MediaStore.Videos.Thumbnails устарело в API 29 https://developer.android.com/reference/android/provider/MediaStore.Video.Thumbnails, и они рекомендуют использовать ContentProvider.loadThumbnail https://developer.android.com/reference/android/content/ContentResolver.html#loadThumbnail (android. net .Uri,% 20 android .util.Size,% 20 android .os.CancellationSignal)

Возможно, попробуйте и дайте нам знать, сработало ли это?

...