MediaRecorder problem

All your problems with Audio, Video and Images.

MediaRecorder problem

Postby r0yalty » Sun Apr 04, 2010 3:03 pm

Hi,

I'm having a bit of a problem with MediaRecorder which i can't solve.

I've exported as much issue related code as possible, creating a Service that pretty much doesn't make sense, but should still work nevertheless. I did this in attempt to isolate the issue.

The attached code whould start a Thread and enter a while-loop, where it should start recording from the MIC to a file for 500ms, then stopping the recording, reseting the recorder and deleting the file, over and over.

It does just that, but it will after a random number of loops just stop on one of the MediaRecorder calls. Sometimes it will loop 1000 times and sometimes 20.
Sometimes when this occures, other MediaRecorder applications stop to function as well. For example I tried to start vide recording with the Nexus One shipped Recorder app, but it would not film..

Is there a known issue with the Media Recorder or am I doing something wrong?

LogCat doesn't say much, it just stops logging my App once it stops on one of the MediaRecorder calls, no exceptions or errors..

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. import java.io.File;
  3.  
  4. import java.util.ArrayList;
  5.  
  6.  
  7.  
  8. import android.app.Service;
  9.  
  10. import android.content.Intent;
  11.  
  12. import android.media.MediaRecorder;
  13.  
  14. import android.os.Environment;
  15.  
  16. import android.os.IBinder;
  17.  
  18. import android.util.Log;
  19.  
  20.  
  21.  
  22. public class RecorderService extends Service {
  23.  
  24.        
  25.  
  26.         private String tag = "MYAPP";
  27.  
  28.        
  29.  
  30.         boolean recording = true;
  31.  
  32.         MediaRecorder recorder;
  33.  
  34.        
  35.  
  36.         @Override
  37.  
  38.         public IBinder onBind(Intent arg0) {
  39.  
  40.                 // TODO Auto-generated method stub
  41.  
  42.                 return null;
  43.  
  44.         }
  45.  
  46.        
  47.  
  48.         @Override
  49.  
  50.         public void onCreate() {
  51.  
  52.                 super.onCreate();
  53.  
  54.                 startRecording();
  55.  
  56.         }
  57.  
  58.        
  59.  
  60.         @Override
  61.  
  62.         public void onDestroy() {
  63.  
  64.                 recording = false;
  65.  
  66.                 recorder.release();
  67.  
  68.                 super.onDestroy();
  69.  
  70.         }
  71.  
  72.        
  73.  
  74.         private void startRecording(){
  75.  
  76.                 new Thread(){
  77.  
  78.                         @Override
  79.  
  80.                         public void run() {
  81.  
  82.                                 File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/TestApp/tes.3gp");
  83.  
  84.                                 f.delete();
  85.  
  86.                                 Log.d(tag, "About to create new MediaRecorder();");
  87.  
  88.                                 recorder = new MediaRecorder();
  89.  
  90.                                 int counter = 0;
  91.  
  92.                                 while (recording) {
  93.  
  94.                                         counter++;
  95.  
  96.                                         Log.d(tag, "Starting loop");
  97.  
  98.                                         Log.d(tag, "LOOP RUN: " + Integer.toString(counter));
  99.  
  100.  
  101.  
  102.                                         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  103.  
  104.                                         recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  105.  
  106.                                         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  107.  
  108.  
  109.  
  110.                                         Log.d(tag, "Setting output file");
  111.  
  112.                                         recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() +"/TestApp/tes.3gp");
  113.  
  114.                                         try {
  115.  
  116.                                                 Log.d(tag, "preparing recorder");
  117.  
  118.                                                 recorder.prepare();
  119.  
  120.                                         } catch (Exception e) {
  121.  
  122.                                                 Log.d(tag, e.toString());
  123.  
  124.                                         }
  125.  
  126.  
  127.  
  128.                                         Log.d(tag, "Starting recorder");
  129.  
  130.                                         recorder.start();
  131.  
  132.  
  133.  
  134.                                         for (int i = 0; i < 5; i++) {
  135.  
  136.                                                 mysleep(100);
  137.  
  138.                                         }
  139.  
  140.  
  141.  
  142.                                         Log.d(tag, "Stopping recorder");
  143.  
  144.                                         recorder.stop();
  145.  
  146.                                         Log.d(tag, "resetting recorder");
  147.  
  148.                                         recorder.reset();
  149.  
  150.                                         f.delete();
  151.  
  152.                                 }
  153.  
  154.                                 Log.d(tag, "Recording loop ended");
  155.  
  156.                         }
  157.  
  158.                 }.start();
  159.  
  160.         }
  161.  
  162.          
  163.  
  164.          private void mysleep(int time){
  165.  
  166.                 try {
  167.  
  168.                                 Thread.sleep(time);
  169.  
  170.                         } catch (InterruptedException ex) {
  171.  
  172.                                 Log.e("Exception: ", ex.getMessage());
  173.  
  174.                         }
  175.  
  176.             }
  177.  
  178. }
  179.  
  180.  
Parsed in 0.041 seconds, using GeSHi 1.0.8.4
Attachments
RecorderService.java
(2.14 KiB) Downloaded 49 times
r0yalty
Freshman
Freshman
 
Posts: 5
Joined: Sun Apr 04, 2010 7:26 am

Top

Return to Multimedia Problems

Who is online

Users browsing this forum: No registered users and 13 guests