2011-10-21 5 views
2

私はアンドロイドのメディアレコーダーを使用してmp4ビデオを保存するカスタムビデオレコーダーを使用してビデオを記録したいと思います。android3.1でメディアレコーダーを使用してビデオレコーダーの違法状態の例外を解決する方法

誰でもコードを提供できますか?私はコードを行った(下記参照)が、それは違法な例外を示して誰も問題を教えてくれる?

import java.io.IOException; 
import android.app.Activity; 
import android.content.pm.ActivityInfo; 
import android.media.CamcorderProfile; 
import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.view.View.OnClickListener; 

public class CustomCameraRecordActivity extends Activity implements OnClickListener, SurfaceHolder.Callback 
{  
    MediaRecorder recorder;  
    SurfaceHolder holder; 
    boolean recording = false; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {  
    super.onCreate(savedInstanceState);  
    requestWindowFeature(Window.FEATURE_NO_TITLE);  
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    setContentView(R.layout.main);  
    recorder = new MediaRecorder();  
    initRecorder();  
    SurfaceView cameraView = (SurfaceView) findViewById(R.id.CameraView);  
    holder = cameraView.getHolder();  
    holder.addCallback(this);  
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
    cameraView.setClickable(true);  
    cameraView.setOnClickListener(this); } 
private void initRecorder() 
{  
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);  
    recorder.setProfile(cpHigh);  
    recorder.setOutputFile(Environment.getExternalStorageDirectory()+"VideoGcm"+System.currentTimeMillis()+".mp4"); 
    recorder.setMaxDuration(50000); // 50 seconds  recorder.setMaxFileSize(5000000); // Approximately 5 megabytes 
    } 
private void prepareRecorder() 
{  
    recorder.setPreviewDisplay(holder.getSurface());  
    try 
    {  
     recorder.prepare();  
    } 
    catch (IllegalStateException e) 
      {   
     e.printStackTrace();   
finish();  
} catch (IOException e) 
{   e.printStackTrace();  
finish(); 
} 
} 

public void onClick(View v) 
{ 
    if (recording) 
    {  
    recorder.stop();   
    recording = false;   
    // Let's initRecorder so we can record again  
    initRecorder();   
    prepareRecorder();  
    } 
else 
{   
    recording = true;  
    recorder.start(); 
    } 
} 
public void surfaceCreated(SurfaceHolder holder) 
{ 
    prepareRecorder(); 
    } 
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) 
{ 
} 

public void surfaceDestroyed(SurfaceHolder holder) 
{  if (recording) 
{   
    recorder.stop();  
    recording = false; 
    }  
recorder.release(); 
finish(); 
} 


} 

おかげ

10-20 19:19:37.540: ERROR/AndroidRuntime(2718): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hcl.camera/com.hcl.camera.CustomCameraRecordActivity}: java.lang.IllegalStateException 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1748) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.app.ActivityThread.access$1500(ActivityThread.java:122) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.os.Looper.loop(Looper.java:132) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.app.ActivityThread.main(ActivityThread.java:4025) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at java.lang.reflect.Method.invoke(Method.java:491) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at dalvik.system.NativeStart.main(Native Method) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718): Caused by: java.lang.IllegalStateException 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.media.MediaRecorder.setOutputFormat(Native Method) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.media.MediaRecorder.setProfile(MediaRecorder.java:295) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at com.hcl.camera.CustomCameraRecordActivity.initRecorder(CustomCameraRecordActivity.java:45) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at com.hcl.camera.CustomCameraRecordActivity.onCreate(CustomCameraRecordActivity.java:32) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712) 
10-20 19:19:37.540: ERROR/AndroidRuntime(2718):  ... 11 more 
10-20 19:20:40.720: ERROR/MediaRecorder(2759): start called in an invalid state: 4 
10-20 19:20:40.730: ERROR/AndroidRuntime(2759): FATAL EXCEPTION: main 
+0

Stacktrace plox – pgsandstrom

答えて

2
public void surfaceCreated(SurfaceHolder holder) 
{ 
    prepareRecorder(); 
} 

私は上記のコードは、ドキュメントからinitRecorder()

前に呼び出されると思う:setOutputFormat()

は、生成される出力ファイルの形式を設定します。中録音。 setAudioSource()/ setVideoSource()の後でprepare()の前にこれを呼び出します。

+0

ここで、@Renoというコードを記述できますか? – KhalidTaha

関連する問題