问题描述
我尝试在Xamarin android中读取视频文件,以便将其转换为string64。
使用很小的文件(3秒)我可以成功,但是如果文件很大(1分钟),我会出现OutOfMemoryError。
我尝试在清单文件中添加android:largeHeap =“ true” android:hardwareAccelerated =“ false”,并修改我的代码以读取视频文件,但仍然是问题。
在OOM之前无法分配134217744字节的分配,其中包含25165824可用字节和126MB,最大允许占用空间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,readNum);
}
byte[] bytes = bos.ToByteArray();
string encoded = Base64.EncodetoString(bytes,0);
return encoded;
谢谢
解决方法
您真的必须先将其加载到内存中吗?直接从视频文件路径播放