2016-05-05 7 views
1

を停止すると、私のfull codeである私は#onCreateでMediaRecorder#ストップを使用する場合、ここでmy projectがあり、それはそれを修正するので、どのようにjava.lang.RuntimeException:停止に失敗しました。使用MediaRecord#ここで

java.lang.RuntimeException: stop failed. 
at android.media.MediaRecorder.stop(Native Method) 
at ro.rotry.TestMr.onCreate(TestMr.java:39) 
at android.app.Activity.performCreate(Activity.java:6237) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
at android.app.ActivityThread.-wrap11(ActivityThread.java)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

を上げますか?

+0

ですsetaudiosource()とsetaudioencoder()を使用していませんか? –

答えて

0

理由は、私が#start前#createVirtualDisplayを欠場あり、ここに私の完全な活性は、あなたは

package ro.rotry; 

import android.content.Context; 
import android.content.Intent; 
import android.hardware.display.DisplayManager; 
import android.hardware.display.VirtualDisplay; 
import android.media.MediaRecorder; 
import android.media.projection.MediaProjection; 
import android.media.projection.MediaProjectionManager; 
import android.os.Bundle; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.util.DisplayMetrics; 

import java.io.IOException; 

public class TestMr extends AppCompatActivity { 

    MediaRecorder mr; 
    MediaProjection mp; 
    int dw = 720; 
    int dh = 1280; 
    MediaProjectionManager mpm; 
    DisplayMetrics metrics; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test_mr); 
     mr = new MediaRecorder(); 
     initRecorder(); 
     mpm = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE); 
     startActivityForResult(mpm.createScreenCaptureIntent(), 1000); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     mp = mpm.getMediaProjection(resultCode, data); 
     mp.createVirtualDisplay(getClass().getName(), dw, dh, metrics.densityDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mr.getSurface(), new Callback(), null); 
     mr.start(); 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      throw new RuntimeException(e); 
     } 

     mr.stop(); 
    } 

    class Callback extends VirtualDisplay.Callback { 

    } 

    private void initRecorder() { 
     try { 

      mr.setVideoSource(MediaRecorder.VideoSource.SURFACE); 
      mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      mr.setOutputFile(Environment 
        .getExternalStoragePublicDirectory(Environment 
          .DIRECTORY_DOWNLOADS) + "/video.mp4"); 
      mr.setVideoSize(dw, dh); 
      mr.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
      mr.setVideoEncodingBitRate(12 * 1000 * 1000); 
      mr.setVideoFrameRate(60); 
      mr.prepare(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

私はあなたがコードを試して、それは動作しません、私は 'mr.stop ) - 'E/MediaRecorder:停止に失敗しました:-1007' on Redmi 4 Prime(Marshmallow、6 Android) – user25

0

の代わりに、この:

mr.setVideoSource(MediaRecorder.VideoSource.SURFACE); 
    mr.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mr.setVideoSize(1920, 1080); 
    mr.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 

ビデオカメラプロファイルを使用してみてください:

 try { 

     camera.unlock(); 

     recorder.setPreviewDisplay(holder.getSurface()); 
     recorder.setCamera(camera); 

     recorder.setOrientationHint(cameraRotationDegree); 
     recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
     recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 
     recorder.setVideoEncodingBitRate(5000000); 
     recorder.setOutputFile(getFilesDir() + "/try.mp4"); 
     recorder.prepare(); 
     Thread.sleep(1000); 
     recorder.start(); 

    }catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

それは私の質問を修正しない、カメラは(ゲームプレイのような)アンドロイドの画面をキャプチャしない – asullaherc

+0

カメラのキャプチャと画面の録画は別のものです – user25

関連する問題