2009-11-30 8 views
0

Я пытаюсь использовать android.media.MediaRecorder для записи видео, и независимо от того, что я делаю с ошибками сегментации времени выполнения андроида при вызове prepare(). Вот пример:Как использовать MediaRecorder для записи видео без возникновения ошибки сегментации?

public void onCreate(Bundle savedInstanceState) 
{ 
    Log.i("video test", "making recorder"); 
    MediaRecorder recorder = new MediaRecorder(); 
    contentResolver = getContentResolver(); 
    try { 
     super.onCreate(savedInstanceState); 
     Log.i("video test", "--------------START----------------"); 
     SurfaceView target_view = new SurfaceView(this); 
     Log.i("video test", "making surface"); 
     Surface target = target_view.getHolder().getSurface(); 
     Log.i("video test", target.toString()); 
     Log.i("video test", "new recorder"); 
     recorder = new MediaRecorder(); 
     Log.i("video test", "set display"); 
     recorder.setPreviewDisplay(target); 
     Log.i("video test", "pushing surface"); 
     setContentView(target_view); 
     Log.i("video test", "set audio source"); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     Log.i("video test", "set video source"); 
     recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
     Log.i("video test", "set output format"); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     Log.i("video test", "set audio encoder"); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     Log.i("video test", "set video encoder"); 
     recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
     Log.i("video test", "set max duration"); 
     recorder.setMaxDuration(3600); 
     Log.i("video test", "set on info listener"); 
     recorder.setOnInfoListener(new listener()); 
     Log.i("video test", "set video size"); 
     recorder.setVideoSize(320, 240); 
     Log.i("video test", "set video frame rate"); 
     recorder.setVideoFrameRate(15); 
     Log.i("video test", "set output file"); 
     recorder.setOutputFile(get_path(this, "foo.3gp")); 
     Log.i("video test", "prepare"); 
     recorder.prepare(); 
     Log.i("video test", "start"); 
     recorder.start(); 
     Log.i("video test", "sleep"); 
     Thread.sleep(3600); 
     Log.i("video test", "stop"); 
     recorder.stop(); 
     Log.i("video test", "release"); 
     recorder.release(); 
     Log.i("video test", "-----------------SUCCESS------------------"); 
     finish(); 
    } catch (Exception e) { 
     Log.i("video test", e.toString()); 
     recorder.reset(); 
     recorder.release(); 
     Log.i("video tets", "-------------------FAIL-------------------"); 
     finish(); 
    } 
} 

public static String get_path (Context context, String fname) { 
    String path = context.getFileStreamPath("foo").getParentFile().getAbsolutePath(); 
    String res = path+"/"+fname; 
    Log.i("video test", "path: "+res); 
    return res; 
} 

class listener implements MediaRecorder.OnInfoListener { 
    public void onInfo(MediaRecorder recorder, int what, int extra) { 
     Log.i("video test", "Video Info: "+what+", "+extra); 
    } 
} 
+0

Если это телефон Droid, вызовите проблемы с вашим вызовом .getSurface(); привет, Ari – BeMeCollective

ответ

2

Эта проблема, похоже, связана с синхронизацией конечного автомата камеры.

Перед тем, как будет вызвана подготовка, камера может понадобиться сотни миллисекунд для настройки.

Смотрите следующее сообщение:

http://code.google.com/p/android/issues/detail?id=5050

1
recorder.setVideoSize(176, 144); 
recorder.setVideoFrameRate(20); 
recorder.setAudioChannels(1); 
recorder.setPreviewDisplay(mHolder.getSurface());//<- I believe this helped 

это помогло мне. Посмотрите в logcat во время отладки

+0

Добавить эту недвижимость, мое приложение является силовым для закрытия исключение, является незаконным recorder.setVideoFrameRate (20), пожалуйста, помогите мне – 2013-11-29 14:31:52

 Смежные вопросы

  • Нет связанных вопросов^_^