android录制和播放视频
来源:互联网 发布:云计算开发工程师面试 编辑:程序博客网 时间:2024/04/29 23:31
java代码:
package com.example.shipinlz;
import java.io.File;
import java.io.IOException;
import java.util.ResourceBundle.Control;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.media.RemoteControlClient.MetadataEditor;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Camera;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController.MediaPlayerControl;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
public class MainActivity extends Activity implements OnClickListener{
private Button starts,stops,plays;
//显示视频预览的控件
private SurfaceView surfaceview;
private MediaRecorder mediarecoder;
//视频文件
private File videofiles;
private boolean isRecording=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
starts=(Button)findViewById(R.id.starts);
plays=(Button)findViewById(R.id.plays);
stops=(Button)findViewById(R.id.stops);
surfaceview=(SurfaceView)findViewById(R.id.shipin);
stops.setEnabled(false);
starts.setOnClickListener(this);
stops.setOnClickListener(this);
plays.setOnClickListener(this);
//设置surfaceView不需要自己维护缓冲区
surfaceview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//设置分辨率
surfaceview.getHolder().setFixedSize(320, 280);
//设置组件不会让屏幕自动关闭
surfaceview.getHolder().setKeepScreenOn(true);
}
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
switch (view.getId()) {
//单击录制按钮
case R.id.starts:
if(!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){
Toast.makeText(this, "请插入能存卡", 0).show();
return;
}
//创建录制视频的文件夹
String path=Environment.getExternalStorageDirectory()+"/video";
File file=new File(path);
if(!file.exists()){
file.mkdirs();
}
//录制视频的视频文件
videofiles=new File(file.getPath()+"/shipin.mp4");
//创建MediaRecorder对象
mediarecoder=new MediaRecorder();
mediarecoder.reset();
//设置从麦克风采集声音
mediarecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置从摄像头采集图像
mediarecoder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
//设置视频文件的输出格式(必须设置在编码格式之前)
mediarecoder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//设置音频编码格式
mediarecoder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//设置图像编码格式
mediarecoder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
// mediarecoder.setVideoSize(320,320);
//设置每秒4帧
// mediarecoder.setVideoFrameRate(4);
//输出视频文件
mediarecoder.setOutputFile(videofiles.getAbsolutePath());
//指定surfaceview预览视频
mediarecoder.setPreviewDisplay(surfaceview.getHolder().getSurface());
try {
mediarecoder.prepare();
//开始录制
mediarecoder.start();
starts.setEnabled(false);
stops.setEnabled(true);
isRecording=true;
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.stops:
if(isRecording){
mediarecoder.stop();
//释放资源
mediarecoder.release();
mediarecoder=null;
starts.setEnabled(true);
stops.setEnabled(false);
}
break;
case R.id.plays:
MediaPlayer mediaplayer=new MediaPlayer();
mediaplayer.reset();
mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaplayer.setDataSource(videofiles.getAbsolutePath());
mediaplayer.setDisplay(surfaceview.getHolder());
mediaplayer.prepare();
mediaplayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/starts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始录制"
/>
<Button
android:id="@+id/stops"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止录制"
/>
<Button
android:id="@+id/plays"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放视频"
/>
</LinearLayout>
<SurfaceView
android:id="@+id/shipin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
权限设置:
<!-- 授予录音权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 摄像权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 授予使用外部存储卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
不知道为什么录制的图像是倒着的,如果有知道的指点一下
- android录制和播放视频
- Android 实现视频录制播放
- recordview视频录制和播放
- Android之多媒体视频的播放和录制
- 录制视频和播放视频的应用
- android调用系统的录制、播放视频
- Android端录制视频,.NET实时播放
- android仿微信录制短视频并播放
- Android进阶之视频录制播放常见问题
- Android 实现视频录制并播放
- Android开发之视频录制与播放
- 基于JMF录制和播放视频源码
- Mediaplayer和surfaceview播放录制视频
- iOS 录音和视频录制播放
- MediaRecorder视频的录制和播放
- Android语音录制和播放
- Android ICS中录制视频和播放视频的角度问题
- Android 多媒体——音频播放录制、视频播放、相机
- Json与xml区别
- java中abstract怎么使用
- kwic
- java设计模式(结构型)之桥接模式
- Cocos2d-x简单游戏<植物大战僵尸>代码实现|第二部分:菜单场景<后续会提供源码下载链接>
- android录制和播放视频
- 2014续篇以此献给700W大学毕业生
- android的Tabhost使用
- 多附带信息提示小工具
- 页面回到顶部的实现及原理
- pci 热插拔
- OSQPend的分析
- TYVJ 最长公共子序列(一维)
- mysql局域网访问设置