开发者

Issue with video recorder

i am doing a application to record video.I got many samples that are working but issue is while recording camera is not opening in portrait mode, it is opening another mode This is the sample i have used including xml file:

package com.example.RecordVideo;

    import java.io.File;

    import android.app.Activity;
    import android.graphics.Camera;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Surface;
    import android.view.SurfaceHolder;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.MediaController;
    import android.widget.VideoView;
    public class MainActivity extends Activity implements SurfaceHolder.Callback, OnClickListener {
    private MediaRecorder recorder = null;
    private static final String OUTPUT_FILE = "/sdcard/videooutput.mp4";
    private static final String TAG = "RecordVideo";
    private VideoView videoView = null;
    private Button startBtn = null;
    Button endBtn;
    Button playRecordingBtn;
    Button stpPlayingRecordingBtn;
    SurfaceHolder mholder;
    File outFile ;
    Camera camera;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recordvideo);

    startBtn = (Button) findViewById(R.id.bgnBtn);
    startBtn.setOnClickListener(this);
    endBtn = (Button) findViewById(R.id.stpBtn);
    endBtn.setOnClickListener(this);
    endBtn.setEnabled(false);
    playRecordingBtn = (Button) findViewById(R.id.playRecordingBtn);
    playRecordingBtn.setOnClickListener(this);
    stpPlayingRecordingBtn =(Button) findViewById(R.id.stpPlayingRecordingBtn);
    stpPlayingRecordingBtn.setOnClickListener(this);
    videoView = (VideoView)this.findViewById(R.id.videoView);
    playRecordingBtn.setEnabled(false);
    stpPlayingRecordingBtn.setEnabled(false);
    mholder = videoView.getHolder();
    mholder.addCallback(this);
    mholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        }
    //  @Override
        public void surfaceCreated(SurfaceHolder holder) {
        //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);    
        startBtn.setEnabled(true);
        }
    //  @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
        }
    //  @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
        Log.v(TAG, "Width x Height = " + width + "x" + height);
        }
        private void playRecording() {
        MediaController mc = new MediaController(this);
        videoView.setMediaController(mc);
        videoView.setVideoPath(OUTPUT_FILE);
        videoView.start();
        }
        private void stopPlayingRecording() {
        videoView.stopPlayback();
        }
        private void stopRecording() throws Exception {
        if (recorder != null) {
        recorder.stop();
        }
        }
        @Override
        protected void onDestroy() {
        super.onDestroy();
        if (recorder != null) {
        recorder.release();
        }
        }
        private void beginRecording(SurfaceHolder holder) throws Exception {
        if(recorder!=null)
        {
        recorder.stop();
        recorder.release();

        }
        outFile = new File(OUTPUT_FILE);
        if(outFile.exists())
        {
        outFile.delete();
        }
        try {

        recorder = new MediaRecorder();
        recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setVideoSize(480, 580);
        recorder.setVideoFrameRate(15);

        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setMaxDuration(60000*10); // limit to 10 minutes
        recorder.setPreviewDisplay(mholder.getSurface());
        recorder.setOutputFile(OUTPUT_FILE);
        recorder.prepare();
        recorder.start();
        }
        catch(Exception e) {
        Log.e(TAG, e.toString());     
        e.printStackTrace();
        }
        }
        public Surface getSurface()
        {
            return mholder.getSurface();
        }
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(v.equals(startBtn))
            {
                try {
                    endBtn.setEnabled(true);
                    startBtn.setEnabled(false);
                    playRecordingBtn.setEnabled(false);
                    stpPlayingRecordingBtn.setEnabled(false);
                    beginRecording(mholder);
                    } catch (Exception e) {
                    Log.e(TAG, e.toString());
                    e.printStackTrace();
                    }
            }
            if(v.equals(endBtn))
            {
                try {
                    startBtn.setEnabled(false);
                    endBtn.setEnabled(false);
                    playRecordingBtn.setEnabled(true);
                    stpPlayingRecordingBtn.setEnabled(false);
                stopRecording();
                } catch (Exception e) {
                Log.e(TAG, e.toString());
                e.printStackTrace();
                }
            }
            if(v.equals(playRecordingBtn))
            {
                try {
                    startBtn.setEnabled(false);
                    endBtn.setEnabled(false);
                    playRecordingBtn.setEnabled(false);
                    stpPlayingRecordingBtn.setEnabled(true);
                playRecording();
                } catch (Exception e) {
                Log.e(TAG, e.toString());
                e.printStackTrace();
                }
            }
            if(v.equals(stpPlayingRecordingBtn))
            {
                try {
                    startBtn.setEnabled(false);
                    endBtn.setEnabled(false);
                    playRecordingBtn.setEnabled(true);
                    stpPlayingRecordingBtn.setEnabled(false);
                stopPlayingRecording();
                } catch (Exception e) {
                Log.e(TAG, e.toString());
                e.printStackTrace();
                }
            }
        }
    }

XML file is:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
 <VideoView
        android:id="@+id/videoView"
        android:layout_width="480px"
        android:layout_height="580px"
        android:keepScreenOn="true" 
        />
        <LinearLayout 
 android:orientation="horizontal"
 android:layout_width="fill_parent"
 android:layout_height="80px"
 >
        <Button
 android:id="@+id/bgnBtn"
 android:layout_width="150px"
 android:layout_marginLeft="80px"
 android:layout_height="wrap_content"
 android:text="Start"
 />
<Button
 android:id="@+id/stpBtn"
 android:layout_width="150px"
  android:开发者_开发知识库layout_marginLeft="40px"
 android:layout_height="wrap_content"
 android:text="Cancel"
 />
 </LinearLayout>
 <LinearLayout 
 android:orientation="horizontal"
 android:layout_width="fill_parent"
 android:layout_height="80px"
 >
        <Button
 android:id="@+id/playRecordingBtn"
 android:layout_width="150px"
 android:layout_marginLeft="80px"
 android:layout_height="wrap_content"
 android:text="Play"
 />
<Button
 android:id="@+id/stpPlayingRecordingBtn"
 android:layout_width="150px"
  android:layout_marginLeft="40px"
 android:layout_height="wrap_content"
 android:text="Stop"
 />
 </LinearLayout>
</LinearLayout>

i add permissions also, What i want is 1. video recording should be opened in PORTRAIT mode 2. is video cropping possible in android

Please Help me. Thanks in advance


dude, u need some fix because this bug was(and will be always) already( i think it's bug ) u need add code like this to surfaceChanged()

if(getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT)
            {
                camera.setDisplayOrientation(90);
                p.setRotation(90);
            }
            else
            {
                p.setRotation(0);
                camera.setDisplayOrientation(0);
            }

easy code... and maybe stupied but it's fixed this problem. p.s. from 2.2 i think it's work. if < than code not help u

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