Android读取视频文件在android中怎么读取视频文件呢?读取一个.yuv类型视频文件,并把该文件保存为byte[]类
Android读取视频文件
在android中怎么读取视频文件呢?读取一个.yuv类型视频文件,并把该文件保存为byte[]类型的;
我用的方法出现 Out of Memoryerror错误;
代码如下:
Java codepublic static byte[] getByetsFromFile(File file) {byte[]buffer = null;ByteArrayOutputStream bos =null;try{ FileInputStream fis = new FileInputStream(file);bos=new ByteArrayOutputStream();buffer = new byte[1024];int length = 0;while((length = fis.read(buffer))!= -1){bos.write(buffer, 0, length);} fis.close();bos.close(); return bos.toByteArray();//字节流转换为一个 byte数组
然后采用byte[] yuv = getByetsFromFile(new File("sdcard/foreman.yuv"));
请问大家该如何修改呢?
[解决办法]就是buffer开的太大了,分批来不要一次取完
以你这算法,就算10M能取,那100M、1G、10G呢,再好的配置也会有撑爆的一天
[解决办法]ByteArrayOutputStream 这个的问题 你看下api,你从buffer 读出来,又写的buffer中了 造成了死循环
[解决办法] 假设test.yuv保存的是320*240的yuyv格式数据,现在要将其转换为RGB565并显示到界面:
public void PlayYUVYFile()
{
int readCount=0; //已经从YUYV读取的次数
int frameCountPerTime=2;//每次读取的帧数,考虑YUYV的数据排列方式,每次读取2或2的倍数帧比较好处理
byte[] buffYUYV = new byte[1024];
File file = new File("/mnt/sdcard/test.YUV");
int length=0;
do
{
length= getByetsFromYUYVFile(file,buffYUYV,readCount,frameCountPerTime);//读取了2帧的YUV数据
byte[] buffRGB565= ConvertYUYVToRGB565(buffYUYV,frameCountPerTime);//转换后得到2帧的RGB565数据
for(int i=0;i<frameCountPerTime;i++)
{
// 将每帧的RGB565数据绘制到界面
}
readCount++;
}while(length==frameCountPerTime*2);
}
private byte[] ConvertYUYVToRGB565(byte[] buffYUYV,int frameCountPerTime)
{
byte[] buffRGB565=null;
// 将YUYV的数据转换为GRB565
// 返回GRB565数据
return buffRGB565;
}
private int getByetsFromYUYVFile(File file,byte[] buffer,int readCount,int frameCountPerTime) {
int length = 0;
FileInputStream fis =null;
try
{
fis = new FileInputStream(file);
length=fis.read(buffer, readCount*320*240*2*frameCountPerTime, 2*frameCountPerTime);
fis.close();
}
catch(Exception ex)
{
//to do
}
return length;
}