質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

986閲覧

(質問)MediaRecorderインスタンスを再利用する際のIllegalStateExceptionの解決

giant

総合スコア132

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/08/08 10:08

編集2017/08/08 22:08

androidのカメラで、動画を10秒ごとに停止して、新しい動画をとり始めるという
繰り返しを実装したいです。

しかし、動画を撮影してフォルダに保存して、MediaRecorderをリセットしたり、stopさせるところでエラーが出ます。
検索したところ、このようなサイトが見つかったのですが、
StackOverflow:MediaRecorderインスタンスを再利用する際のIllegalStateException
何故か、エラーが出てしまいます。

コードが書ききれなかったので、こちらに他のメソッドがあります。
このコードの後半のコードのURL
//全体の流れ

java

1D/MyService7: onStartCommand 2E/MyService7: startBackgroundThread() 3E/MyService7: openCamera 4D/MyService7: tryAcquire 5E/MyService7: chooseVideoSize 6E/MyService7: onOpened 7E/MyService7: startPreview 8E/MyService7: closePreviewSession 9E/MyService7: firstOpend 10E/MyService7: startRecordingVideo() 11E/MyService7: try 12E/MyService7: closePreviewSession 13E/MyService7: setUpMediaRecorder 14E/MyService7: getVideoFilePath 15E/MyService7: /storage/emulated/0/Android/data/com.google.android.exoplayer2.demo/files/1502197772081.mp4 16E/UncaughtException: java.lang.IllegalStateException 17 at android.media.MediaRecorder._setAudioSource(Native Method) 18 at android.media.MediaRecorder.setAudioSource(MediaRecorder.java:417) 19 at com.google.android.exoplayer2.demo.MyService7.setUpMediaRecorder(MyService7.java:308) 20 at com.google.android.exoplayer2.demo.MyService7.startRecordingVideo(MyService7.java:258) 21 at com.google.android.exoplayer2.demo.MyService7.access$300(MyService7.java:47) 22 at com.google.android.exoplayer2.demo.MyService7$1.onOpened(MyService7.java:176) 23 at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:136) 24 at android.os.Handler.handleCallback(Handler.java:739) 25 at android.os.Handler.dispatchMessage(Handler.java:95) 26 at android.os.Looper.loop(Looper.java:148) 27 at android.app.ActivityThread.main(ActivityThread.java:5480) 28 at java.lang.reflect.Method.invoke(Native Method) 29 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 30 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 31

//後半のコード

java

1 2public class MyService6 extends Service { 3 4 @Override 5 public int onStartCommand(Intent intent, int flags, int startId) { 6 Log.d(TAG, "onStartCommand"); 7 8 startBackgroundThread(); 9 openCamera(); 10 return super.onStartCommand(intent, flags, startId); 11 } 12 13 private void startBackgroundThread() { 14 Log.e(TAG,"startBackgroundThread()"); 15 mBackgroundThread = new HandlerThread("CameraBackground"); 16 mBackgroundThread.start(); 17 mBackgroundHandler = new Handler(mBackgroundThread.getLooper()); 18 } 19 20 21 @SuppressWarnings("MissingPermission") 22 private void openCamera() { 23 24 Log.e(TAG,"openCamera"); 25 CameraManager manager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE); 26 try { 27 Log.d(TAG, "tryAcquire"); 28 if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { 29 throw new RuntimeException("Time out waiting to lock camera opening."); 30 } 31 String cameraId = manager.getCameraIdList()[0]; 32 33 CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 34 StreamConfigurationMap map = characteristics 35 .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 36 mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); 37 if (map == null) { 38 throw new RuntimeException("Cannot get available preview/video sizes"); 39 } 40 41 mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); 42 mMediaRecorder = new MediaRecorder(); 43 manager.openCamera(cameraId, mStateCallback, null); 44 45 } catch (CameraAccessException e) { 46 Log.e(TAG,"CameraAccessException e"); 47 } catch (NullPointerException e) { 48 Log.e(TAG,"NullPointerException e"); 49 } catch (InterruptedException e) { 50 throw new RuntimeException("Interrupted while trying to lock camera opening."); 51 } 52 } 53 54 55 private static Size chooseVideoSize(Size[] choices) { 56 Log.e(TAG,"chooseVideoSize"); 57 for (Size size : choices) { 58 if (size.getWidth() == size.getHeight() * 4 / 3 && size.getWidth() <= 1080) { 59 return size; 60 } 61 } 62 Log.e(TAG, "Couldn't find any suitable video size"); 63 return choices[choices.length - 1]; 64 } 65 66 67 private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { 68 69 @Override 70 public void onOpened(@NonNull CameraDevice cameraDevice) { 71 Log.e(TAG,"onOpened"); 72 mCameraDevice = cameraDevice; 73 // startPreview(); 74 mCameraOpenCloseLock.release(); 75 76 77 78 if (firstOpened.equals("first")) { 79 Log.e(TAG, "firstOpend"); 80 startRecordingVideo(); 81 firstOpened = "second"; 82 Timer mTimer = new Timer(); 83 handler = new Handler(); 84 mTimer.schedule(new TimerTask() { 85 @Override 86 public void run() { 87 // mHandlerを通じてUI Threadへ処理をキューイング 88 handler.post(new Runnable() { 89 public void run() { 90 stop(); 91 //Log.e(TAG,"再start"); 92 // startRecordingVideo(); 93 } 94 }); 95 } 96 }, 10000, 10000); 97 98 }else { 99 Log.e(TAG, "secondOpened"); 100 Timer mTimer = new Timer(); 101 handler = new Handler(); 102 mTimer.schedule(new TimerTask() { 103 @Override 104 public void run() { 105 // mHandlerを通じてUI Threadへ処理をキューイング 106 handler.post(new Runnable() { 107 public void run() { 108 stop(); 109 //Log.e(TAG,"再start"); 110 // startRecordingVideo(); 111 } 112 }); 113 } 114 }, 10000, 10000); 115 } 116 117 } 118 119 @Override 120 public void onDisconnected(@NonNull CameraDevice cameraDevice) { 121 Log.e(TAG,"onDisConnected"); 122 mCameraOpenCloseLock.release(); 123 cameraDevice.close(); 124 mCameraDevice = null; 125 } 126 127 @Override 128 public void onError(@NonNull CameraDevice cameraDevice, int error) { 129 Log.e(TAG,"onError"); 130 mCameraOpenCloseLock.release(); 131 cameraDevice.close(); 132 mCameraDevice = null; 133 } 134 135 }; 136 137 138

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

MediaRecorderの状態遷移図と見比べて間違っているところを探しましょう。

投稿2017/08/08 13:38

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

giant

2017/08/08 17:50

ありがとうございます。探します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問