Я просто загружаю видеофайл с помощью модернизации и преобразую его в tempFile, но после преобразования видео не может воспроизводиться.
Это то, что я сделал.
@Streaming
@GET("media/attachment")
fun getAttachmentFromMedia(): Observable<ResponseBody>
fun getAttachment() {
getApi().getAttachmentFromMedia()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
if (fileType.contains("image")) {
//.. some stuff here
} else if (fileType.contains("video")) {
val tmpFile = File.createTempFile("default", ".mp4")
tmpFile.deleteOnExit()
try {
val output = FileOutputStream(tmpFile)
var read = 0
output.use { _ ->
val buffer = ByteArray(4 * 1024)
while (it.byteStream().read(buffer).let { read = it; read != -1 }) {
output.write(buffer, 0, read)
}
output.flush()
}
} finally {
it.byteStream().close()
val mediaController = MediaController(holder.itemView.context)
mediaController.setAnchorView(holder.videoView)
holder.videoView.setMediaController(mediaController)
holder.videoView.setVideoURI(Uri.fromFile(tmpFile))
holder.videoView.start()
holder.videoView.visibility = View.VISIBLE
}
}
},
{
Log.e(TAG, "getAttachment failed", it)
}
)
}
Этот код работает, когда вложение является изображением, но в видео я действительно не знаю, почему видео не воспроизводится.
Также я не знаю, почему приложение на мгновение зависает при вызове этого getAttachmentFromMedia()
api.
Я здесь правильно делаю, или я должен что-то изменить?
Любая помощь приветствуется. Благодаря.