简体   繁体   English

Android-Android4.0中的MediaPlayer异常

[英]Android - MediaPlayer exception in Android4.0

I am using Video Recording in my Android Application. 我在Android应用程序中使用视频录制。 It works fine in Android2.2 and Android2.3 devices but the application is crashing in Android4.0 . Android2.2Android2.3设备上运行正常,但在Android4.0应用程序崩溃。

Here is my code: 这是我的代码:

  class VideoPreview extends SurfaceView implements SurfaceHolder.Callback
  {
  MediaRecorder recorder;
  SurfaceHolder holder = null; 
  FileOutputStream fileout; 
 public VideoPreview(Context context,MediaRecorder temprecorder) {
 super(context);
    recorder= temprecorder;
    holder= getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
   }
  public void surfaceCreated(SurfaceHolder holder){
    }
  public void surfaceDestroyed(SurfaceHolder holder)
  {
      if(recorder!=null)
      {
    recorder.release();
    Log.d("Video Preview", "Exception1");
    recorder = null;
      }
  }

  //surfaceChanged : This method is called after the surface is created.
  public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
  {
  }
  public void  stop(){

      if(recorder!=null)
      {
      recorder.release();
      recorder = null;
      }        
  }
    @Override 
    public boolean onKeyDown (int keyCode, KeyEvent event){ 

         return false; 

    } 

  public boolean start()  {     
      String state = android.os.Environment.getExternalStorageState(); 
      String path = Environment.getExternalStorageDirectory().getAbsolutePath() +"/myvideo.mp4";
      File fname = new File(path);
      if (!state.equals(Environment.MEDIA_MOUNTED)) return false;
      File directory = new File(path).getParentFile(); 
      if(!directory.exists() && !directory.mkdirs())   return false; 

          if (recorder == null)    
            recorder = new MediaRecorder();         

           int out_format = MediaRecorder.OutputFormat.MPEG_4;
           //THREE_GPP;
          recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);    
          recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
            recorder.setOutputFormat(out_format); 
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
            //recorder.setMaxDuration(20000); 
            //recorder.setVideoSize(352,288);   // 352, 288 m_recorder.setVideoSize(320, 240); 176,144
            recorder.setVideoFrameRate(15);
            recorder.setOutputFile(fname.getPath());                
           /* videoview = (VideoView) findViewById(R.id.videosurface);
            SurfaceHolder holder = videoview.getHolder();
            mediarecorder.setPreviewDisplay(holder.getSurface());*/             
            recorder.setPreviewDisplay(holder.getSurface());
            try {
                Thread.sleep(6000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (!Recorder_Prepare())
            return false;
            else
            return true;
      }    

private boolean Recorder_Prepare()
    {

        try {
            if (recorder != null){
            recorder.prepare();
            Log.d("Video Preview", "Exception2");
            recorder.start();     
            Log.d("Video Preview", "Exception3");
            }
        }
            catch (IllegalStateException e) {
                return false;
            }
            catch (IOException e) { 
                return false;
            }
            return true;            
    }             
  }

Here is my logcat throws exception at recorder.start(); 这是我的logcatrecorder.start();处引发异常recorder.start(); as below: 如下:

      06-11 13:54:54.926: E/MediaRecorder(22582): start failed: -19
      06-11 13:54:54.961: E/AndroidRuntime(22582): FATAL EXCEPTION: Thread-2201
      06-11 13:54:54.961: E/AndroidRuntime(22582): java.lang.RuntimeException: start failed.
      06-11 13:54:54.961: E/AndroidRuntime(22582):  at android.media.MediaRecorder.start(Native Method)
      06-11 13:54:54.961: E/AndroidRuntime(22582):  at  com.Myapp.VideoPreview.Recorder_Prepare(VideoPreview.java:106)
      06-11 13:54:54.961: E/AndroidRuntime(22582):  at com.Myapp.VideoPreview.start(VideoPreview.java:94)
      06-11 13:54:54.961: E/AndroidRuntime(22582):  at com.Myapp.videoRecord$1.run(videoRecord.java:94)
      06-11 13:54:54.961: E/AndroidRuntime(22582):  at java.lang.Thread.run(Thread.java:856)

I verfied the application in Samsung Nexus S and it does not have SDCard Support. 我在Samsung Nexus S中验证了该应用程序,但它不支持SDCard I googled to solve the problem for 4 hours but cant found the solution. 我用谷歌搜索了4小时,但找不到解决方案。 Are there any deprecated methods in the above program? 上面的程序中有不推荐使用的方法吗? Please help me to resolve the problem. 请帮助我解决问题。

Android 4.0 introduces new runtime checks to make sure you aren't doing something silly like accessing the network on the main thread. Android 4.0引入了新的运行时检查,以确保您不会像访问主线程上的网络那样做傻事。

Are you doing something silly like accessing the network on the main thread? 您是否在做一些愚蠢的事情,例如访问主线程上的网络? Is your media being streamed over the network, and where are you calling your VideoPreview.start() method from? 您的媒体是否正在通过网络流式传输,并且从何处调用VideoPreview.start()方法?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM