I'm trying to record some video via M4A running on my htc evo 4g running 
gingerbread.  Everything seems to work fine until I turn off the recording by 
pressing the stop button, which called the media record's .Stop method.  I end 
up with a zero length file.  This makes me think that I need to either:
Set a different permission.  I have my permissions displayed below.  If there 
is something else that I need to add, please point me in the correct 
direction.Add some command that will explicitly save the video to the output 
file.  I have included my code below, please let me know if there is something 
I am missing.
Wally

Manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"; 
android:versionCode="1" android:versionName="1.0" 
package="monoandroidrecordvideo.monoandroidrecordvideo" 
android:installLocation="internalOnly">
  <application android:label="MonoAndroidRecordVideo">
  </application>
  <uses-sdk android:minSdkVersion="8" />
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.RECORD_VIDEO" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Media;

namespace MonoAndroidRecordVideo
{
    [Activity (Label = "Record Video")]            
    public class RecordVideo : Activity, ISurfaceHolderCallback
    {
        MediaRecorder mediaRecorder;
        SurfaceView sv;
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            SetContentView(Resource.Layout.RecordVideo);
            var btnStart = FindViewById<Button>(Resource.Id.StartVid);
            btnStart.Click += HandleBtnStartClick;
            var btnStop = FindViewById<Button>(Resource.Id.StopVid);
            btnStop.Click += HandleBtnStopClick;
            sv = FindViewById<SurfaceView>(Resource.Id.displayVid);
            
            var holder = sv.Holder;
            holder.AddCallback(this); 
            holder.SetType(Android.Views.SurfaceType.PushBuffers); 
            holder.SetFixedSize(400, 300);
        }

        void HandleBtnStopClick(object sender, EventArgs e)
        {
            try
            {
                mediaRecorder.Stop();
            }
            catch (System.Exception sysExc )
            {
                Android.Util.Log.Error("Record Video", sysExc.Message);
            }
        }

        void HandleBtnStartClick(object sender, EventArgs e)
        {
            try
            {
                mediaRecorder.Start();
            }
            catch (System.Exception sysExc)
            {
                Android.Util.Log.Error("Record Video", sysExc.Message);
            }
        }

        #region ISurfaceHolderCallback implementation
        void ISurfaceHolderCallback.SurfaceChanged (ISurfaceHolder holder, int 
format, int width, int height)
        {
            
        }

        void ISurfaceHolderCallback.SurfaceCreated(ISurfaceHolder holder)
        {
            try
            {
                
//SetRequestedOrientation(Android.Content.PM.ScreenOrientation.Portrait);
                mediaRecorder = new MediaRecorder();

                //CamcorderProfile cp = 
CamcorderProfile.Get(CamcorderQuality.High);
                //mediaRecorder.SetProfile(cp);

                mediaRecorder.SetMaxFileSize(100000);
                // Configure the input sources
                mediaRecorder.SetAudioSource(Android.Media.AudioSource.Mic);
                mediaRecorder.SetVideoSource(Android.Media.VideoSource.Camera);
                // Set the output format 
                
mediaRecorder.SetOutputFormat(Android.Media.OutputFormat.Default);
                // Specify the audio and video encoding 
                
mediaRecorder.SetAudioEncoder(Android.Media.AudioEncoder.Default);
                
mediaRecorder.SetVideoEncoder(Android.Media.VideoEncoder.Default);
                // Specify the output file 

                mediaRecorder.SetOutputFile("/sdcard/myoutputfile.mp4");
                mediaRecorder.SetPreviewDisplay(holder.Surface);
                // Prepare to record 
                mediaRecorder.Prepare();
            }
            catch (System.Exception sysExc)
            {
                Android.Util.Log.Error("Record Video", sysExc.Message);
            }
        }

        void ISurfaceHolderCallback.SurfaceDestroyed (ISurfaceHolder holder)
        {
            mediaRecorder.Release();
        }
        #endregion
    }
}
                                          
_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to