Как конвертировать видео из URI в байты [] - PullRequest
1 голос
/ 27 октября 2011

Я снял видео и получил URI этого видео.

Как загрузить содержимое, на которое указывает этот URI, в byte[] структуру?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Посмотрите

Пример кода:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
FileInputStream fis = new FileInputStream(new File(yourUri));

byte[] buf = new byte[1024];
int n;
while (-1 != (n = fis.read(buf)))
    baos.write(buf, 0, n);

byte[] videoBytes = baos.toByteArray();
0 голосов
/ 05 июня 2019

Я понимаю, что этот вопрос очень старый, однако я искал ответ на похожий вопрос и нашел очень простой способ сделать это. Имейте в виду, что я сделал это в Kotlin, но синтаксис должен быть очень похожим.

val videoBytes = FileInputStream(File(videoPath)).use { input -> input.readBytes() }

File() занимает URI или String. В моем случае я конвертировал Uri в String.

Использование FileInputStream().use {} также закроет входной поток.

Приведенный ниже код является методом, который я использовал для преобразования Uri в String:

    private fun getVideoPathFromURI(uri: Uri): String
{
    var path: String = uri.path // uri = any content Uri

    val databaseUri: Uri
    val selection: String?
    val selectionArgs: Array<String>?
    if (path.contains("/document/video:"))
    { // files selected from "Documents"
        databaseUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
        selection = "_id=?"
        selectionArgs = arrayOf(DocumentsContract.getDocumentId(uri).split(":")[1])
    }
    else
    { // files selected from all other sources, especially on Samsung devices
        databaseUri = uri
        selection = null
        selectionArgs = null
    }
    try
    {
        val projection = arrayOf(
            MediaStore.Video.Media.DATA,
            MediaStore.Video.Media._ID,
            MediaStore.Video.Media.LATITUDE,
            MediaStore.Video.Media.LONGITUDE,
            MediaStore.Video.Media.DATE_TAKEN)

        val cursor = contentResolver.query(databaseUri,
            projection, selection, selectionArgs, null)

        if (cursor.moveToFirst())
        {
            val columnIndex = cursor.getColumnIndex(projection[0])
            videoPath = cursor.getString(columnIndex)
        }
        cursor.close()
    }
    catch (e: Exception)
    {
        Log.e("TAG", e.message, e)
    }
    return videoPath
}
...