Reputation: 41
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
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
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