多媒体 录制视频
来源:互联网 发布:如何分析竞价数据 编辑:程序博客网 时间:2024/06/05 16:42
多媒体 录制视频
MeidaRecorder除了可用录制音频之外,还可用于录制视频。使用MeidaRecorder录制视频与录制音频的步骤基本相同。只是录制视频是不仅需要采集声音,还需要采集图像。为了让MediaRecorder录制时采集图像,应该在调用setAudioSource(int audio_source)方法是在调用setVideoSource(int video_source)方法来设置图像来源。除此之外,还需要调用setOutputFormat设置输出文件格式之后,在进行如下步骤:
1. 调用MediaRecorder对象的setVideoEncoder(),setVideoEncodingBitRate(int bitRate) ,setVideoFrameRate 设置所录制的视频的编码格式,编码位率,每秒多少帧等,这些参数将可以控制录制视频的品质,文件大小。
2.调用MeidaRecorder的setPreviewDisplay(SurfaceView sv)方法设置使用哪个SurfaceView来显示预览 。
package com.example.recordview;
import java.io.File;
import java.io.IOException;
import android.support.v7.app.ActionBarActivity;
import android.hardware.Camera;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore.Audio.Media;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements OnClickListener {
// button
ImageButton record, stop;
// system audio file
File videoFile;
MediaRecorder mRecorder;
SurfaceView sView;
private boolean isRecording = false ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
record = (ImageButton) findViewById(R.id.record);
stop = (ImageButton) findViewById(R.id.stop);
stop.setEnabled(false);
record.setOnClickListener(this);
stop.setOnClickListener(this);
sView = (SurfaceView)this.findViewById(R.id.surfaceView1);
sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
sView.getHolder().setFixedSize(720, 1280);
sView.getHolder().setKeepScreenOn(true);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
try {
if (isRecording) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
isRecording = false ;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void recordSound() {
try {
if (!Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
Toast.makeText(this,
"sdcard is not insert! pls insert in !", 5000)
.show();
return;
}
try {
videoFile = new File(Environment
.getExternalStorageDirectory().getCanonicalFile()
+ "/sound666.amr");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(videoFile.getAbsolutePath());
try {
mRecorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mRecorder.start();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.record:
if(false){
recordSound();
}else{
try {
if (!Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
Toast.makeText(this,
"sdcard is not insert! pls insert in !", 5000)
.show();
return;
}
try {
videoFile = new File(Environment
.getExternalStorageDirectory().getCanonicalFile()
+ "/myvideo.mp4");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mRecorder = new MediaRecorder();
//mRecorder.reset();
Camera camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
if (camera != null) {
camera.setDisplayOrientation(90);
camera.unlock();
mRecorder.setCamera(camera);
}
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mRecorder.setVideoSize(1280, 720);
mRecorder.setVideoFrameRate(4);
mRecorder.setOutputFile(videoFile.getAbsolutePath());
mRecorder.setPreviewDisplay(sView.getHolder().getSurface());
mRecorder.prepare();
record.setEnabled(false);
stop.setEnabled(true);
isRecording = true;
mRecorder.start();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
break;
case R.id.stop:
if(false){
try {
if (videoFile != null && videoFile.exists()) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}else
{
try {
if (isRecording) {
isRecording = false ;
mRecorder.stop();
mRecorder.release();
mRecorder = null;
record.setEnabled(true);
stop.setEnabled(false);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
break;
default:
break;
}
}
}
红色区域出错容易导致 : E/MediaRecorder(9203): start failed: -19,如果出错,可能考虑去除尝试下 。
阅读全文
0 0
- 多媒体 录制视频
- 使用Camtasia Player录制多媒体教学视频
- Android多媒体-MediaRecorder 录制音视频
- Android多媒体应用:视频录制-MediaRecorder
- Android多媒体之音频、视频录制MediaRecorder
- android多媒体-视频录制及存储
- android 多媒体部分学习笔记十五-----视频录制
- <图形图像,动画,多媒体> 读书笔记 --- 录制与编辑视频
- 多媒体 MP4V2 录制mp4(h264+aac)音视频同步
- <图形图像,动画,多媒体> 读书笔记 --- 录制与编辑视频
- 多媒体录制音频/视频之——MediaRecorder
- Android 多媒体应用:MediaRecorder 录制音视频 之 音频
- Android 多媒体——音频播放录制、视频播放、相机
- Android 多媒体应用:MediaRecorder 录制音视频 之 音频
- 【多媒体开发】Android视频全屏录制遇到的一些问题
- 多媒体 MP4V2 录制mp4(h264+aac)音视频同步
- 《android多媒体api》之MediaRecorder音视频录制api
- android多媒体录制
- Linux网卡配置
- 【Java作业】Week06
- CAS实现SSO单点登录原理
- 树莓派 开启 ssh
- shell sort
- 多媒体 录制视频
- os模块
- Android N Phone进程启动流程
- 【JAVA】代码重构技巧
- 如何使用sublime的sftp插件链接腾讯云服务器
- 人眼定位--灰度投影Matlab
- 欢迎使用CSDN-markdown编辑器
- Android源码解析(一)Android项目构建过程
- iscroll4中滚动条的去除