Android Camera中的onPreviewFrame里的byte[] data的预处理

是这样的,我正在做Android视频这块,因为我要实时采集视频,所以会调用到Android的Camera的onPreviewFrame(byte[] data, Camera camera),此时我手机的分辨率大概是1216x912,我会将data先转成yuv420p格式的,因为录出来的是yuv420sp,转完之后,先贴下代码:
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{

int width = camera.getParameters().getPreviewSize().width;
int height = camera.getParameters().getPreviewSize().height;
int length = width * height * 3 / 2;
byte[] dataYUV420P = new byte[width * height * 3 / 2];


// 每一帧的大小   
int framesize = width * height;
int i = 0, j = 0;

// 这块没问题--Y
for (i = 0; i < framesize; i++) {
dataYUV420P[i] = data[i];
}
// U
i = 0;
for (j = 0; j < framesize/2; j+=2) {
dataYUV420P[i + framesize*5/4] = data[j+framesize];
i++;
}       
i = 0;
for (j = 1; j < framesize/2;j+=2) {
dataYUV420P[i+framesize] = data[j+framesize];
i++;
}

this.mMediaRecorder.onPreviewFrame1(dataYUV420P, camera);

}
之后,this.mMediaRecorder.onPreviewFrame1函数会将dataYUV420P数据通过IO函数写入一个文件中,比如1.video
问题是,现在我调用ffmpeg的命令:ffmpeg -s 480x480,输出的视频是乱码;可是我如果换成ffmpeg -s 1216x912,视频可以输出,不过视频貌似被截取了,时间有点短。我猜测原因是我用Camera录制时,由于手机的previewSize的大小是1216*912,所以写入1.video的数据多了,而我显示只用到了480x480,所以我想问下,我应该怎么进行转换将1215x912,弄成480x480.

网上有人说用ffmpeg的lwscale进行转换,可是我不知道命令,有哪位大神可以提供一下命令吗,我测试一下。

0

2个回答

我最近在学习视频添加水印 不知道如何用ffmpeg 能加我q交流一下吗 578006403

0

