您的位置:首页 > 其它

视频录制与播放(竖屏)旋转90度问题

2015-09-14 11:57 471 查看
// 设置横屏显示

// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

// 选择支持半透明模式,在有surfaceview的activity中使用。

getWindow().setFormat(PixelFormat.TRANSLUCENT);

setContentView(R.layout.main_video);

init();

// ----------定时器记录播放进度---------//

mTimer = new Timer();

mTimerTask = new TimerTask() {

@Override

public void run() {

if (m != null) {

if (isPlay) {

skb_video.setProgress(m.getCurrentPosition());

} else {

m.release();

m = null;

}

}

}

};

mTimer.schedule(mTimerTask, 0, 10);

skb_video = (SeekBar) this.findViewById(R.id.SeekBar02);

}

private void init() {

start = (Button) this.findViewById(R.id.start);

stop = (Button) this.findViewById(R.id.stop);

play = (Button) this.findViewById(R.id.play);

start.setOnClickListener(new TestVideoListener());

stop.setOnClickListener(new TestVideoListener());

play.setOnClickListener(new TestVideoListener());

surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview);

SurfaceHolder holder = surfaceview.getHolder();// 取得holder

holder.addCallback(this); // holder加入回调接口

// setType必须设置,要不出错.

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

Camera camera;

class TestVideoListener implements OnClickListener {

public void onClick(View v) {

switch (v.getId()) {

case R.id.start:

mediarecorder = new MediaRecorder();// 创建mediarecorder对象

camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);

if (camera != null) {

camera.setDisplayOrientation(90);//摄像图旋转90度

camera.unlock();

mediarecorder.setCamera(camera);

}

// 设置录制视频源为Camera(相机)

mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

mediarecorder.setOrientationHint(90);//视频旋转90度

// 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4

mediarecorder

.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

// 设置录制的视频编码h263 h264

mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错

mediarecorder.setVideoSize(640, 480);

// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错

mediarecorder.setVideoFrameRate(30);

mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());

// 设置视频文件输出的路径

mediarecorder.setOutputFile("/sdcard/h264.3gp");

try {

// 准备录制

mediarecorder.prepare();

// 开始录制

mediarecorder.start();

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

break;

case R.id.stop:

Log.i("", "stop----");

if (!isPlay) {

if (mediarecorder != null) {

// 停止录制

mediarecorder.stop();

// 释放资源

mediarecorder.release();

mediarecorder = null;

}

if (camera != null) {

camera.release();

camera = null;

}

} else {

if (m != null) {

isPlay = false;

m.stop();

}

}

break;

case R.id.play:

Log.i("", "play");

isPlay = true;

if (m == null)

m = new MediaPlayer();

m.reset();// 恢复到未初始化的状态

Uri uri = Uri.parse("/sdcard/h264.3gp");

m = MediaPlayer.create(TestBasicVideo.this, uri);// 读取视频

skb_video.setMax(m.getDuration());// 设置SeekBar的长度

m.setAudioStreamType(AudioManager.STREAM_MUSIC);

m.setDisplay(surfaceHolder);// 设置屏幕

// try {

// m.prepare();

// } catch (IOException e) {

// e.printStackTrace();

// }

m.start();

break;

default:

break;

}

}

}

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder

surfaceHolder = holder;

}

public void surfaceCreated(SurfaceHolder holder) {

// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder

surfaceHolder = holder;

}

public void surfaceDestroyed(SurfaceHolder holder) {

// surfaceDestroyed的时候同时对象设置为null

surfaceview = null;

surfaceHolder = null;

mediarecorder = null;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: