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

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

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

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

Android

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

Android Studio

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

Q&A

0回答

1871閲覧

(後半コード)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:09

編集2022/01/12 10:55

前半のコードと質問のURL

後半のコード

java

1 2 private void startRecordingVideo() { 3 Log.e(TAG,"startRecordingVideo()"); 4 if (null == mCameraDevice) { 5 Log.e(TAG,"return"); 6 return; 7 } 8 try { 9 Log.e(TAG,"try"); 10 closePreviewSession(); 11 setUpMediaRecorder(); 12 mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); 13 List<Surface> surfaces = new ArrayList<>(); 14 15 Surface recorderSurface = mMediaRecorder.getSurface(); 16 surfaces.add(recorderSurface); 17 mPreviewBuilder.addTarget(recorderSurface); 18 mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { 19 20 21 @Override 22 public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 23 Log.e(TAG,"CameraCaptureSession:onCongigured"); 24 mPreviewSession = cameraCaptureSession; 25 mBackgroundHandler.post(new Runnable() { 26 @Override 27 public void run() { 28 mIsRecordingVideo = true; 29 mMediaRecorder.start(); 30 } 31 }); 32 } 33 34 @Override 35 public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { 36 Log.e(TAG,"onConfigureFailed"); 37 } 38 }, mBackgroundHandler); 39 } catch (CameraAccessException | IOException e) { 40 e.printStackTrace(); 41 } 42 43 } 44 45 46 47 private void closePreviewSession() { 48 Log.e(TAG,"closePreviewSession()"); 49 if (mPreviewSession != null) { 50 mPreviewSession.close(); 51 mPreviewSession = null; 52 } 53 } 54 55 56 57 private void setUpMediaRecorder() throws IOException { 58 Log.e(TAG,"setUpMediaRecorder"); 59 mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 60 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); 61 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 62 if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) { 63 //mNextVideoAbsolutePath = getVideoFilePath(this); 64 mNextVideoAbsolutePath = getVideoFilePath(); 65 Log.e(TAG,mNextVideoAbsolutePath); 66 } 67 mMediaRecorder.setOutputFile(mNextVideoAbsolutePath); 68 mMediaRecorder.setVideoEncodingBitRate(10000000); 69 mMediaRecorder.setVideoFrameRate(30); 70 mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); 71 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 72 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 73 WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 74 int rotation = windowManager.getDefaultDisplay().getRotation(); 75 switch (mSensorOrientation) { 76 case SENSOR_ORIENTATION_DEFAULT_DEGREES: 77 mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation)); 78 break; 79 case SENSOR_ORIENTATION_INVERSE_DEGREES: 80 mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation)); 81 break; 82 } 83 mMediaRecorder.prepare(); 84 } 85 86 87 public String getVideoFilePath() { 88 Log.e(TAG, "getVideoFilePahy"); 89 90 File filePathy; 91 String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/cameraMovie/"; 92 filePathy = new File(path); 93 if (!filePathy.exists()) { 94 boolean result = filePathy.mkdir(); 95 if (result) { 96 System.out.println("Success"); 97 } 98 } 99 return filePathy.toString() + "/" + System.currentTimeMillis() + ".mp4"; 100 } 101 102 103 public void stop(){ 104 Log.e(TAG,"stop()"); 105 if (mIsRecordingVideo) { 106 //この上の確認のためにあるstopメソッド 107 stopRecordingVideo(); 108 } 109 } 110 111 private void stopRecordingVideo() { 112 Log.e(TAG,"stopRecordingVideo()"); 113 mIsRecordingVideo = false; 114 //349行目です。 115 mMediaRecorder.stop(); 116 mMediaRecorder.reset(); 117 mNextVideoAbsolutePath = null; 118 } 119 120 @Override 121 public void onDestroy() { 122 // 削除作業を継続させる 123 super.onDestroy(); 124 Log.e(TAG,"onDestroy()"); 125 // windowからViewを排除する 126 windowManager.removeView(views); 127 128 //onPause()のやつ2つ 129 closeCamera(); 130 stopBackgroundThread(); 131 132 } 133 134 private void closeCamera() { 135 Log.e(TAG,"closeCamera()"); 136 try { 137 mCameraOpenCloseLock.acquire(); 138 closePreviewSession(); 139 if (null != mCameraDevice) { 140 mCameraDevice.close(); 141 mCameraDevice = null; 142 } 143 if (null != mMediaRecorder) { 144 mMediaRecorder.release(); 145 mMediaRecorder = null; 146 } 147 } catch (InterruptedException e) { 148 throw new RuntimeException("Interrupted while trying to lock camera closing."); 149 } finally { 150 mCameraOpenCloseLock.release(); 151 } 152 } 153 154 155 private void stopBackgroundThread() { 156 Log.e(TAG,"stopBackgroundThread"); 157 mBackgroundThread.quitSafely(); 158 try { 159 mBackgroundThread.join(); 160 mBackgroundThread = null; 161 mBackgroundHandler = null; 162 } catch (InterruptedException e) { 163 e.printStackTrace(); 164 } 165 } 166 167 168 @Override 169 public IBinder onBind(Intent intent) { 170 return null; 171 } 172 173} 174

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

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

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

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

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

yona

2017/08/08 12:59

質問は1つに整理しましょう。また、人に回答してもらうだけで考えていないですよね?エラーログを読んで対処をしてから質問した方が、ただ人に聞くだけより効率的です。
giant

2017/08/08 13:07

エラーログを読んで検索をして、同じような質問を見つけ対策をしたが、同じ結果にならず、コードのメソッドの順番を呼ばれた順に並べ、整理してログを出して読んでみてもわからないので質問しました。エラーログを載せるのを忘れていました。
fiveHundred

2017/08/08 13:35

質問用にソースをコピーした後、そのコピーしたソースから関係ないと思うところを順次削除していってください。それだけでエラーの箇所が絞り込めるはずです。もし、削除してエラーが消えたら、その削除したところに問題があるので、その部分を修正するか質問してください。
giant

2017/08/08 21:56

消したら、動かないのでエラーも出ないと思うのですが、
giant

2017/08/08 21:56

メソッドを一つづつ消して行くということでしょうか?
yona

2017/08/09 00:52 編集

エラーログが出ている不具合なので、エラーログとエラーログで指定されている箇所前後・関連箇所数行で十分です。あとは回答者が要求すると思いますよ。
fiveHundred

2017/08/09 00:52

すいません。コンパイルエラーと勘違いしていました…。ただ、ソースコードが長いと読んでいる人に負担がかかる(あるいはそもそも読んでくれない)ので、printfデバッグなどでエラー箇所を特定して、そのエラーを含んだ短いソースコードを書いて質問する、という形のほうがいいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問