android视频实时监控并需要保存视频文件到本地问题

Tourist_s 2013-05-31 05:54:39
为什么视频保存到本地是空的文件,是不是与Camera冲突还是什么的,搞了几天了,求帮助,该如何解决呢?

public class SocketCamera extends SurfaceView implements
Camera.PreviewCallback, SurfaceHolder.Callback {

public SocketCamera(Context arg0) {
super(arg0);
}

private SurfaceHolder mSurfaceHolder = null;
private Camera mCamera = null;
private File myRecAudioFile;
private File dir;
private MediaRecorder recorder;
public String sdcardDir = "/mnt/extsd/video/";
/** 服务器名称 */
private String pUsername = "XZY";
/** 视频质量 */
private int VideoQuality = 85;
/** 发送视频宽度比例 */
private float VideoWidthRatio = 100;
/** 发送视频高度比例 */
private float VideoHeightRatio = 100;
/** 发送视频分辨率宽度 */
private int VideoWidth = 0;
/** 发送视频分辨率高度 */
private int VideoHeight = 0;
/** 视频格式索引 */
private int VideoFormatIndex = 0;

public void init(int Width, int Height) {
VideoHeight = Height;
VideoWidth = Width;
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
VideoWidthRatio = VideoWidthRatio / 100f;
VideoHeightRatio = VideoHeightRatio / 100f;
new MySendCommondThread("PHONECONNECT|" + pUsername + "|").start();
if (recorder == null) {
recorder = new MediaRecorder();
}
InitCamera();
recorder();
}

private void InitCamera() {
try {
mCamera = Camera.open();
} catch (Exception e) {
e.printStackTrace();
}
}

public void recorder() {
dir = new File(sdcardDir);
if (!dir.exists()) {
dir.mkdir();
}
try {
myRecAudioFile = File
.createTempFile("SP"+ new SimpleDateFormat("yyyyMMdd_hhmmss").format(new Date(System.currentTimeMillis())),".3gp", dir);// 创建临时文件
// recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //
// 录音源为麦克风
// recorder.setMaxDuration(10000);// 最大期限
recorder.setCamera(mCamera);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 从照相机采集视频
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);// 设置视频编码方式
recorder.setVideoSize(320, 240);
recorder.setVideoFrameRate(20); // 每秒20帧
// recorder.setPreviewDisplay(mSurfaceHolder.getSurface());// 预览
recorder.setOutputFile(myRecAudioFile.getAbsolutePath());// 保存路径
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if (mCamera == null) {
return;
}
mCamera.stopPreview();
mCamera.setPreviewCallback(this);
Camera.Parameters parameters = mCamera.getParameters();
Size size = parameters.getPreviewSize();
VideoWidth = size.width;
VideoHeight = size.height;
VideoFormatIndex = parameters.getPreviewFormat();
mCamera.startPreview();

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
try {
if (mCamera != null) {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
}
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
if (null != mCamera) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
if (null != recorder) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}
}

@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
try {
if (data != null) {
YuvImage image = new YuvImage(data, VideoFormatIndex,
VideoWidth, VideoHeight, null);
if (image != null) {
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
image.compressToJpeg(new Rect(0, 0,
(int) (VideoWidthRatio * VideoWidth),
(int) (VideoHeightRatio * VideoHeight)),
VideoQuality, outstream);
outstream.flush();

Thread th = new MySendFileThread(outstream, pUsername,
Constant.SRVIP, 8511);
th.start();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
...全文
318 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_29402607 2015-12-23
  • 打赏
  • 举报
回复
helloWorld_lux 2015-12-06
  • 打赏
  • 举报
回复
请问楼主你的问题解决吗?是怎么解决的呢?
Tourist_s 2013-06-03
  • 打赏
  • 举报
回复
求助啊求助~~~
Tourist_s 2013-06-01
  • 打赏
  • 举报
回复
文件一直是0kb 还是搞不懂怎么回事?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