VideoTransformEffectDefinition заканчивается ошибкой: видео не может быть декодировано
Я пытаюсь использовать VideoTransformEffectDefinition.
var clip = await MediaClip.CreateFromFileAsync(pickedFile);//creating clip from storage file
MediaComposition composition = new MediaComposition();
composition.Clips.Add(clip);
VideoTransformEffectDefinition videoEffect1 = new VideoTransformEffectDefinition();
videoEffect1.PaddingColor = Colors.Blue;//this line is not necessary, does not matter how videoEffect is changed
clip.VideoEffectDefinitions.Add(videoEffect1);//adding videoEffect
this.mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());//setting source to MediaElement
Это не собирается бросать исключения, но это покажет мне
"Ошибка: видео не может быть декодировано"
на медиа-элемент.
Это странно, потому что код хорошо работает с VideoStabilizationEffectDefinition:
var clip = await MediaClip.CreateFromFileAsync(pickedFile);//creating clip from storage file
MediaComposition composition = new MediaComposition();
composition.Clips.Add(clip);
VideoStabilizationEffectDefinition videoEffect = new VideoStabilizationEffectDefinition();
clip.VideoEffectDefinitions.Add(videoEffect);//adding videoEffect
this.mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());//setting source to MediaElement
Что я делаю неправильно?
1 ответ
VideoTransformEffectDefinition
работает только с MediaTranscoder
, Это не влияет на MediaComposition
, И это выдает NullReferenceException, когда вы устанавливаете MediaElement
от MediaElement.SetMediaStreamSource(MediaComposition .GenerateMediaStreamSource())
,
Существует официальный образец от GitHub, который использует MediaTranscoder
, И в сценарии 1 он создает MediaTranscoder
от private MediaTranscoder _Transcoder = new MediaTranscoder();
Вы можете добавить VideoTransformEffectDefinition
в MediaTranscoder
от AddAudioEffect(System.String activatableClassId, System.Boolean effectRequired, IPropertySet configuration)
,
Вы можете добавить следующий код TranscodePreset
событие в Scenario1_Default.xaml.cs.
Например:
VideoTransformEffectDefinition videoEffect = new VideoTransformEffectDefinition();
_Transcoder.ClearEffects();
var activatableClassId = videoEffect.ActivatableClassId;
_Transcoder.AddVideoEffect(activatableClassId, true, videoEffect.Properties);
videoEffect.PaddingColor = Colors.Blue;
videoEffect.Rotation = MediaRotation.Clockwise90Degrees;