我正在开发一个
Windows手机应用程序,它需要使用c#通过前置摄像头捕获视频,我能够在后置摄像头的帮助下捕获视频,但我需要在前置摄像头的帮助下捕获.我对此进行了大量搜索但未找到相关答案.我们将不胜感激.
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(); } } }
解决方法
CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices()通过返回ReadOnlyCollection< VideoCaptureDevice>来显示列表支持的摄像机.
CaptureDevice和CaptureDevice的VideoCaptureDevice继承具有属性FriendlyName或IsDefaultDevice
对于我的Nokia FriendlyName可能有值:
>“自拍相机”
>“主摄像头”
对于我的诺基亚IsDefaultDevice始终适用于主摄像头
所以最终代码有助于找到前脸相机看起来像这样:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。