コード例 #1
0
        private MediaEncodingProfile getVideoEncoding()
        {
            VideoEncodingQuality quality = VideoEncodingQuality.Auto;

            myQuality = "Auto";

            switch (videoQuality.SelectedIndex)
            {
            case 2:
                quality   = VideoEncodingQuality.HD1080p;
                myQuality = "1080p";
                break;

            case 3:
                quality   = VideoEncodingQuality.HD720p;
                myQuality = "720p";
                break;

            case 4:
                quality   = VideoEncodingQuality.Vga;
                myQuality = "VGA";
                break;

            default:
                break;
            }

            myEncoding = (videoType == null || videoType.SelectedIndex == 0) ? "MP4" : "WMV";

            return((videoType == null || videoType.SelectedIndex == 0) ?
                   MediaEncodingProfile.CreateMp4(quality) :
                   MediaEncodingProfile.CreateWmv(quality));
        }
コード例 #2
0
ファイル: RecordSizeInfo.cs プロジェクト: AlertBoy/TestCamera
 public RecordSizeInfo(uint width, uint height, VideoEncodingQuality type)
 {
     Width    = width;
     Height   = height;
     SizeTag  = width * height;
     SizeType = type;
 }
コード例 #3
0
        /// <summary>
        /// Initializes the <see cref="MediaCapture"/> element.
        /// </summary>
        /// <param name="primaryUse">
        /// The primary use for the camera.
        /// </param>
        /// <param name="videoQuality">
        /// The video quality (for recording only).
        /// </param>
        /// <returns>
        /// The <see cref="MediaCapture"/>.
        /// </returns>
        public async Task <MediaCapture> Initialize(
            CaptureUse primaryUse,
            VideoEncodingQuality videoQuality)
        {
            if (this._mediaCapture != null)
            {
                this.Dispose();
            }

            this.IsCameraAvailable = true;

            var camera = await this.GetCamera(this.ActiveCamera);

            this._mediaCapture = new MediaCapture();

            this._mediaCapture.Failed += this.OnMediaCaptureFailed;

            await
            this._mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id });

            this._mediaCapture.VideoDeviceController.PrimaryUse = primaryUse;

            this._imageEncodingProperties = ImageEncodingProperties.CreateJpeg();
            this._videoEncodingProfile    = MediaEncodingProfile.CreateMp4(videoQuality);

            this.SetEncodingProperties(primaryUse);

            var rotation = this.GetVideoRotation(DisplayInformation.GetForCurrentView().CurrentOrientation);

            if (primaryUse == CaptureUse.Photo)
            {
                await
                this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(
                    MediaStreamType.Photo,
                    this._mediaEncodingProperties);

                this.IsFlashAvailable = this.Settings.FlashControl.Supported;
            }
            else if (primaryUse == CaptureUse.Video)
            {
                await
                this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(
                    MediaStreamType.VideoPreview,
                    this._mediaEncodingProperties);

                await
                this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(
                    MediaStreamType.VideoRecord,
                    this._mediaEncodingProperties);

                this.SetRecordOrientation(rotation);

                this.IsFlashAvailable = this.Settings.TorchControl.Supported;
            }

            this._mediaCapture.SetPreviewRotation(rotation);
            return(this._mediaCapture);
        }
コード例 #4
0
 public ExportVideoTask(IExportProvider provider, StorageFolder destinationFolder, string fileName, uint exportFrameRate, VideoEncodingQuality encodingQuality)
 {
     ExportProvider             = provider;
     DestinationFolder          = destinationFolder;
     FileName                   = fileName;
     ExportFrameRate            = exportFrameRate;
     ExportVideoEncodingQuality = encodingQuality;
     _context                   = SynchronizationContext.Current;
     _cancellationTokenSource   = new CancellationTokenSource();
     _exportTask                = CreateExportTask(_cancellationTokenSource.Token);
     _cancellationTokenSource.Token.Register(ClearCacheAsync);
 }
コード例 #5
0
        /// <summary>
        /// Swaps between the current active camera and the secondary.
        /// </summary>
        /// <param name="primaryUse">
        /// The primary use for the camera.
        /// </param>
        /// <param name="videoQuality">
        /// The video quality (for recording only).
        /// </param>
        /// <returns>
        /// The <see cref="MediaCapture"/>.
        /// </returns>
        public async Task <MediaCapture> ChangeCamera(
            CaptureUse primaryUse,
            VideoEncodingQuality videoQuality)
        {
            switch (this.ActiveCamera)
            {
            case Panel.Front:
                this.ActiveCamera = Panel.Back;
                return(await this.Initialize(primaryUse, videoQuality));

            case Panel.Back:
                this.ActiveCamera = Panel.Front;
                return(await this.Initialize(primaryUse, videoQuality));
            }

            return(null);
        }
コード例 #6
0
        private static async void TranscodeFile(VideoEncodingQuality quality, StorageFile srcFile, StorageFile destFile, Action <StorageFile, ulong> callback, Action <IAsyncActionWithProgress <double> > faultCallback)
        {
            var profile = MediaEncodingProfile.CreateMp4(quality);

            profile.Video.Bitrate      = 750000;
            profile.Audio.ChannelCount = 1;
            profile.Audio.Bitrate      = 62000;
            var transcoder = new MediaTranscoder();

            var prepareOp = await transcoder.PrepareFileTranscodeAsync(srcFile, destFile, profile);

            //message.PrepareTranscodeResult = prepareOp;

            if (prepareOp.CanTranscode)
            {
                var transcodeOp = prepareOp.TranscodeAsync();
                transcodeOp.Progress  += TranscodeProgress;
                transcodeOp.Completed += async(o, e) =>
                {
                    var properties = await destFile.GetBasicPropertiesAsync();

                    var size = properties.Size;

                    TranscodeComplete(o, e, () => callback(destFile, size), faultCallback);
                };
            }
            else
            {
                faultCallback.SafeInvoke(null);

                switch (prepareOp.FailureReason)
                {
                case TranscodeFailureReason.CodecNotFound:
                    Telegram.Api.Helpers.Execute.BeginOnUIThread(() => MessageBox.Show(AppResources.CodecWasNotFound, AppResources.Error, MessageBoxButton.OK));
                    break;

                case TranscodeFailureReason.InvalidProfile:
                    Telegram.Api.Helpers.Execute.BeginOnUIThread(() => MessageBox.Show(AppResources.ProfileIsInvalid, AppResources.Error, MessageBoxButton.OK));
                    break;

                default:
                    Telegram.Api.Helpers.Execute.BeginOnUIThread(() => MessageBox.Show(AppResources.UnknownFailure, AppResources.Error, MessageBoxButton.OK));
                    break;
                }
            }
        }
