Мое приложение должно иметь возможность отправлять видео на сервер через службу загрузки. Когда я снимаю видео с камеры устройства, оно использует формат .3gp, который не поддерживается бэкэндом.
На моем Presenter я получаю удовольствие startCamera () {CLog.d ("UploadVideoPresenter.startCamera" )
val values = ContentValues()
values.put(MediaStore.Video.Media.TITLE, "yyy")
mCapturedVideoURI = (view as NewBaseFragment).activity?.contentResolver?.insert(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
values
)
CLog.d("UploadVideoPresenter.startCamera futureVideo mCapturedVideoURI: ${mCapturedVideoURI.toString()}")
val intentPicture = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
intentPicture.putExtra(
MediaStore.EXTRA_VIDEO_QUALITY,
1
) // set to high quality, it still saves in 3pg format, though
intentPicture.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedVideoURI)
(view as NewBaseFragment).startActivityForResult(intentPicture, REQUEST_CAMERA)
}
Я получаю результат в своем фрагменте
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
CLog.d("UploadVideoFragment.onActivityResult ")
(activity as ActivityFeedActivity).showUpButton(true)
(activity as ActivityFeedActivity).setActionBarIcon(R.drawable.ico_close)
if (resultCode == Activity.RESULT_OK) {
presenter.captureVideoResult(requestCode, data)
}
}
И обратно к докладчику мы снимаем видео
fun captureVideoResult(requestCode: Int, data: Intent?) {
CLog.d("UploadVideoPresenter.captureVideoResult")
data?.data?.let {
mCapturedVideoURI = data.data
}
mCapturedVideoURI.let {
val msm = MediaStorageManager((view as NewBaseFragment).activity!!)
val file = File(msm.getPath(mCapturedVideoURI!!))
currentFileName = file.name
videoBytes = getBytes(file)
CLog.d("UploadVideoPresenter.captureVideoResult videoBytes: ${(videoBytes as ByteArray).size}")
val bitmap = ThumbnailUtils.createVideoThumbnail(
msm.getPath(mCapturedVideoURI!!),
MediaStore.Images.Thumbnails.MINI_KIND
)
view.renderVideo(bitmap)
}
}
Оттуда оно отправляется на услуги загрузки. Однако отправляемый файл всегда является файлом .3gp, а наш бэкэнд работает только с файлами mp4 / WebM. Я искал об этом, но большинство ответов " установить качество 1 " или "создать выходной файл и назовите его foo.mp4", ни один из них не помог вообще. Был один способ использования ffmpeg для преобразования, но это выходит за рамки этого приложения.
Я что-то упустил перед запуском камеры?