我使用以下代码从相机捕获图像。但我不能通过这个录制视频

时间:2016-06-09 06:26:17

标签: c# uwp cameracapturetask

{{1}}

2 个答案:

答案 0 :(得分:0)

只需使用标准样本录制来自Capture photos and video with CameraCaptureUI

的视频
CameraCaptureUI captureUI = new CameraCaptureUI();
captureUI.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4;

StorageFile videoFile = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Video);

if (videoFile == null)
{
// User cancelled photo capture
return;
}

答案 1 :(得分:0)

你也可以使用MediaCapture来录制视频,这是我工作过的一个项目的摘录(我刚刚从记忆中写下了一些内容,如果我回到家,我会纠正这个问题。 ):

public class CameraController
{
    private MediaCapture _mediaCap;
    private bool _isInitialised;

    public async Task InitialiseWebCam()
    {
        if (!_isInitialised)
        {
            var settings = ApplicationData.Current.LocalSettings;
            string preferredDeviceName = $"{settings.Values["PreferredDeviceName"]}";

            var videoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
            DeviceInformation device = videoDevices.FirstOrDefault(x => x.Name == preferredDeviceName);
            if (device == null)
                device = videoDevices.FirstOrDefault();

            if (device == null)
                throw new Exception("Cannot find a camera device");
            else
            {
                //initialize the WebCam via MediaCapture object
                _mediaCap = new MediaCapture();
                var initSettings = new MediaCaptureInitializationSettings { VideoDeviceId = device.Id };
                await _mediaCap.InitializeAsync(initSettings);
                _mediaCap.Failed += new MediaCaptureFailedEventHandler(MediaCaptureFailed);

                _isInitialised = true;
            }
        }
    }

    public async StorageFile RecordVideo(TimeSpan duration)
    {
        if (!_isInitialised)
            await InitialiseWebCam();

        StorageFile videoFile = await KnownFolders.VideosLibrary.CreateFileAsync(
            $"video_{DateTime.Now.ToString("yyyyMMddHHmmss")}.mp4", CreationCollisionOption.GenerateUniqueName);

        var mediaEncoding = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Vga);
        await _mediaCap.StartRecordToStorageFileAsync(mediaEncoding, videoFile);
        await Task.Delay(duration);
        await _mediaCap.StopRecordAsync();

        return videoFile;
    }

    private void MediaCaptureFailed(MediaCapture sender, MediaCaptureFailedEventArgs errorEventArgs)
    {
        //TODO: Implement this
    }
}