首页 > 解决方案 > android读取视频OutOfMemoryError

问题描述

我尝试在 Xamarin android 中读取视频文件,以便将其转换为 string64。

我在非常小的文件(3 秒)上取得了成功,但如果文件更大(1 分钟),我有 OutOfMemoryError。

我尝试在清单文件中添加 android:largeHeap="true" android:hardwareAccelerated="false" 并修改我的代码以读取视频文件,但仍然存在问题。

未能分配 134217744 字节分配,其中 25165824 空闲字节和 126MB 直到 OOM,最大允许占用空间 94159504,增长限制 201326592。

我有什么尝试:

byte[] bytes = await System.IO.File.ReadAllBytesAsync(file.AbsolutePath);

string encoded = Base64.EncodeToString(bytes, 0);
return encoded;
using (var stream = new FileStream(file.AbsolutePath, FileMode.Open, FileAccess.Read))
{
    //var b = ReadToEnd(stream);
    //encoded = Base64.EncodeToString(b, 0);
    //return encoded;
    byte[] bytes;
    using (var memoryStream = new MemoryStream())
    {
        stream.CopyTo(memoryStream);
        bytes = memoryStream.ToArray();
    }

    string base64 = Convert.ToBase64String(bytes);
    return base64;
}
FileInputStream fis = new FileInputStream(file.AbsolutePath);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];

for (int readNum; (readNum = fis.Read(b)) != -1;)
{
      bos.Write(b, 0, readNum);
}

byte[] bytes = bos.ToByteArray();
string encoded = Base64.EncodeToString(bytes, 0);
return encoded;

您是否有想法解决此问题或在不完全加载的情况下拆分视频文件?

谢谢

标签: androidvideoout-of-memorybytelarge-files

解决方案


您真的必须先将其加载到内存中吗?直接从视频文件路径播放


推荐阅读