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

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

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

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

Android

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

Android Studio

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

Q&A

0回答

483閲覧

E/MediaRecorder: stop failed: -1007が、Camera2APIで出ます。

giant

総合スコア132

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/08/10 02:44

編集2022/01/12 10:55

Camera2APIを使って、Serviceで、起動後に録画を開始して、10秒後に停止するアプリを作りました。
しかし、E/MediaRecorder: stop failed: -1007
が出て、保存した動画を再生しようとすると、「予想外のエラーが発生したため、このファイルを適切に再生できません」と表示されます。

java

1public class MyService12 extends Service { 2 public MyService12() { 3 } 4 private CameraDevice mCameraDevice; 5 private Size mVideoSize; 6 private MediaRecorder mMediaRecorder; 7 private boolean mIsRecordingVideo; 8 private HandlerThread mBackgroundThread; 9 private Handler mBackgroundHandler; 10 private Semaphore mCameraOpenCloseLock = new Semaphore(1); 11 Handler handler; 12 protected CameraDevice cameraDevice; 13 protected CameraCaptureSession session; 14 protected ImageReader imageReader; 15 16 @Override 17 public int onStartCommand(Intent intent, int flags, int startId) { 18 Log.e(TAG, "onStartCommand flags " + flags + " startId " + startId); 19 openCamera(); 20 startBackgroundThread(); 21 return super.onStartCommand(intent, flags, startId); 22 } 23 private void startBackgroundThread() { 24 Log.e(TAG,"startBackgroundThread()"); 25 mBackgroundThread = new HandlerThread("CameraBackground"); 26 mBackgroundThread.start(); 27 mBackgroundHandler = new Handler(mBackgroundThread.getLooper()); 28 } 29 30 @SuppressWarnings("MissingPermission") 31 private void openCamera() { 32 Log.d(TAG, "openCamera"); 33 CameraManager manager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE); 34 try { 35 Log.d(TAG, "tryAcquire"); 36 if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { 37 throw new RuntimeException("Time out waiting to lock camera opening."); 38 } 39 String cameraId = manager.getCameraIdList()[0]; 40 41 //この下で、バックカメラを指定する 42 CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 43 StreamConfigurationMap map = characteristics 44 .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 45 mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); 46 if (map == null) { 47 throw new RuntimeException("Cannot get available preview/video sizes"); 48 } 49 mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); 50 mMediaRecorder = new MediaRecorder(); 51 manager.openCamera(cameraId, mStateCallback, null); 52 } catch (CameraAccessException e) { 53 Log.e(TAG, "CameraAccessException e"); 54 } catch (NullPointerException e) { 55 Log.e(TAG, "NullPointerException e"); 56 } catch (InterruptedException e) { 57 throw new RuntimeException("Interrupted while trying to lock camera opening."); 58 } 59 } 60 61 protected CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { 62 @Override 63 public void onOpened(@NonNull CameraDevice cameraDevice) { 64 Log.e(TAG, "CameraDevice.StateCallback onOpened"); 65 mCameraDevice = cameraDevice; 66 //startPreview(); 67 mCameraOpenCloseLock.release(); 68 //とりあえずここから 69 try { 70 setUpMediaRecorder(); 71 //早すぎるとまずい?それは、stop? 72 startRecordingVideo(); 73 //ここで、10秒後にstopするようにした 74 new Handler().postDelayed(new Runnable() { 75 @Override 76 public void run() { 77 // TODO: ここで処理を実行する 78 //mIsRecordingVideo = true; 79 //mMediaRecorder.start(); 80 stopRecordingVideo(); 81 } 82 }, 10000); 83 }catch(Exception e){ 84 } 85 //これを違うとこから呼び出す startRecordingVideo(); は消す 86 } 87 @Override 88 public void onDisconnected(@NonNull CameraDevice camera) { 89 Log.e(TAG, "CameraDevice.StateCallback onDisconnected"); 90 mCameraOpenCloseLock.release(); 91 cameraDevice.close(); 92 mCameraDevice = null; 93 } 94 @Override 95 public void onError(@NonNull CameraDevice camera, int error) { 96 Log.e(TAG, "CameraDevice.StateCallback onError " + error); 97 mCameraOpenCloseLock.release(); 98 cameraDevice.close(); 99 mCameraDevice = null; 100 } 101 }; 102 103 private void startRecordingVideo() { 104 Log.e(TAG, "startRecordingVideo()"); 105 if (null == mCameraDevice) { 106 return; 107 } 108 try { 109 //本来からここにあったコード 110 mIsRecordingVideo=true; 111 mMediaRecorder.start(); 112 113 }catch(Exception e){ 114 115 } 116 } 117 118 private Integer mSensorOrientation; 119 private String mNextVideoAbsolutePath; 120 private CaptureRequest.Builder mPreviewBuilder; 121 private void setUpMediaRecorder() throws IOException { 122 Log.e(TAG,"setUpMediaRecorder"); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 123 if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) { 124 mNextVideoAbsolutePath = getVideoFilePathy(); 125 Log.e(TAG,mNextVideoAbsolutePath); 126 } 127 mMediaRecorder.setOutputFile(mNextVideoAbsolutePath); 128 mMediaRecorder.setVideoEncodingBitRate(10000000); 129 mMediaRecorder.setVideoFrameRate(30); 130 mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 131 WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 132 int rotation = windowManager.getDefaultDisplay().getRotation(); 133 switch (mSensorOrientation) { 134 case SENSOR_ORIENTATION_DEFAULT_DEGREES: 135 mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation)); 136 break; 137 case SENSOR_ORIENTATION_INVERSE_DEGREES: 138 mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation)); 139 break; 140 } 141 mMediaRecorder.prepare(); 142 } 143 private static Size chooseVideoSize(Size[] choices) { 144 Log.e(TAG,"chooseVideoSize"); 145 for (Size size : choices) { 146 if (size.getWidth() == size.getHeight() * 4 / 3 && size.getWidth() <= 1080) { 147 return size; 148 } 149 } 150 Log.e(TAG, "Couldn't find any suitable video size"); 151 return choices[choices.length - 1]; 152 } 153 154 private void stopBackgroundThread() { 155 Log.e(TAG,"stopBackgroundThread"); 156 mBackgroundThread.quitSafely(); 157 try { 158 mBackgroundThread.join(); 159 mBackgroundThread = null; 160 mBackgroundHandler = null; 161 } catch (InterruptedException e) { 162 e.printStackTrace(); 163 } 164 } 165 166 private void closeCamera() { 167 Log.e(TAG,"closeCamera()"); 168 try { 169 mCameraOpenCloseLock.acquire(); 170 //closePreviewSession(); 171 if (null != mCameraDevice) { 172 mCameraDevice.close(); 173 mCameraDevice = null; 174 } 175 if (null != mMediaRecorder) { 176 mMediaRecorder.release(); 177 mMediaRecorder = null; 178 } 179 } catch (InterruptedException e) { 180 throw new RuntimeException("Interrupted while trying to lock camera closing."); 181 } finally { 182 mCameraOpenCloseLock.release(); 183 } 184 } 185 186 @Override 187 public void onDestroy() { 188 Log.e(TAG,"onDestroy"); 189 closeCamera(); 190 stopBackgroundThread(); 191 } 192 193 public String getVideoFilePathy() { 194 Log.e(TAG, "getVideoFilePahy"); 195 196 File filePathy; 197 String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + "/cameraMovie/"; 198 filePathy = new File(path); 199 if (!filePathy.exists()) { 200 boolean result = filePathy.mkdir(); 201 if (result) { 202 System.out.println("Success"); 203 } 204 } 205 return filePathy.toString() + "/" + System.currentTimeMillis() + ".mp4"; 206 } 207 208 //ストップは写真とは違う、これは、startされた10秒後にやる、さっきのとこ 209 private void stopRecordingVideo() { 210 Log.e(TAG,"stopRecordingVideo"); 211 mIsRecordingVideo = false; 212 try{ 213 mMediaRecorder.stop(); 214 mMediaRecorder.reset(); 215 }catch(RuntimeException stopException){ 216 //例外の例外らしい 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 217 } 218 mNextVideoAbsolutePath = null; 219 //startPreview(); 220 } 221 222 @Override 223 public IBinder onBind(Intent intent) { 224 Log.e(TAG,"onBind"); 225 // TODO: Return the communication channel to the service. 226 throw new UnsupportedOperationException("Not yet implemented"); 227 } 228}

イメージ説明

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問