Muhammad bilal taj
Muhammad bilal taj

Reputation: 41

How to capture video using front camera in windows phone using c#

I am working on a windows phone application which requires video capture through front facing camera using c#, I am able to capture video with the help of back camera but I need to capture with the help of front camera. I have searched a lot on this but couldn't find relevant answer. Your help will be appreciated.

    public partial class Movies : PhoneApplicationPage
    {

        VideoBrush myvideobrush;      //for capturing video.
        CaptureSource myvideosource;  //source for capturing video.
        VideoCaptureDevice mydevice;  //device for capturing video.
        FileSink myfilesink;          //for storing the video.
        private string isoVideoFileName = "CameraMovie.mp4";
        private IsolatedStorageFileStream isoVideoFile;


        public Movies()
        {

            InitializeComponent();
            if (myvideosource == null)
            {
                myvideosource = new CaptureSource();
                myfilesink = new FileSink();
                mydevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();

                //System.Collections.ObjectModel.ReadOnlyCollection<System.Windows.Media.VideoCaptureDevice> supportedcams = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();
                //mydevice = supportedcams.ElementAt(0);
            }
            if (mydevice != null)
            {
                myvideobrush = new VideoBrush();

                myvideobrush.SetSource(myvideosource);
                viewFinderRectangle.Fill = myvideobrush;
                stop_btn.IsEnabled = false;
                myvideosource.Start();
            }

        }
        public void startReccording()
        {
            start_btn.IsEnabled = false;
            stop_btn.IsEnabled = true;


            if (myvideosource.VideoCaptureDevice != null && myvideosource.State == CaptureState.Started)
            {
                myvideosource.Stop();
                myfilesink.CaptureSource = myvideosource;
                myfilesink.IsolatedStorageFileName = isoVideoFileName;
            }
            if (myvideosource.VideoCaptureDevice != null && myvideosource.State == CaptureState.Stopped)
            {

                myvideosource.Start();
            }
        }
        public void stopRecording()
        {


            if (myvideosource.VideoCaptureDevice != null && myvideosource.State == CaptureState.Started)
            {
                myvideosource.Stop();

                myfilesink.CaptureSource = null;
                myfilesink.IsolatedStorageFileName = null;
                videoPriview();
            }



        }
        public void videoPriview()
        {

            if (isoVideoFile != null)
            {
                videoPlayer.Play();
            }
            else
            {
                myvideosource.Stop();
                viewFinderRectangle.Fill = null;
                isoVideoFile = new IsolatedStorageFileStream(isoVideoFileName, FileMode.Open, FileAccess.Read, IsolatedStorageFile.GetUserStoreForApplication());
                videoPlayer.SetSource(isoVideoFile);
                videoPlayer.Play();
            }
            start_btn.IsEnabled = true;
            stop_btn.IsEnabled = false;

        }


        private void movies_goback_btn_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.GoBack();
        }

        private void start_btn_Click(object sender, RoutedEventArgs e)
        {
            startReccording();
        }

        private void stop_btn_Click(object sender, RoutedEventArgs e)
        {
            stopRecording();
        }
    }
}

Upvotes: 4

Views: 711

Answers (2)

CAMOBAP
CAMOBAP

Reputation: 5657

CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices() show list supported cameras by returning ReadOnlyCollection<VideoCaptureDevice>

VideoCaptureDevice inheritance from CaptureDevice and CaptureDevice have property FriendlyName or IsDefaultDevice

For my Nokia FriendlyName may have values:

  • "Self portrait camera"
  • "Primary camera"

For my Nokia IsDefaultDevice always true for Primary camera

so finally code which helps to find Front-face camera looks like this:

VideoCaptureDevice frontDevice = null;
ReadOnlyCollection<VideoCaptureDevice> devices = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();

foreach (VideoCaptureDevice dev in devices)
{
    if (!dev.IsDefaultDevice)
    {
        device = dev;
    }
}

// for now device contains front-face camera

Upvotes: 1

Igor Kulman
Igor Kulman

Reputation: 16361

use CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices() to get the list of all the cameras available on the device and choose the front facing one and assign it to your mydevice variable.

Do not forget to set the ID_REQ_FRONTCAMERA permission in your manifest, when accessing the front camera.

Upvotes: 0

Related Questions