コード例 #7
0
        void GetPresetProfile(ComboBox combobox)
        {
            Profile = null;
            VideoEncodingQuality videoEncodingProfile = VideoEncodingQuality.Wvga;

            switch (combobox.SelectedIndex)
            {
            case 0:
                videoEncodingProfile = VideoEncodingQuality.HD1080p;
                break;

            case 1:
                videoEncodingProfile = VideoEncodingQuality.HD720p;
                break;

            case 2:
                videoEncodingProfile = VideoEncodingQuality.Wvga;
                break;

            case 3:
                videoEncodingProfile = VideoEncodingQuality.Ntsc;
                break;

            case 4:
                videoEncodingProfile = VideoEncodingQuality.Pal;
                break;

            case 5:
                videoEncodingProfile = VideoEncodingQuality.Vga;
                break;

            case 6:
                videoEncodingProfile = VideoEncodingQuality.Qvga;
                break;
            }

            if (_UseMp4)
            {
                Profile = Windows.Media.MediaProperties.MediaEncodingProfile.CreateMp4(videoEncodingProfile);
            }
            else
            {
                Profile = MediaEncodingProfile.CreateWmv(videoEncodingProfile);
            }
        }
コード例 #8
0
        public async void StartCaptureAsync(VideoEncodingQuality captureQuality)
        {
            // Build the media encoding profile from the selected file type and
            MediaEncodingProfile profile;

            switch (_fileBeingCaptured.FileType)
            {
            case WindowsMediaExtension:
                profile = MediaEncodingProfile.CreateWmv(captureQuality);
                break;

            case Mp4Extension:
                profile = MediaEncodingProfile.CreateMp4(captureQuality);
                break;

            default:
                throw new InvalidOperationException("Unknown file type");
            }

            await _captureManager.StartRecordToStorageFileAsync
                (profile, _fileBeingCaptured);
        }
コード例 #9
0
        void 音訊或視訊檔案的編碼設定()
        {
            encodingProfile = null;

            string xs = 選擇視訊編碼格式.SelectedItem as string;
            switch (xs)
            {
                case "Auto":
                    SelectedQuality = VideoEncodingQuality.Auto;
                    break;
                case "HD1080p":
                    SelectedQuality = VideoEncodingQuality.HD1080p;
                    break;
                case "HD720p":
                    //SelectedQuality = VideoEncodingQuality.HD720p;
                    break;
                case "Wvga":
                    SelectedQuality = VideoEncodingQuality.Wvga;
                    break;
                case "Ntsc":
                    SelectedQuality = VideoEncodingQuality.Ntsc;
                    break;
                case "Pal":
                    SelectedQuality = VideoEncodingQuality.Pal;
                    break;
                case "Vga":
                    SelectedQuality = VideoEncodingQuality.Vga;
                    break;
                case "Qvga":
                    SelectedQuality = VideoEncodingQuality.Qvga;
                    break;
            }
            encodingProfile = MediaEncodingProfile.CreateMp4(SelectedQuality);

            AudioStream = new InMemoryRandomAccessStream();
        }
コード例 #10
0
        async private void StartRadioButton_Click(object sender, RoutedEventArgs e)
        {
            if (_InputFile == null)
            {
                await new Windows.UI.Popups.MessageDialog("Please import a video or music file to convert").ShowAsync();
                return;
            }
            VideoEncodingQuality videoQuallity = VideoEncodingQuality.Wvga;

            if (CS.Width == 1920 && CS.Height == 1080)
            {
                videoQuallity = VideoEncodingQuality.HD1080p;
            }
            else if (CS.Width == 1280 && CS.Height == 720)
            {
                videoQuallity = VideoEncodingQuality.HD720p;
            }
            else if (CS.Width == 800 && CS.Height == 480)
            {
                videoQuallity = VideoEncodingQuality.Wvga;
            }
            else if (CS.Width == 720 && CS.Height == 480)
            {
                videoQuallity = VideoEncodingQuality.Ntsc;
            }
            else if (CS.Width == 720 && CS.Height == 576)
            {
                videoQuallity = VideoEncodingQuality.Pal;
            }
            else if (CS.Width == 640 && CS.Height == 480)
            {
                videoQuallity = VideoEncodingQuality.Vga;
            }
            else if (CS.Width == 320 && CS.Height == 240)
            {
                videoQuallity = VideoEncodingQuality.Qvga;
            }
            if (CS.Extension.ToLower().Equals("mp4"))
            {
                _Profile = MediaEncodingProfile.CreateMp4(videoQuallity);
            }
            else if (CS.Extension.ToLower().Equals("avi"))
            {
                _Profile = MediaEncodingProfile.CreateAvi(videoQuallity);
            }
            else if (CS.Extension.ToLower().Equals("wmv"))
            {
                _Profile = MediaEncodingProfile.CreateWmv(videoQuallity);
            }

            else if (CS.Extension.ToLower().Equals("wma"))
            {
                _Profile = MediaEncodingProfile.CreateWma(AudioEncodingQuality.High);
            }
            else if (CS.Extension.ToLower().Equals("wav"))
            {
                _Profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High);
            }
            else if (CS.Extension.ToLower().Equals("mp3"))
            {
                _Profile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High);
            }
            else if (CS.Extension.ToLower().Equals("m4a"))
            {
                _Profile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.High);
            }
            try
            {
                if (CS.Extension.ToLower().Equals("mp4") ||
                    CS.Extension.ToLower().Equals("avi") ||
                    CS.Extension.ToLower().Equals("wmv"))
                {
                    _Profile.Video.Width   = CS.Width;
                    _Profile.Video.Height  = CS.Height;
                    _Profile.Video.Bitrate = CS.VideoBitRate;
                }
                _Profile.Audio.Bitrate    = CS.AudioBitRate;
                _Profile.Audio.SampleRate = CS.SampleRate;
            }
            catch (Exception exception)
            {
                vars.Output("StartRadioButton_Click ex: " + exception.Message);
                _Profile = null;
                return;
            }
            _cts = new CancellationTokenSource();

            try
            {
                if (_InputFile != null && _Profile != null)
                {
                    _OutputFileName = System.IO.Path.GetFileNameWithoutExtension(_InputFile.Path);
                    string extension = CS.Extension;
                    _OutputFileName = string.Format("[MC] {0}.{1}", _OutputFileName, extension);
                    _OutputFile     = await KnownFolders.VideosLibrary.CreateFileAsync(_OutputFileName, CreationCollisionOption.GenerateUniqueName);

                    var preparedTranscodeResult = await _Transcoder.PrepareFileTranscodeAsync(_InputFile, _OutputFile, _Profile);

                    _Transcoder.VideoProcessingAlgorithm = MediaVideoProcessingAlgorithm.Default;


                    if (preparedTranscodeResult.CanTranscode)
                    {
                        var progress = new Progress <double>(TranscodeProgress);
                        stopwatch.Reset();
                        stopwatch.Start();
                        MASettings.GPVisibility    = Visibility.Visible;
                        StopRadioButton.Visibility = Visibility.Visible;
                        await preparedTranscodeResult.TranscodeAsync().AsTask(_cts.Token, progress);
                    }
                    else
                    {
                        vars.Output(preparedTranscodeResult.FailureReason);
                        MASettings.GPVisibility = Visibility.Collapsed;
                        await new Windows.UI.Popups.MessageDialog("Failed to start.\r\nError: " + preparedTranscodeResult.FailureReason).ShowAsync();
                        StopRadioButton.Visibility = Visibility.Collapsed;
                    }
                }
            }
            catch (TaskCanceledException)
            {
                MASettings.GPVisibility = Visibility.Collapsed;

                StopRadioButton.Visibility = Visibility.Collapsed;

                vars.Output("Transcode Canceled");
            }
            catch (Exception exception)
            {
                MASettings.GPVisibility = Visibility.Collapsed;

                StopRadioButton.Visibility = Visibility.Collapsed;
                await new Windows.UI.Popups.MessageDialog("Failed to convert.\r\nError: " + exception.Message).ShowAsync();

                vars.Output(exception.Message);
            }
        }
