2016-05-05 2 views
1

вот мой full code, вот my project, когда я использую MediaRecorder # остановку в #onCreate, это поднятьjava.lang.RuntimeException: stop failed. при использовании 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

вам has'nt использовать setaudiosource() и setaudioencoder()? –

ответ

0

причина я скучаю #createVirtualDisplay перед тем #start, вот моя полная активность

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: stop failed: -1007' на 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

Смежные вопросы