已经root了,直接从手机上看就是了

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android camera onPreviewFrame后生成角度错误的图像后纠正方法
核心方法: 1.将public void onPreviewFrame(byte[] data, Camera camera)中data[]转为bitmap,此方法是博主目前发现转换速度最快的方法: if (yuvType == null) {             yuvType = new Type.Builder(rs, Element.U8(rs)).setX(data.lengt
在onPreviewFrame中获取图片
在onPreviewFrame中获取图片 在onPreviewFrame获取帧图片 byte[]转bitmap的坑 &amp;amp;gt; 有个需求,要求在扫码页做到拍照的操作,满心欢喜的onPreviewFrame-&amp;amp;gt;decodeByteArray(data) -&amp;amp;gt;savaBitmap,完成,突如其来的告诉我bitmap==null,但是进行扫码处理是正常的,数据源没有问题,搜了很久,...
为什么onPreviewFrame()回调上来的YUV数据大小出错
答:因为调用PreviewCallback的方法有三种,之前采用的是setPreviewCallback,而没有使用setPreviewCallbackWithBuffer进行内存优化。 使用步骤: 1、先设置回调: mCamera.setPreviewCallbackWithBuffer(this) 2、增加buffer:  mCamera.addCallbackBuffer(new
安卓摄像头 data 转bitmap
public static Bitmap getBitMap(byte[] data, Camera camera, boolean mIsFrontalCamera) { int width = camera.getParameters().getPreviewSize().width; int height = camera.getParameters().getPreviewSi
困扰一天啦,求大神不吝指导,Camera的onPreviewFrame中的问题
布上我初始化的函数 protected void initCamre() { camera = Camera.open(0); camera.setDisplayOrientation(90); Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(720, 1280);
Camera中onPreviewFrame()方法的视频方向旋转
转载链接:Camera中onPreviewFrame()方法的视频方向旋转 1、旋转90度 private byte[] rotateYUV420Degree90(byte[] data, int imageWidth, int imageHeight) { byte [] yuv = new byte[imageWidth*ima...
Android将camera获取到的YuvData在jni中转化为Mat
Android中可以通过camera获取图像,并实时处理,不同的手机camera支持的的图像格式不同,可以采用getCameraPreviewFormat来得到preview支持的图像编码格式,Android默认使用NV21(yuv420sp)的图像格式,因为大部分手机都支持。 为了达到实时处理的目的,很多时候我们将得到的yuv数据直接传入jni中的c++使用,减少上层转化图像格式的过程yuv4
Android使用camera录像时保存数据到手机上
public viod onPreviewFrame( byte[] data, Camera camera) { if (data == null) { logger.error("Null data received on callback, " + " invalid buffer size ?
【Android】Android上Camera获取byte数据在native层进行转换
public void onPreviewFrame(byte[] data, Camera camera) { if (data != null) { int imageWidth = mCamera.getParameters().getPreviewSize().width; int imageHeight = mCamera.get
Android OpenGL YUV 旋转花屏解决、Camera获取图像
一个自拍app,如何获取我们的surface view的截屏?在Camera的onPreviewFrame回调中(继承的PreviewCallback接口)。我们可以获取到data数组,里面存放着就是实时的图片data数组转文件为null,且转bitmap也为null怎么办?data数组里确实存放的是图片,但是格式不对,是YUV420格式。需要进行一个转换。所以采用open gl包下的YuvIma...
onPreviewFrame报GC问题解决方法
CameraPreView遇到的一些问题 1、onPreviewFrame运行一段时间后便不进入回调函数 tip:1.在onPreviewFrame函数里加入mCamera.addCallbackBuffer(data); 2.surfaceChanged里加入mCamera.addCallbackBuffer(gBuffer); mCamera.setPrevie
超实用!Android Camera2.0新API与Camera旧API使用对比总结
Android Camera2.0新API与旧Camera使用对比总结 前言: Camera2.0新API是Android5.0(L)API Level 21 推出来并用以取代之前的CameraAPI,在该版本之后Deprecate掉了旧的Camera.java相关的接口。从底层的实现就大不一样,详情请见官方文档。 Camera API 2.0与旧API使用上的差异对比(本文重点)
有关onPreviewFrame未被调用的问题
新手求教。 [问题点数:100分,结帖人wuheng0316]             不显示删除回复           显示所有回复            显示星级回复           显示得分回复            只显示楼主          收藏   camera.setPreviewCallback(MainActivit
Camera中的一些回调方法
1.  Camera.PictureCallback() ,图像捕获回调,是一种最安全的回调方法, 它确保会被调用,并且在压缩图像时被调用。 2.  Camera.PreviewCallback(),定义了onPreviewFrame(byte[] data, Camera camera) 方法,当存在预览帧时调用该方法,可以传入保存当前图像像素的字节数组。在Camera对象上,有3种不同的方式
安卓采集摄像头画面生成MP4文件
主要用的安卓类有MediaCodec和MediaMuxer,MediaCodec负责视频数据编解码,MediaMuxer负责将编码后的数据封装成MP4文件,采集摄像头用的是camera,并且用surfaceview进行预览 1、初始化surfaceview与camera,预览摄像头的画面 private void initSurfaceHolder() { sur...
Android中摄像头获取的YUV数据转Opencv的Mat
背景 在onPreviewFrame方法中获取的byte[] data数据为420sp格式,排列顺序为width*height个Y(亮度信息,就是我们常见的灰度图像),后面是UV(颜色信息),4个Y共享一个U和V,故byte数组的总大小是width*height*2/3。 420sp通常是如下形式(UV交替属于NV12)(或者VU交替属于NV21): [ [
使用安卓Camera类完成视频截图功能
最近公司在VOIP视频上传的功能里加视频截图的功能。下面我来介绍一下我的实现思路和实现过程。
Camera 采集数据通过 GLSurfaceView 预览 (二)
上一篇文章 Camera 采集数据通过 textureview 预览,手动对焦、自动对焦 (一)中使用了 textureView 进行预览,但是如果想做更多的功能,比如说增加水印、滤镜、离屏渲染等等,这使用 GLSurfaceView 预览更加合适,所以这篇文章是在上一篇的代码的基础上进行修改替换,并且这里不介绍 GLSurfaceView 和 Android GLES 的相关知识。...
保存onPreviewFrame(byte[] data, Camera camera)中的data
android camera video 怎么保存onPreviewFrame(byte[] data, Camera camera)中的data到手机本地
Android拍照后获得的图片旋转90度问题
最近一直在做一个扫描的项目,用zxing实现二维码的扫描,需求要实现拍照并且扫描名片,发现拍照出来的照片是旋转的。一直找原因找不到,在国外一个论坛看到说是camera获取data数据是横向的,没有经过处理所以显示就是旋转的。想了好久还是不会实现data的旋转,索性就将bitmap进行旋转以达到正面显示的效果吧。下面看代码: Camera.PictureCallback myJpegCallb
android Camera相关问题及NV12剪裁旋转
1、SurfaceView不显示画面,可能是xml设置了背景色,这回遮挡视频画面。 2、如果想保存方形视频,而又不是通过缩放,可以在预览的适合遮挡不需要的画面。录制的适合剪裁一下。 3、因为Camera数据是按横屏给,竖屏的适合,画面会选择90°,StartPreview前设置:mCamera.setDisplayOrientation(90); 4、网上找的几个NV
Android4.4 Camera callback注册和回调过程分析
一、注册过程camera的callback是在cameraclient中的initialize接口中注册的,而这个接口是由上层初始化调用的。status_t CameraClient::initialize(camera_module_t *module) { int callingPid = getCallingPid(); status_t res; LOG1("Camer
Camera onPreview中byte[] 转换为Bitmap 出现的内存溢出处理方法
Camera onPreview中byte[] 转换为Bitmap 出现的内存溢出处理方法 先看看有几种方法处理转换为Bitmap 第一种转换,但这一种最容易出现的就是图片过大然后导致内存不够分配 Bitmap bitmap = null; ByteArrayOutputStream baos=null; try { ...
Android 从Camera获取视频数据用SurfaceView显示
1、自定义一个SurfaceViewpackage com.test.camera.preview;import android.content.Context; import android.graphics.PixelFormat; import android.hardware.Camera.CameraInfo; import android.util.AttributeSet; i
Android性能优化之实现拥有Looper的线程--HandlerThread
1 HandlerThread 1.1 定义   HandlerThread是能够新建拥有Looper的Thread,这个Looper能够用来新建其他的Handler。HandlerThread本质是一个线程,在线程内部,代码是串行处理的。(线程中的Looper)需要注意的是,新建的时候需要被回调。 1.2 特点 (1) HandlerThread将loop转到子线程中处理,目的就是分...
Android中直播视频技术探究之---摄像头Camera视频源数据采集解析
在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,Android中使用摄像头的场景很多,在没有直播这个行业出现之前,之前用到摄像头的最多就两个场景,一个是二维码扫描,一个是美颜拍照类的应用。那么这里就来看看Android中的摄像头的用法,以及如何进行数据采集进行
Android系统自带的MediaRecorder结合Camera实现视频录制及播放功能。
近期,公司项目新增了需求,需要视频录制,然后保存到本地,再播放...。 看了很多其他的框架,说不出好坏,应该说各有千秋吧。但我觉得还是原生的靠谱,就是谷歌系统自带的MediaRecorder。 不多说上代码吧(已经测试,没问题)。 代码没什么复杂的,都是些基本的逻辑问题,注释就比较少,理清逻辑就很简单了。 布局文件: xml version="1.0" encoding="u
Camera 仿微信相机 利用MediaCodec API 从录制MP4到解析播放
本文是在 Camera 采集数据通过 textureview 预览,手动对焦、自动对焦 (一) 的基础上,
camera1 实时预览取帧
安卓相机5.0以后加入了camera2类,但低版本还是用之前的camera1,所以直接选择camera1来开发! 直奔主题,在开发中遇到的坑! 1,安卓提供了camera.setPreviewCallbac这个回调写出这个回调后,在onPreviewFrame这里拿到摄像头获取的视频帧! //cameraInst 相机对象cameraInst.setPreviewCallback(ne
使用OpenGLES 在 android 上显示摄像头滤镜效果
这是一份 使用opengles 绘制摄像头数据的代码,并使用滤镜处理了摄像头的效果,使用GPU绘制,减少cpu的占用
Android YUV使用总结之Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别
工作问题接触到图像这一块,需要对手机摄像头采集的原始帧做Rotate或者scale,但无奈对此的了解少之又少,于是网上搜了一顿,完事后将最近所学总结一下,以方便之后的人别踩太多坑。         首先想要了解YUV为何物,请猛戳:https://msdn.microsoft.com/en-us/library/aa904813(VS.80).aspx     上面的链接中,微
Android利用硬解硬编和OpenGLES来高效的处理MP4视频
最近工作中遇到一个问题,就是要对视频增加视频特效,实现类似于抖音的效果,抖音的效果由其他同事实现,我的工作重心在视频的处理,特效的集成。按照之前的思路很快就实现了这个功能,但是实际应用到项目中时却遇到各种问题。于是就有了这篇博客。 遇到的问题 说是各种问题,特效方便的不管,我所遇到的视频处理的问题主要为以下两个方面: 处理过程耗时较长。因为处理的时候是按照之前的思路,用MediaCod
Android中Camera的开发的简单例子
看了好久官方的文档,研究了好长时间,明明感觉很简单的东西,却一直不成功,最后明白了问题所在,原来是一个很简单的小问题,顿时欲哭无泪。先贴上代码package com.XC.camerastudy;import java.io.IOException; import java.util.List;import android.R.integer; import android.app.Activity
使用camera来开启一个自己的预览界面
这篇博客主要介绍怎么利用camera来写一个自己的Activity来进行预览界面。里面会用到一个类CameraConfiguration,里面是camera的基本属性,如果有需要的朋友可以去我另外一篇博客看看:CameraConfiguration介绍
Android摄像头采集编码H264及H264解码播放
包含两个Demo,一个是H264TestCameraSaveH264工程,运行可以开启摄像头录制编码H264文件,输出为SD卡中encoder.h264;另一个是testService工程,读取SD下的encoder.h264解码为RGB绘图播放。附加一个encoder.h264文件。
剪裁NV21任意一部分的代码
  NV21是YUV格式的,比例是411。Y对应每个像素,这个好办。每个U、V对应4个像素,这个怎么复制?试着改了代码,内容出来了,颜色基本都错了。   网上搜索了半天,都是缩放方面的。也不知道有没有测试过?能不能跑?结果对不对?   反复搜索了几次,终于找到了一个剪切的代码,是JAVA的,而且写法跟吾差别很大。可是没有别的参考,有这个也很好了。于是自己研究了代码,发现原理、流程是一样的(那是...
Camera摄像头帧数据转为bitmap
Camera摄像头帧数据转为bitmap 文章目录Camera摄像头帧数据转为bitmap帧数据转为bitmap关于YuvImage**compressToJpeg 方法** 帧数据转为bitmap Android下摄像头预览数据默认为 ImageFormat.NV21 格式的,通过onPreviewFrame(byte[] data, Camera camera)返回的byte[]无法直接转为b...
Camera startPreview一直预览导致内存溢出
背景:我们公司是做门口机设备的,设备为android系统,因公司需要实现人脸识别功能,需要调用相机实现实时预览获取图片。起初我们使用的camera.setPreviewCallback()方法实现,在PreviewCallback的onPreviewFrame回调方法中获取图片数据并处理:camera.setPreviewCallback(new Camera.PreviewCallback() ...
Android 如何确定camera呈像方向
查看图纸: 竖屏主板与小人成90度 横屏主板与小人成180度
Android camera实时预览 实时处理,面部认证。
Android camera实时预览 实时处理,面部认证。占坑一会填 预览操作是网友共享的代码,我在继承SurfaceView 的CameraSurfaceView 中加入了帧监听事件,每次预览监听前五个数据帧,在处理做一个面部识别。工具类需要的评论联系我。先看目录关系 自定义控件CameraSurfaceView.java 自定义接口方法CameraInterface.java CameraAc