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

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

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

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

Android

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

Android Studio

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

Q&A

1回答

427閲覧

Serviceでcamera2APIを使いたい。stop failed-1007 エラーが出る。

zzzggg

総合スコア13

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/08/10 04:43

編集2022/01/12 10:55

Serviceで、CameraAPI2で動画を撮影したいです。しかし、stop failed:-1007というエラーがでます。
何が問題なのでしょうか?
イメージ説明

java

1public class MyService12 extends Service { 2 public MyService12() { 3 } 4 5 private CameraDevice mCameraDevice; 6 private Size mVideoSize; 7 private MediaRecorder mMediaRecorder; 8 private boolean mIsRecordingVideo; 9 private HandlerThread mBackgroundThread; 10 private Handler mBackgroundHandler; 11 private Semaphore mCameraOpenCloseLock = new Semaphore(1); 12 Handler handler; 13 protected CameraDevice cameraDevice; 14 protected CameraCaptureSession session; 15 16 17 @Override 18 public int onStartCommand(Intent intent, int flags, int startId) { 19 openCamera(); 20 return super.onStartCommand(intent, flags, startId); 21 } 22 23 @SuppressWarnings("MissingPermission") 24 private void openCamera() { 25 CameraManager manager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE); 26 27 try { 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 CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 33 StreamConfigurationMap map = characteristics 34 .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 35 mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); 36 if (map == null) { 37 throw new RuntimeException("Cannot get available preview/video sizes"); 38 } 39 40 mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); 41 mMediaRecorder = new MediaRecorder(); 42 manager.openCamera(cameraId, mStateCallback, null); 43 44 } catch (Exception e) { 45 Log.e(TAG, "e"); 46 } 47 } 48 49 50 protected CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { 51 @Override 52 public void onOpened(@NonNull CameraDevice cameraDevice) { 53 mCameraDevice = cameraDevice; 54 mCameraOpenCloseLock.release(); 55 try { 56 setUpMediaRecorder(); 57 startRecordingVideo(); 58 59 60 }catch(Exception e){ 61 } 62 } 63 @Override 64 public void onDisconnected(@NonNull CameraDevice camera) { 65 mCameraOpenCloseLock.release(); 66 cameraDevice.close(); 67 mCameraDevice = null; 68 } 69 @Override 70 public void onError(@NonNull CameraDevice camera, int error) { 71 mCameraOpenCloseLock.release(); 72 cameraDevice.close(); 73 mCameraDevice = null; 74 } 75 }; 76 77 78 private void startRecordingVideo() { 79 if (null == mCameraDevice) { 80 Log.e(TAG, "return"); 81 return; 82 } 83 try { 84 mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); 85 List<Surface> surfaces = new ArrayList<>(); 86 Surface recorderSurface = mMediaRecorder.getSurface(); 87 surfaces.add(recorderSurface); 88 mPreviewBuilder.addTarget(recorderSurface); 89 mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { 90 91 @Override 92 public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 93 Log.e(TAG, "CameraCaptureSession:onCongigured"); 94 } 95 @Override 96 public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { 97 Log.e(TAG, "onConfigureFailed"); 98 } 99 @Override 100 public void onReady(CameraCaptureSession session) { 101 Log.e(TAG,"onReady"); 102 com.google.android.exoplayer2.demo.MyService12.this.session = session; 103 104 //ここに、入れとく 105 mIsRecordingVideo=true; 106 mMediaRecorder.start(); 107 108 new Handler().postDelayed(new Runnable() { 109 @Override 110 public void run() { 111 try { 112 stopRecordingVideo(); 113 }catch(Exception e){ 114 } 115 } 116 }, 10000); 117 } 118 119 }, mBackgroundHandler); 120 } catch (Exception e) { 121 e.printStackTrace(); 122 } 123 } 124 125 126 private Integer mSensorOrientation; 127 private String mNextVideoAbsolutePath; 128 private CaptureRequest.Builder mPreviewBuilder; 129 130 private void setUpMediaRecorder() throws IOException { 131 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); 132 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 133 if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) { 134 mNextVideoAbsolutePath = getVideoFilePathy(); 135 Log.e(TAG,mNextVideoAbsolutePath); 136 } 137 mMediaRecorder.setOutputFile(mNextVideoAbsolutePath); 138 mMediaRecorder.setVideoEncodingBitRate(10000000); 139 mMediaRecorder.setVideoFrameRate(30); 140 mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); 141 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 142 WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 143 int rotation = windowManager.getDefaultDisplay().getRotation(); 144 switch (mSensorOrientation) { 145 case SENSOR_ORIENTATION_DEFAULT_DEGREES: 146 mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation)); 147 break; 148 case SENSOR_ORIENTATION_INVERSE_DEGREES: 149 mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation)); 150 break; 151 } 152 mMediaRecorder.prepare(); 153 } 154 155 private static Size chooseVideoSize(Size[] choices) { 156 for (Size size : choices) { 157 if (size.getWidth() == size.getHeight() * 4 / 3 && size.getWidth() <= 1080) { 158 return size; 159 } 160 } 161 return choices[choices.length - 1]; 162 } 163 164 private void stopBackgroundThread() { 165 mBackgroundThread.quitSafely(); 166 try { 167 mBackgroundThread.join(); 168 mBackgroundThread = null; 169 mBackgroundHandler = null; 170 } catch (InterruptedException e) { 171 e.printStackTrace(); 172 } 173 } 174 175 private void closeCamera() { 176 try { 177 mCameraOpenCloseLock.acquire(); 178 if (null != mCameraDevice) { 179 mCameraDevice.close(); 180 mCameraDevice = null; 181 } 182 if (null != mMediaRecorder) { 183 mMediaRecorder.release(); 184 mMediaRecorder = null; 185 } 186 } catch (InterruptedException e) { 187 throw new RuntimeException("Interrupted while trying to lock camera closing."); 188 } finally { 189 mCameraOpenCloseLock.release(); 190 } 191 } 192 193 194 195 @Override 196 public void onDestroy() { 197 closeCamera(); 198 stopBackgroundThread(); 199 } 200 201 public String getVideoFilePathy() { 202 File filePathy; 203 String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/cameraMovie/"; 204 filePathy = new File(path); 205 if (!filePathy.exists()) { 206 boolean result = filePathy.mkdir(); 207 if (result) { 208 System.out.println("Success"); 209 } 210 } 211 return filePathy.toString() + "/" + System.currentTimeMillis() + ".mp4"; 212 } 213 214 215 private void stopRecordingVideo() { 216 mIsRecordingVideo = false; 217 try{ 218 mMediaRecorder.stop(); 219 mMediaRecorder.reset(); 220 }catch(RuntimeException stopException){ 221 //例外の例外らしい https://translate.googleusercontent.com/translate_c?depth=1&hl=ja&prev=search&rurl=translate.google.co.jp&sl=en&sp=nmt4&u=https://stackoverflow.com/questions/16221866/mediarecorder-failed-when-i-stop-the-recording&usg=ALkJrhiJDHh9TLeR_qko07QXWEqsYG8hAg 222 } 223 mNextVideoAbsolutePath = null; 224 } 225 226 @Override 227 public IBinder onBind(Intent intent) { 228 Log.e(TAG,"onBind"); 229 // TODO: Return the communication channel to the service. 230 throw new UnsupportedOperationException("Not yet implemented"); 231 } 232} 233 234

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

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

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

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

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

guest

回答1

0

あなたは例外を処理しているのではなく、隠蔽しているだけです。そのため本当のエラーがわかりません。
ところどころに見られるtry-catchをコンパイルエラーが出ない程度まで削除してください。

投稿2017/08/10 10:26

yona

総合スコア18155

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

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

zzzggg

2017/08/10 11:37

わかりました。すぐ取り掛かります。ありがとうございます。
zzzggg

2017/08/10 12:27 編集

自分がtry catchでエラーを消していた、mMediaRecorder.stop();では、 有効なオーディオ/ビデオデータが受信されなかった場合、Runtimeエラーが出るそうです。 それについて調べたところこのようなサイトで見つけました。 https://stackoverflow.com/questions/16221866/mediarecorder-failed-when-i-stop-the-recording このサイトをみて、try catchをつけていたのですが、コメントアウトしました。有効なオーディオ/ビデオデータを取得するにはどうすればいいのでしょうか? ``` E/MediaRecorder: stop failed: -1007 08-10 21:26:48.754 15493-16511/com.google.android.exoplayer2.demo E/UncaughtException: java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method) at com.google.android.exoplayer2.demo.BackCameraService.stopRecordingVideo(BackCameraService.java:368) at com.google.android.exoplayer2.demo.BackCameraService.access$600(BackCameraService.java:34) at com.google.android.exoplayer2.demo.BackCameraService$2$1.run(BackCameraService.java:240) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.os.HandlerThread.run(HandlerThread.java:61) ```
yona

2017/08/10 13:17

理由があるならいいですよ。 全てのtry-catchに意味があるかを調べてください。
zzzggg

2017/08/10 13:23

try catchをコメントアウトすると、赤〜線で、try catchすべきエラーの名前が表示されていることを確認するということでしょうか?
zzzggg

2017/08/10 13:23

全部確認して、そのエラー名でtry catchに変更して、この結果となりました。
yona

2017/08/10 15:41

try-catchの勉強から始めましょう。 時間の無駄ですね。
zzzggg

2017/08/16 08:03

わかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問