コード例 #11
0
        void GetPresetProfile(ComboBox combobox)
        {
            _Profile = null;
            VideoEncodingQuality videoEncodingProfile = VideoEncodingQuality.Wvga;

            switch (combobox.SelectedIndex)
            {
            case 0:
                videoEncodingProfile = VideoEncodingQuality.HD1080p;
                break;

            case 1:
                videoEncodingProfile = VideoEncodingQuality.HD720p;
                break;

            case 2:
                videoEncodingProfile = VideoEncodingQuality.Wvga;
                break;

            case 3:
                videoEncodingProfile = VideoEncodingQuality.Ntsc;
                break;

            case 4:
                videoEncodingProfile = VideoEncodingQuality.Pal;
                break;

            case 5:
                videoEncodingProfile = VideoEncodingQuality.Vga;
                break;

            case 6:
                videoEncodingProfile = VideoEncodingQuality.Qvga;
                break;
            }

            switch (_OutputType)
            {
            case "AVI":
                _Profile = MediaEncodingProfile.CreateAvi(videoEncodingProfile);
                break;

            case "WMV":
                _Profile = MediaEncodingProfile.CreateWmv(videoEncodingProfile);
                break;

            default:
                _Profile = Windows.Media.MediaProperties.MediaEncodingProfile.CreateMp4(videoEncodingProfile);
                break;
            }

            /*
             * For transcoding to audio profiles, create the encoding profile using one of these APIs:
             *  MediaEncodingProfile.CreateMp3(audioEncodingProfile)
             *  MediaEncodingProfile.CreateM4a(audioEncodingProfile)
             *  MediaEncodingProfile.CreateWma(audioEncodingProfile)
             *  MediaEncodingProfile.CreateWav(audioEncodingProfile)
             *
             * where audioEncodingProfile is one of these presets:
             *  AudioEncodingQuality.High
             *  AudioEncodingQuality.Medium
             *  AudioEncodingQuality.Low
             */
        }
