当前位置: 首页 > 知识库问答 >
问题:

android读取视频OutOfMemory错误

钮承恩
2023-03-14

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

我成功地处理了非常小的文件(3秒钟),但如果文件更大(1分钟),我会出现OutOfMemory错误。

我尝试在清单文件中添加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;

你有没有办法解决这个问题,或者在不完全加载的情况下分割视频文件?

谢谢

共有1个答案

柯默
2023-03-14

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

 类似资料:
  • 本文向大家介绍opencv实现读取视频保存视频,包括了opencv实现读取视频保存视频的使用技巧和注意事项,需要的朋友参考一下 不得不说opencv是个强大的东东,以前做一个项目的一个模块时使用到进行图形处理,这次是想将一个视频的播放放慢,以前在网上看到opencv有这个功能,今天就不小心尝试了下,东西不多,主要是做个小记录还有一点要注意的小问题说一下,代码不多,基本上也都是copy的网上的 有几

  • 本文向大家介绍opencv3/C++实现视频读取、视频写入,包括了opencv3/C++实现视频读取、视频写入的使用技巧和注意事项,需要的朋友参考一下 视频读取 视频读取,主要利用VideoCapture类下的方法打开视频并获取视频中的帧,具体示例如下: capture.open()的参数为0时为读取摄像头: 视频写入 通过摄像头获取视频,然后通过capture.get(CV_CAP_PROP_F

  • 本文向大家介绍python读取视频流提取视频帧的两种方法,包括了python读取视频流提取视频帧的两种方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下 方法一:通过imageio库和skimage库 1. 安装环境: pip install imageio pip install skimage 这时候会报错Pl

  • 本文向大家介绍python读取和保存视频文件,包括了python读取和保存视频文件的使用技巧和注意事项,需要的朋友参考一下 为了获取视频,应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。 一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。之后,你就可以一帧一帧的捕获视

  • 我目前正在开发一个需要解码UDP多播RTSP流的应用程序。目前,我可以通过ffplay查看RTP流 但是,我尝试使用FFMPEG通过(为了简洁起见,删除了错误检查和清理代码)打开UDP流。 这种方法适用于包含原始编码视频流的文件输入,但对于UDP多播RTSP流,它无法通过对执行的任何错误检查。请告知...

  • 在使用Python的OpenCV中,当网络摄像头的fps和目录中的视频文件相同时,为什么视频文件以快进播放,而网络摄像头继续以正常速率显示帧?cv2扮演什么角色。waitKey()函数在此处播放