android 启动一个摄像头录制视频并上传到服务器上 android(用程序启动摄像头录像并实时上传视频流到一台指定的电脑的目录中) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般来说:使用MediaRecorder来录像,设置本地存储路径,MediaRecorder.setOutputFile("/sdcard/xxx");如果要实时上传的话,可以把摄像头拍摄的视频流实时传入socket里:Socket receiver = new Socket(“xxx.xxx.x.xxx”, 8890);ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(receiver);MediaRecorder.setOutputFile(pfd.getFileDescriptor()); 具体参考:http://blog.csdn.net/zblue78/article/details/6083374 package cn.view;import java.io.File;import java.io.IOException;import android.app.Activity;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.view.SurfaceView;import android.view.View;import android.view.WindowManager;import android.widget.Button;import android.widget.Toast;public class MyAndroidVideo extends Activity { /** Called when the activity is first created. */ // 定义SurfaceView对象 private SurfaceView surfaceView = null; // 定义Button对象 private Button record = null; private Button cancel = null; // 定义MediaRecorder对象 private MediaRecorder mediaRecorder = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 加载界面main.xml setContentView(R.layout.main); // 屏幕参数设置 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 通过findViewByIdeo找到surfaceView,record的ID surfaceView = (SurfaceView) this.findViewById(R.id.surface_camera); record = (Button) this.findViewById(R.id.record); cancel = (Button) this.findViewById(R.id.cancel); // 监听Record按钮 record.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { // 实例化MediaRecorder类的对象 mediaRecorder = new MediaRecorder(); // 获取sdCard目录 if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { File sdCardDir = Environment.getExternalStorageDirectory(); System.out.println(sdCardDir); File saveFile = new File(sdCardDir, System.currentTimeMillis() + ".3gp"); String path = saveFile.getAbsolutePath(); System.out.println(path); mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface()); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setVideoSize(176, 144); mediaRecorder.setVideoFrameRate(3); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mediaRecorder.setOutputFile(path); mediaRecorder.setMaxDuration(10000); try { Toast.makeText(MyAndroidVideo.this,"Recording......", Toast.LENGTH_LONG).show(); mediaRecorder.prepare(); mediaRecorder.start(); Toast.makeText(MyAndroidVideo.this,"Recording......", Toast.LENGTH_LONG).show(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } } }); cancel.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { Toast.makeText(MyAndroidVideo.this, "Cancelling......", Toast.LENGTH_LONG).show(); MyAndroidVideo.this.finish(); mediaRecorder.stop(); mediaRecorder.release(); Toast.makeText(MyAndroidVideo.this, "Cancelling......", Toast.LENGTH_LONG).show(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); }} android ksoap2调用wcf出错,急。。。。 有关android编译问题 自动登录功能 新手,opengl入门问题,跪求大神指导!! 如何获取屏幕解锁事件? cygwin make -v命令报错 GridView只显示一个Item的数据 如何访问别的应用/data/data目录下的文件? android折线图 listview拖动优化问题 如何从cursor中提取结果? 菜单上加按钮的有木有
如果要实时上传的话,可以把摄像头拍摄的视频流实时传入socket里:
Socket receiver = new Socket(“xxx.xxx.x.xxx”, 8890);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(receiver);
MediaRecorder.setOutputFile(pfd.getFileDescriptor());
具体参考:http://blog.csdn.net/zblue78/article/details/6083374
import java.io.IOException;import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;public class MyAndroidVideo extends Activity {
/** Called when the activity is first created. */
// 定义SurfaceView对象
private SurfaceView surfaceView = null;
// 定义Button对象
private Button record = null;
private Button cancel = null;
// 定义MediaRecorder对象
private MediaRecorder mediaRecorder = null; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 加载界面main.xml
setContentView(R.layout.main);
// 屏幕参数设置
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); // 通过findViewByIdeo找到surfaceView,record的ID
surfaceView = (SurfaceView) this.findViewById(R.id.surface_camera);
record = (Button) this.findViewById(R.id.record);
cancel = (Button) this.findViewById(R.id.cancel); // 监听Record按钮
record.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
// 实例化MediaRecorder类的对象
mediaRecorder = new MediaRecorder();
// 获取sdCard目录
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File sdCardDir = Environment.getExternalStorageDirectory();
System.out.println(sdCardDir);
File saveFile = new File(sdCardDir, System.currentTimeMillis() + ".3gp");
String path = saveFile.getAbsolutePath();
System.out.println(path);
mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setVideoSize(176, 144);
mediaRecorder.setVideoFrameRate(3); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(path);
mediaRecorder.setMaxDuration(10000);
try {
Toast.makeText(MyAndroidVideo.this,"Recording......", Toast.LENGTH_LONG).show();
mediaRecorder.prepare();
mediaRecorder.start();
Toast.makeText(MyAndroidVideo.this,"Recording......", Toast.LENGTH_LONG).show();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
cancel.setOnClickListener(new Button.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
Toast.makeText(MyAndroidVideo.this, "Cancelling......",
Toast.LENGTH_LONG).show();
MyAndroidVideo.this.finish();
mediaRecorder.stop();
mediaRecorder.release();
Toast.makeText(MyAndroidVideo.this, "Cancelling......",
Toast.LENGTH_LONG).show();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} });
}
}