コード例 #12
0
        /// <summary>
        /// 提供音视频转码
        /// </summary>
        /// <param name="SourceFile">源文件</param>
        /// <param name="DestinationFile">目标文件</param>
        /// <param name="MediaTranscodeEncodingProfile">转码编码</param>
        /// <param name="MediaTranscodeQuality">转码质量</param>
        /// <param name="SpeedUp">是否启用硬件加速</param>
        /// <returns></returns>
        public static Task TranscodeFromAudioOrVideoAsync(StorageFile SourceFile, StorageFile DestinationFile, string MediaTranscodeEncodingProfile, string MediaTranscodeQuality, bool SpeedUp)
        {
            return(Task.Factory.StartNew((obj) =>
            {
                if (obj is ValueTuple <StorageFile, StorageFile, string, string, bool> Para)
                {
                    using (ExtendedExecutionController ExtExecution = ExtendedExecutionController.TryCreateExtendedExecution().Result)
                    {
                        IsAnyTransformTaskRunning = true;

                        AVTranscodeCancellation = new CancellationTokenSource();

                        MediaTranscoder Transcoder = new MediaTranscoder
                        {
                            HardwareAccelerationEnabled = true,
                            VideoProcessingAlgorithm = Para.Item5 ? MediaVideoProcessingAlgorithm.Default : MediaVideoProcessingAlgorithm.MrfCrf444
                        };

                        try
                        {
                            MediaEncodingProfile Profile = null;
                            VideoEncodingQuality VideoQuality = default;
                            AudioEncodingQuality AudioQuality = default;

                            switch (Para.Item4)
                            {
                            case "UHD2160p":
                                VideoQuality = VideoEncodingQuality.Uhd2160p;
                                break;

                            case "QVGA":
                                VideoQuality = VideoEncodingQuality.Qvga;
                                break;

                            case "HD1080p":
                                VideoQuality = VideoEncodingQuality.HD1080p;
                                break;

                            case "HD720p":
                                VideoQuality = VideoEncodingQuality.HD720p;
                                break;

                            case "WVGA":
                                VideoQuality = VideoEncodingQuality.Wvga;
                                break;

                            case "VGA":
                                VideoQuality = VideoEncodingQuality.Vga;
                                break;

                            case "High":
                                AudioQuality = AudioEncodingQuality.High;
                                break;

                            case "Medium":
                                AudioQuality = AudioEncodingQuality.Medium;
                                break;

                            case "Low":
                                AudioQuality = AudioEncodingQuality.Low;
                                break;
                            }

                            switch (Para.Item3)
                            {
                            case "MKV":
                                Profile = MediaEncodingProfile.CreateHevc(VideoQuality);
                                break;

                            case "MP4":
                                Profile = MediaEncodingProfile.CreateMp4(VideoQuality);
                                break;

                            case "WMV":
                                Profile = MediaEncodingProfile.CreateWmv(VideoQuality);
                                break;

                            case "AVI":
                                Profile = MediaEncodingProfile.CreateAvi(VideoQuality);
                                break;

                            case "MP3":
                                Profile = MediaEncodingProfile.CreateMp3(AudioQuality);
                                break;

                            case "ALAC":
                                Profile = MediaEncodingProfile.CreateAlac(AudioQuality);
                                break;

                            case "WMA":
                                Profile = MediaEncodingProfile.CreateWma(AudioQuality);
                                break;

                            case "M4A":
                                Profile = MediaEncodingProfile.CreateM4a(AudioQuality);
                                break;
                            }

                            PrepareTranscodeResult Result = Transcoder.PrepareFileTranscodeAsync(Para.Item1, Para.Item2, Profile).AsTask().Result;

                            if (Result.CanTranscode)
                            {
                                SendUpdatableToastWithProgressForTranscode(Para.Item1, Para.Item2);
                                Progress <double> TranscodeProgress = new Progress <double>((CurrentValue) =>
                                {
                                    try
                                    {
                                        NotificationData Data = new NotificationData
                                        {
                                            SequenceNumber = 0
                                        };
                                        Data.Values["ProgressValue"] = (Math.Ceiling(CurrentValue) / 100).ToString();
                                        Data.Values["ProgressValueString"] = Convert.ToInt32(CurrentValue) + "%";

                                        ToastNotificationManager.CreateToastNotifier().Update(Data, "TranscodeNotification");
                                    }
                                    catch (Exception ex)
                                    {
                                        LogTracer.Log(ex, "Toast notification could not be sent");
                                    }
                                });

                                Result.TranscodeAsync().AsTask(AVTranscodeCancellation.Token, TranscodeProgress).Wait();

                                CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                                {
                                    ShowTranscodeCompleteNotification(Para.Item1, Para.Item2);
                                }).AsTask().Wait();
                            }
                            else
                            {
                                LogTracer.Log("Transcode format is not supported");
                                Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                            }
                        }
                        catch (AggregateException)
                        {
                            Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                        }
                        catch (Exception ex)
                        {
                            LogTracer.Log(ex, "Transcode failed");
                            Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                        }
                        finally
                        {
                            AVTranscodeCancellation.Dispose();
                            AVTranscodeCancellation = null;

                            IsAnyTransformTaskRunning = false;
                        }
                    }
                }
            }, (SourceFile, DestinationFile, MediaTranscodeEncodingProfile, MediaTranscodeQuality, SpeedUp), TaskCreationOptions.LongRunning));
        }
コード例 #13
0
        /// <summary>
        /// Initializes the <see cref="MediaCapture"/> element.
        /// </summary>
        /// <param name="primaryUse">
        /// The primary use for the camera.
        /// </param>
        /// <param name="videoQuality">
        /// The video quality (for recording only).
        /// </param>
        /// <returns>
        /// The <see cref="MediaCapture"/>.
        /// </returns>
        public async Task<MediaCapture> Initialize(
            CaptureUse primaryUse,
            VideoEncodingQuality videoQuality)
        {
            if (this._mediaCapture != null)
            {
                this.Dispose();
            }

            this.IsCameraAvailable = true;

            var camera = await this.GetCamera(this.ActiveCamera);

            this._mediaCapture = new MediaCapture();

            this._mediaCapture.Failed += this.OnMediaCaptureFailed;

            await
                this._mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = camera.Id });

            this._mediaCapture.VideoDeviceController.PrimaryUse = primaryUse;

            this._imageEncodingProperties = ImageEncodingProperties.CreateJpeg();
            this._videoEncodingProfile = MediaEncodingProfile.CreateMp4(videoQuality);

            this.SetEncodingProperties(primaryUse);

            var rotation = this.GetVideoRotation(DisplayInformation.GetForCurrentView().CurrentOrientation);

            if (primaryUse == CaptureUse.Photo)
            {
                await
                    this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(
                        MediaStreamType.Photo,
                        this._mediaEncodingProperties);

                this.IsFlashAvailable = this.Settings.FlashControl.Supported;
            }
            else if (primaryUse == CaptureUse.Video)
            {
                await
                    this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(
                        MediaStreamType.VideoPreview,
                        this._mediaEncodingProperties);

                await
                    this._mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(
                        MediaStreamType.VideoRecord,
                        this._mediaEncodingProperties);

                this.SetRecordOrientation(rotation);

                this.IsFlashAvailable = this.Settings.TorchControl.Supported;
            }

            this._mediaCapture.SetPreviewRotation(rotation);
            return this._mediaCapture;
        }
