I'm confused, why can't I use OutputFormat.OUTPUT_FORMAT_MPEG2TS as a parameter to call the MediaRecorder.setOutputFormat method on a device with Android version 2.3.6?
The android source has this bit of code:
public final class OutputFormat { private OutputFormat() {} public static final int DEFAULT = 0; public static final int THREE_GPP = 1; public static final int MPEG_4 = 2; public static final int RAW_AMR = 3; public static final int AMR_NB = 3; public static final int AMR_WB = 4; public static final int AAC_ADIF = 5; public static final int AAC_ADTS = 6; public static final int OUTPUT_FORMAT_RTP_AVP = 7; public static final int OUTPUT_FORMAT_MPEG2TS = 8; };
The testing device is a note from a Samsung galaxy showing version 2.3.6 for Android.
The request MediaRecorder.setAudioSource (7) does not throw an error even if it is also hidden (MediaRecorder.AudioSource.VOICE_COMMUNICATION == 7).
MediaRecorder.setOutputFormat (8) throws an exception with this log output:
03-21 17:45:27.330: E/MediaRecorder(30622): setOutputFormat failed: -2147483648
Here is the code that fails when calling MediaRecorder.setOutputFormat :
import java.io.IOException; import android.app.Activity; import android.content.pm.ActivityInfo; import android.media.CamcorderProfile; import android.media.MediaRecorder; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; public class CameraStreamer extends Activity implements OnClickListener, SurfaceHolder.Callback { MediaRecorder recorder; SurfaceHolder holder; boolean recording = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); recorder = new MediaRecorder(); initRecorder(); setContentView(R.layout.main); SurfaceView cameraView = (SurfaceView) findViewById(R.id.CameraView); holder = cameraView.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); cameraView.setClickable(true); cameraView.setOnClickListener(this); } private void initRecorder() { recorder.setAudioSource(7);
source share