我正在开发一个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();
}
}
}
答案 0 :(得分:1)
CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices()
返回ReadOnlyCollection<VideoCaptureDevice>
VideoCaptureDevice
和CaptureDevice
的 CaptureDevice
继承具有属性FriendlyName
或IsDefaultDevice
对于我的诺基亚FriendlyName
可能有值:
"Self portrait camera"
"Primary camera"
我的诺基亚IsDefaultDevice
始终适用于Primary camera
所以最终有助于找到前置摄像头的代码看起来像这样:
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
答案 1 :(得分:0)
使用CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices()
获取设备上所有可用摄像头的列表,然后选择前置摄像头并将其分配给您的mydevice变量。
访问前置摄像头时,不要忘记在清单中设置ID_REQ_FRONTCAMERA权限。