コード例 #14
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            VideoEncodingQuality quality = VideoEncodingQuality.Auto;

            this.Log.Trace(() => "OnNavigatedTo Fired");

            await this.InitializeCameraAccess().ConfigureAwait(false);

            if (this.ConfigOptions.VideoCapture.Height < 720)
            {
                // TODO: Check for aspect ratio, this could be wvga.
                quality = VideoEncodingQuality.Vga;
            }
            else if (this.ConfigOptions.VideoCapture.Height >= 720 && this.ConfigOptions.VideoCapture.Height < 1080)
            {
                quality = VideoEncodingQuality.HD720p;
            }
            else
            {
                quality = VideoEncodingQuality.HD1080p;
            }

            var encodingProfile = MediaEncodingProfile.CreateMp4(quality);

            this.Log.Trace(() => $"Created encoding profile for {quality.ToString()}");

            encodingProfile.Video.Bitrate             = this.ConfigOptions.VideoCapture.Bitrate;
            encodingProfile.Video.FrameRate.Numerator = 2;// this.ConfigOptions.VideoCapture.FramesPerSecond;

            // Set this lower for now. Looks like anything lower than 96k isn't supported.
            // Didn't try 44.1k sampling, /shrug.
            //encodingProfile.Audio = AudioEncodingProperties.CreateAac(48000, 1, 96000);

            this.Log.Trace(() => $"Set Video Bitrate and FPS to {this.ConfigOptions.VideoCapture.Bitrate} at {this.ConfigOptions.VideoCapture.FramesPerSecond} fps.");
            this.Log.Debug(() => $"CameraAccess: {(this.CameraAccess == null ? "is null" : "is not null")}");
            this.Log.Debug(() => $"CameraAccess.CameraMediaCapture: {(this.CameraAccess?.CameraMediaCapture == null ? "is null" : "is not null")}");
            this.Log.Debug(() => $"CameraAccess.CameraMediaCapture.VideoDeviceController: {(this.CameraAccess?.CameraMediaCapture?.VideoDeviceController == null ? "is null" : "is not null")}");

            this.CameraAccess.CameraMediaCapture.VideoDeviceController.PrimaryUse = Windows.Media.Devices.CaptureUse.Video;

            var formats  = this.CameraAccess.GetSupportedCaptureFormats();
            var myFormat = formats.FirstOrDefault(f =>
                                                  f.Height == this.ConfigOptions.VideoCapture.Height &&
                                                  f.Width == this.ConfigOptions.VideoCapture.Width &&
                                                  f.Framerate == 5 &&
                                                  f.Subtype == "MJPG"
                                                  );

            this.Log.Trace(() => $"Found {formats.Count()} formats.");
            this.Log.Debug(() => myFormat == null ? "Could not find specified capture properties in formats." : $"Found capture format, {myFormat.Subtype}");

            await this.CameraAccess.SetCaptureFormat(myFormat).ConfigureAwait(false);

            this.CameraAccess.SetEncodingProflie(encodingProfile);

            if (true)
            {
                this.Log.Debug(() => "Starting capture loop...");
                // NOTE: Don't await these.
                this.VideoCaptureLoop().ContinueWith((t) =>
                {
                    if (t.IsCompletedSuccessfully)
                    {
                        this.Log.Debug(() => "Video Loop started.");
                    }

                    if (t.IsFaulted)
                    {
                        this.Log.Error(() => "Exception while starting Video Loop", t.Exception);
                    }
                }).AsAsyncAction().AsTask().ConfigureAwait(false);
            }

            if (true)
            {
                this.Log.Debug(() => "Starting HttpServer...");
                this.StartHttpServer().ContinueWith((t) =>
                {
                    if (t.IsCompletedSuccessfully)
                    {
                        this.Log.Debug(() => "Http Server started.");
                    }

                    if (t.IsFaulted)
                    {
                        this.Log.Error(() => "Exception while starting Http Server.", t.Exception);
                    }
                }).AsAsyncAction().AsTask().ConfigureAwait(false);

                if (true)
                {
                    this.Log.Debug(() => "Starting Video Preview Service...");
                    this.CameraAccess.CameraFrameReader.AcquisitionMode = Windows.Media.Capture.Frames.MediaFrameReaderAcquisitionMode.Realtime;
                    await this.CameraAccess.CameraFrameReader.StartAsync().AsTask().ConfigureAwait(false);
                }
            }
        }
コード例 #15
0
        private async void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            var Deferral = args.GetDeferral();

            if (MergeFile == null)
            {
                EmptyTip.IsOpen = true;
                args.Cancel     = true;
                Deferral.Complete();
                return;
            }

            VideoEncodingQuality Quality = default;

            switch (EncodingQuality.SelectedIndex)
            {
            case 0:
            {
                Quality = VideoEncodingQuality.Uhd2160p;
                break;
            }

            case 1:
            {
                Quality = VideoEncodingQuality.HD1080p;
                break;
            }

            case 2:
            {
                Quality = VideoEncodingQuality.HD720p;
                break;
            }

            case 3:
            {
                Quality = VideoEncodingQuality.Wvga;
                break;
            }
            }
            switch (EncodingProfile.SelectedIndex)
            {
            case 0:
            {
                MediaEncoding  = MediaEncodingProfile.CreateMp4(Quality);
                ExportFileType = ".mp4";
                break;
            }

            case 1:
            {
                MediaEncoding  = MediaEncodingProfile.CreateWmv(Quality);
                ExportFileType = ".wmv";
                break;
            }

            case 2:
            {
                MediaEncoding  = MediaEncodingProfile.CreateHevc(Quality);
                ExportFileType = ".mkv";
                break;
            }
            }

            MediaClip SourceVideoClip = await MediaClip.CreateFromFileAsync(SourceFile);

            MediaClip MergeVideoClip = await MediaClip.CreateFromFileAsync(MergeFile);

            Composition = new MediaComposition();
            Composition.Clips.Add(SourceVideoClip);
            Composition.Clips.Add(MergeVideoClip);

            Deferral.Complete();
        }
