MediaRecorder可以实现音频和视频的录制,录制视频首先需要渲染一个SurfaceView用以展示预览,接着便可以通过MediaRecorder录制视频文件了。MediaPlayer可实现播放视频。
获得MediaRecorder对象设置录制设备设置输出格式设置录制大小(非必须)(和录制视频的清晰度有关)设置录制帧率(非必须)设置压缩格式设置输出文件准备录制开始录制停止录制释放资源 录制时一定要先设置录制源,其次设置输出格式;接着如果要设置大小必须在编码之前,否则设置会失效。
public class MainActivity extends Activity implements SurfaceHolder.Callback {
SurfaceView sv;
SurfaceHolder holder;
Button recordVedio;
Button stopRecordVedio;
MediaRecorder recorder;
String path=
"/sdcard/shipin.3gp";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ininView();
recordVedio.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
initRecorder();
record();
}
});
stopRecordVedio.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
recorder.stop();
recorder.release();
}
});
}
private void ininView() {
sv=(SurfaceView)findViewById(R.id.surfaceView1);
recordVedio=(Button)findViewById(R.id.button1);
stopRecordVedio=(Button)findViewById(R.id.button2);
holder=sv.getHolder();
}
protected void initRecorder() {
recorder=
new MediaRecorder();
recorder.setPreviewDisplay(holder.getSurface());
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoFrameRate(
25);
recorder.setVideoSize(
800,
480);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setOutputFile(path);
}
protected void record() {
try
{
recorder.prepare();
recorder.start();
}
catch(Exception e){
e.printStackTrace();
}
}
}
别忘了在注册文件中添加权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera" />
使用SurfaceView完成视频的显示。进行视频播放的步骤为: 1. 获得MediaPlayer对象 2. 绑定播放组件 3. 设置数据源 4. 准备播放 5. 开始播放 6. 暂停播放 7. 停止播放 8. 释放资源
public class MainActivity extends Activity implements SurfaceHolder.Callback {
SurfaceView sv;
SurfaceHolder holder;
Button playVedio;
Button stopPlayVedio;
Button pausePlayVedio;
MediaPlayer player;
boolean isPrepared=
false;
boolean isPlaying=
false;
String path=
"/sdcard/shipin.3gp";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ininView();
initPlayer();
playVedio.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
if(!isPlaying)
{
play();
isPlaying=
true;
}
}
});
stopPlayVedio.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
if(player.isPlaying())
{
player.stop();
isPrepared=
false;
}
isPlaying=
false;
player.release();
}
});
pausePlayVedio.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
if(isPlaying)
{
player.pause();
isPlaying=
false;
}
}
});
}
private void initPlayer() {
player=
new MediaPlayer();
try
{
player.setDataSource(path);
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalStateException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
protected void play() {
try{
if(!isPrepared)
{
player.prepare();
isPrepared=
true;
}
player.start();
player.setDisplay(holder);
player.setOnCompletionListener(
new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
isPlaying=
false;
}
});
}
catch(Exception e){
e.printStackTrace();
}
}
private void ininView() {
sv=(SurfaceView)findViewById(R.id.surfaceView1);
holder=sv.getHolder();
playVedio=(Button)findViewById(R.id.button3);
stopPlayVedio=(Button)findViewById(R.id.button4);
pausePlayVedio=(Button)findViewById(R.id.button5);
}
}
转载请注明原文地址: https://ju.6miu.com/read-22103.html