コード例 #16
0
        private async Task TranscodeMediaAsync()
        {
            MediaVideoProcessingAlgorithm Algorithm = default;

            if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeAlgorithm"] is string TranscodeAlgorithm)
            {
                if (TranscodeAlgorithm == "MrfCrf444")
                {
                    Algorithm = MediaVideoProcessingAlgorithm.MrfCrf444;
                }
                else if (TranscodeAlgorithm == "Default")
                {
                    Algorithm = MediaVideoProcessingAlgorithm.Default;
                }

                MediaTranscoder Transcoder = new MediaTranscoder
                {
                    HardwareAccelerationEnabled = true,
                    VideoProcessingAlgorithm    = Algorithm
                };

                if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeInputFileToken"] is string InputFileToken &&
                    ApplicationData.Current.LocalSettings.Values["MediaTranscodeOutputFileToken"] is string OutputFileToken)
                {
                    try
                    {
                        var FutureItemAccessList = StorageApplicationPermissions.FutureAccessList;

                        InputFile = await FutureItemAccessList.GetFileAsync(InputFileToken);

                        OutputFile = await FutureItemAccessList.GetFileAsync(OutputFileToken);

                        if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeEncodingProfile"] is string EncodingKind &&
                            ApplicationData.Current.LocalSettings.Values["MediaTranscodeQuality"] is string Quality)
                        {
                            MediaEncodingProfile Profile      = null;
                            VideoEncodingQuality VideoQuality = default;
                            AudioEncodingQuality AudioQuality = default;

                            switch (Quality)
                            {
                            case "UHD2160p":
                                VideoQuality = VideoEncodingQuality.Uhd2160p;
                                break;

                            case "QVGA":
                                VideoQuality = VideoEncodingQuality.Qvga;
                                break;

                            case "HD1080p":
                                VideoQuality = VideoEncodingQuality.HD1080p;
                                break;

                            case "HD720p":
                                VideoQuality = VideoEncodingQuality.HD720p;
                                break;

                            case "WVGA":
                                VideoQuality = VideoEncodingQuality.Wvga;
                                break;

                            case "VGA":
                                VideoQuality = VideoEncodingQuality.Vga;
                                break;

                            case "High":
                                AudioQuality = AudioEncodingQuality.High;
                                break;

                            case "Medium":
                                AudioQuality = AudioEncodingQuality.Medium;
                                break;

                            case "Low":
                                AudioQuality = AudioEncodingQuality.Low;
                                break;
                            }

                            switch (EncodingKind)
                            {
                            case "MKV":
                                Profile = MediaEncodingProfile.CreateHevc(VideoQuality);
                                break;

                            case "MP4":
                                Profile = MediaEncodingProfile.CreateMp4(VideoQuality);
                                break;

                            case "WMV":
                                Profile = MediaEncodingProfile.CreateWmv(VideoQuality);
                                break;

                            case "AVI":
                                Profile = MediaEncodingProfile.CreateAvi(VideoQuality);
                                break;

                            case "MP3":
                                Profile = MediaEncodingProfile.CreateMp3(AudioQuality);
                                break;

                            case "ALAC":
                                Profile = MediaEncodingProfile.CreateAlac(AudioQuality);
                                break;

                            case "WMA":
                                Profile = MediaEncodingProfile.CreateWma(AudioQuality);
                                break;

                            case "M4A":
                                Profile = MediaEncodingProfile.CreateM4a(AudioQuality);
                                break;
                            }

                            PrepareTranscodeResult Result = await Transcoder.PrepareFileTranscodeAsync(InputFile, OutputFile, Profile);

                            if (Result.CanTranscode)
                            {
                                SendUpdatableToastWithProgress();
                                Progress <double> TranscodeProgress = new Progress <double>(ProgressHandler);
                                await Result.TranscodeAsync().AsTask(Cancellation.Token, TranscodeProgress);

                                ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Success";
                            }
                            else
                            {
                                ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "转码格式不支持";
                                await OutputFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
                            }
                        }
                        else
                        {
                            ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "SettingError: Miss MediaTranscodeEncodingProfile Or MediaTranscodeQuality";
                            await OutputFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
                        }
                    }
コード例 #17
0
        /// <summary>
        /// Swaps between the current active camera and the secondary.
        /// </summary>
        /// <param name="primaryUse">
        /// The primary use for the camera.
        /// </param>
        /// <param name="videoQuality">
        /// The video quality (for recording only).
        /// </param>
        /// <returns>
        /// The <see cref="MediaCapture"/>.
        /// </returns>
        public async Task<MediaCapture> ChangeCamera(
            CaptureUse primaryUse,
            VideoEncodingQuality videoQuality)
        {
            switch (this.ActiveCamera)
            {
                case Panel.Front:
                    this.ActiveCamera = Panel.Back;
                    return await this.Initialize(primaryUse, videoQuality);
                case Panel.Back:
                    this.ActiveCamera = Panel.Front;
                    return await this.Initialize(primaryUse, videoQuality);
            }

            return null;
        }
コード例 #18
0
        private async void QueueContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            var Deferral = args.GetDeferral();

            if (UseSameProfile.IsChecked.GetValueOrDefault())
            {
                MediaEncoding = await MediaEncodingProfile.CreateFromFileAsync(VideoFile);

                TrimmingPreference = MediaTrimmingPreference.Precise;
                ExportFileType     = VideoFile.FileType;
            }
            else
            {
                VideoEncodingQuality Quality = default;
                switch (EncodingQuality.SelectedIndex)
                {
                case 0:
                {
                    Quality = VideoEncodingQuality.Uhd2160p;
                    break;
                }

                case 1:
                {
                    Quality = VideoEncodingQuality.HD1080p;
                    break;
                }

                case 2:
                {
                    Quality = VideoEncodingQuality.HD720p;
                    break;
                }

                case 3:
                {
                    Quality = VideoEncodingQuality.Wvga;
                    break;
                }
                }
                switch (EncodingProfile.SelectedIndex)
                {
                case 0:
                {
                    MediaEncoding  = MediaEncodingProfile.CreateMp4(Quality);
                    ExportFileType = ".mp4";
                    break;
                }

                case 1:
                {
                    MediaEncoding  = MediaEncodingProfile.CreateWmv(Quality);
                    ExportFileType = ".wmv";
                    break;
                }

                case 2:
                {
                    MediaEncoding  = MediaEncodingProfile.CreateHevc(Quality);
                    ExportFileType = ".mkv";
                    break;
                }
                }

                if (TrimmingProfile.SelectedIndex == 0)
                {
                    TrimmingPreference = MediaTrimmingPreference.Precise;
                }
                else
                {
                    TrimmingPreference = MediaTrimmingPreference.Fast;
                }
            }

            PreviewSource?.Dispose();
            MediaPlay.Source = null;

            Deferral.Complete();
        }
コード例 #19
0
ファイル: MainPage.xaml.cs プロジェクト: ksdmahesh/MyProjects
        private async Task OnSave(CancellationToken cancellationToken)
        {
            FileSavePicker fileSavePicker = new FileSavePicker();

            fileSavePicker.FileTypeChoices.Add("Auto", new List <string>()
            {
                ".mp4"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_HD1080p", new List <string>()
            {
                ".avi_HD1080p"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_HD720p", new List <string>()
            {
                ".avi_HD720p"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Ntsc", new List <string>()
            {
                ".avi_Ntsc"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Pal", new List <string>()
            {
                ".avi_Pal"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Qvga", new List <string>()
            {
                ".avi_Qvga"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Vga", new List <string>()
            {
                ".avi_Vga"
            });
            fileSavePicker.FileTypeChoices.Add("Avi_Wvga", new List <string>()
            {
                ".avi_Wvga"
            });
            fileSavePicker.FileTypeChoices.Add("M4a_High", new List <string>()
            {
                ".m4a_High"
            });
            fileSavePicker.FileTypeChoices.Add("M4a_Low", new List <string>()
            {
                ".m4a_Low"
            });
            fileSavePicker.FileTypeChoices.Add("M4a_Medium", new List <string>()
            {
                ".m4a_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Mp3_High", new List <string>()
            {
                ".mp3_High"
            });
            fileSavePicker.FileTypeChoices.Add("Mp3_Low", new List <string>()
            {
                ".mp3_Low"
            });
            fileSavePicker.FileTypeChoices.Add("Mp3_Medium", new List <string>()
            {
                ".mp3_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_HD1080p", new List <string>()
            {
                ".mp4_HD1080p"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_HD720p", new List <string>()
            {
                ".mp4_HD720p"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Ntsc", new List <string>()
            {
                ".mp4_Ntsc"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Pal", new List <string>()
            {
                ".mp4_Pal"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Qvga", new List <string>()
            {
                ".mp4_Qvga"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Vga", new List <string>()
            {
                ".mp4_Vga"
            });
            fileSavePicker.FileTypeChoices.Add("Mp4_Wvga", new List <string>()
            {
                ".mp4_Wvga"
            });
            fileSavePicker.FileTypeChoices.Add("Wav_High", new List <string>()
            {
                ".wav_High"
            });
            fileSavePicker.FileTypeChoices.Add("Wav_Low", new List <string>()
            {
                ".wav_Low"
            });
            fileSavePicker.FileTypeChoices.Add("Wav_Medium", new List <string>()
            {
                ".wav_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Wma_High", new List <string>()
            {
                ".wma_High"
            });
            fileSavePicker.FileTypeChoices.Add("Wma_Low", new List <string>()
            {
                ".wma_Low"
            });
            fileSavePicker.FileTypeChoices.Add("Wma_Medium", new List <string>()
            {
                ".wma_Medium"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_HD1080p", new List <string>()
            {
                ".wmv_HD1080p"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_HD720p", new List <string>()
            {
                ".wmv_HD720p"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Ntsc", new List <string>()
            {
                ".wmv_Ntsc"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Pal", new List <string>()
            {
                ".wmv_Pal"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Qvga", new List <string>()
            {
                ".wmv_Qvga"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Vga", new List <string>()
            {
                ".wmv_Vga"
            });
            fileSavePicker.FileTypeChoices.Add("Wmv_Wvga", new List <string>()
            {
                ".wmv_Wvga"
            });

            fileSavePicker.SuggestedFileName = FileName ?? "output";

            StorageFile outputFile = await fileSavePicker.PickSaveFileAsync();

            if (outputFile == null)
            {
                throw new Exception();
            }

            ResetStages(solidColorBrush, 100, "100% done.");

            Save.Content = "Cancel";

            StorageFile temporaryFile = await GetFile("Video", "temp (1).mp4", cancellationToken);

            if (temporaryFile == null)
            {
                return;
            }

            MediaEncodingProfile mediaEncodingProfile = null;

            string fileType = outputFile.FileType.Replace(".", "");

            if (fileType.ToLower() == "mp4")
            {
                using (Stream stream = await temporaryFile.OpenStreamForReadAsync())
                {
                    buffer = new byte[stream.Length];
                    CancelTask(cancellationToken);
                    stream.Read(buffer, 0, buffer.Length);
                    ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 45);
                    using (Stream writeStream = await outputFile.OpenStreamForWriteAsync())
                    {
                        CancelTask(cancellationToken);
                        writeStream.Write(buffer, 0, buffer.Length);
                    };
                    ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 90);
                };
                ReportProgress(Stage7, Stage6ProgressBar, TextProgress6, 100);
                Save.Content = "Convert/Save";
                return;
            }
            else
            {
                try
                {
                    await outputFile.RenameAsync(outputFile.DisplayName + "." + fileType.Split('_')[0], NameCollisionOption.GenerateUniqueName);
                }
                catch (Exception ex)
                {
                    await MessageBox(ex.Message);
                }
            }

            CancelTask(cancellationToken);

            MediaFileType mediaFileType = default(MediaFileType);

            VideoEncodingQuality videoEncodingQuality = default(VideoEncodingQuality);

            AudioEncodingQuality audioEncodingQuality = default(AudioEncodingQuality);

            Enum.TryParse <MediaFileType>(fileType.Split('_')[0], true, out mediaFileType);

            Enum.TryParse <VideoEncodingQuality>(fileType.Split('_')[1], true, out videoEncodingQuality);

            Enum.TryParse <AudioEncodingQuality>(fileType.Split('_')[1], true, out audioEncodingQuality);

            switch (mediaFileType)
            {
            case MediaFileType.avi:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateAvi(videoEncodingQuality);
                break;
            }

            case MediaFileType.m4a:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateM4a(audioEncodingQuality);
                break;
            }

            case MediaFileType.mp3:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateMp3(audioEncodingQuality);
                break;
            }

            case MediaFileType.mp4:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateMp4(videoEncodingQuality);
                break;
            }

            case MediaFileType.wav:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateWav(audioEncodingQuality);
                break;
            }

            case MediaFileType.wma:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateWma(audioEncodingQuality);
                break;
            }

            case MediaFileType.wmv:
            {
                mediaEncodingProfile = MediaEncodingProfile.CreateWmv(videoEncodingQuality);
                break;
            }
            }

            CancelTask(cancellationToken);

            await SetTranscoder(temporaryFile, outputFile, mediaEncodingProfile, cancellationToken);
        }
コード例 #20
0
        /// <summary>
        /// 提供音视频转码
        /// </summary>
        /// <param name="SourceFile">源文件</param>
        /// <param name="DestinationFile">目标文件</param>
        /// <param name="MediaTranscodeEncodingProfile">转码编码</param>
        /// <param name="MediaTranscodeQuality">转码质量</param>
        /// <param name="SpeedUp">是否启用硬件加速</param>
        /// <returns></returns>
        public static Task TranscodeFromAudioOrVideoAsync(StorageFile SourceFile, StorageFile DestinationFile, string MediaTranscodeEncodingProfile, string MediaTranscodeQuality, bool SpeedUp)
        {
            return Task.Factory.StartNew((ob) =>
            {
                IsAnyTransformTaskRunning = true;

                AVTranscodeCancellation = new CancellationTokenSource();

                var Para = (ValueTuple<StorageFile, StorageFile, string, string, bool>)ob;

                MediaTranscoder Transcoder = new MediaTranscoder
                {
                    HardwareAccelerationEnabled = true,
                    VideoProcessingAlgorithm = Para.Item5 ? MediaVideoProcessingAlgorithm.Default : MediaVideoProcessingAlgorithm.MrfCrf444
                };

                try
                {
                    MediaEncodingProfile Profile = null;
                    VideoEncodingQuality VideoQuality = default;
                    AudioEncodingQuality AudioQuality = default;

                    switch (Para.Item4)
                    {
                        case "UHD2160p":
                            VideoQuality = VideoEncodingQuality.Uhd2160p;
                            break;
                        case "QVGA":
                            VideoQuality = VideoEncodingQuality.Qvga;
                            break;
                        case "HD1080p":
                            VideoQuality = VideoEncodingQuality.HD1080p;
                            break;
                        case "HD720p":
                            VideoQuality = VideoEncodingQuality.HD720p;
                            break;
                        case "WVGA":
                            VideoQuality = VideoEncodingQuality.Wvga;
                            break;
                        case "VGA":
                            VideoQuality = VideoEncodingQuality.Vga;
                            break;
                        case "High":
                            AudioQuality = AudioEncodingQuality.High;
                            break;
                        case "Medium":
                            AudioQuality = AudioEncodingQuality.Medium;
                            break;
                        case "Low":
                            AudioQuality = AudioEncodingQuality.Low;
                            break;
                    }

                    switch (Para.Item3)
                    {
                        case "MKV":
                            Profile = MediaEncodingProfile.CreateHevc(VideoQuality);
                            break;
                        case "MP4":
                            Profile = MediaEncodingProfile.CreateMp4(VideoQuality);
                            break;
                        case "WMV":
                            Profile = MediaEncodingProfile.CreateWmv(VideoQuality);
                            break;
                        case "AVI":
                            Profile = MediaEncodingProfile.CreateAvi(VideoQuality);
                            break;
                        case "MP3":
                            Profile = MediaEncodingProfile.CreateMp3(AudioQuality);
                            break;
                        case "ALAC":
                            Profile = MediaEncodingProfile.CreateAlac(AudioQuality);
                            break;
                        case "WMA":
                            Profile = MediaEncodingProfile.CreateWma(AudioQuality);
                            break;
                        case "M4A":
                            Profile = MediaEncodingProfile.CreateM4a(AudioQuality);
                            break;
                    }

                    PrepareTranscodeResult Result = Transcoder.PrepareFileTranscodeAsync(Para.Item1, Para.Item2, Profile).AsTask().Result;
                    if (Result.CanTranscode)
                    {
                        SendUpdatableToastWithProgressForTranscode(Para.Item1, Para.Item2);
                        Progress<double> TranscodeProgress = new Progress<double>((CurrentValue) =>
                        {
                            NotificationData Data = new NotificationData();
                            Data.SequenceNumber = 0;
                            Data.Values["ProgressValue"] = (Math.Ceiling(CurrentValue) / 100).ToString();
                            Data.Values["ProgressValueString"] = Convert.ToInt32(CurrentValue) + "%";

                            ToastNotificationManager.CreateToastNotifier().Update(Data, "TranscodeNotification");
                        });

                        Result.TranscodeAsync().AsTask(AVTranscodeCancellation.Token, TranscodeProgress).Wait();

                        ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Success";
                    }
                    else
                    {
                        ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "NotSupport";
                        Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                    }
                }
                catch (AggregateException)
                {
                    ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = "Cancel";
                    Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                }
                catch (Exception e)
                {
                    ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] = e.Message;
                    Para.Item2.DeleteAsync(StorageDeleteOption.PermanentDelete).AsTask().Wait();
                }
            }, (SourceFile, DestinationFile, MediaTranscodeEncodingProfile, MediaTranscodeQuality, SpeedUp), CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Current).ContinueWith((task, ob) =>
               {
                   AVTranscodeCancellation.Dispose();
                   AVTranscodeCancellation = null;

                   var Para = (ValueTuple<StorageFile, StorageFile>)ob;

                   if (ApplicationData.Current.LocalSettings.Values["MediaTranscodeStatus"] is string ExcuteStatus)
                   {
                       CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                       {
                           switch (ExcuteStatus)
                           {
                               case "Success":
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Success"), 5000);
                                   ShowTranscodeCompleteNotification(Para.Item1, Para.Item2);
                                   break;
                               case "Cancel":
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Cancel"), 5000);
                                   ShowTranscodeCancelNotification();
                                   break;
                               case "NotSupport":
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_NotSupport"), 5000);
                                   break;
                               default:
                                   TabViewContainer.ThisPage.Notification.Show(Globalization.GetString("GeneralTransformer_Transcode_Failure") + ExcuteStatus, 5000);
                                   break;
                           }
                       }).AsTask().Wait();
                   }

                   IsAnyTransformTaskRunning = false;

               }, (SourceFile, DestinationFile), TaskScheduler.Current);
        }
コード例 #21
0
        private void GetPresetProfile(ComboBox combobox)
        {
            _Profile = null;
            VideoEncodingQuality videoEncodingProfile = VideoEncodingQuality.Wvga;

            switch (combobox.SelectedIndex)
            {
            case 0:
                videoEncodingProfile = VideoEncodingQuality.HD1080p;
                break;

            case 1:
                videoEncodingProfile = VideoEncodingQuality.HD720p;
                break;

            case 2:
                videoEncodingProfile = VideoEncodingQuality.Wvga;
                break;

            case 3:
                videoEncodingProfile = VideoEncodingQuality.Ntsc;
                break;

            case 4:
                videoEncodingProfile = VideoEncodingQuality.Pal;
                break;

            case 5:
                videoEncodingProfile = VideoEncodingQuality.Vga;
                break;

            case 6:
                videoEncodingProfile = VideoEncodingQuality.Qvga;
                break;
            }

            //根据画质选择格式
            switch (_OutputType)
            {
            case "AVI":
                _Profile = MediaEncodingProfile.CreateAvi(videoEncodingProfile);
                break;

            case "WMV":
                _Profile = MediaEncodingProfile.CreateWmv(videoEncodingProfile);
                break;

            default:
                _Profile = MediaEncodingProfile.CreateMp4(videoEncodingProfile);
                break;
            }

            /*
             * 对于代码转换音频配置文件,创建编码使用这些api的一个概要:
             * MediaEncodingProfile.CreateMp3(audioEncodingProfile)
             * MediaEncodingProfile.CreateM4a(audioEncodingProfile)
             * MediaEncodingProfile.CreateWma(audioEncodingProfile)
             * MediaEncodingProfile.CreateWav(audioEncodingProfile)
             * audioEncodingProfile是其中一个预设:AudioEncodingQuality。
             * AudioEncodingQuality高。
             * 媒介AudioEncodingQuality.Low
             */
        }