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;
Другие вопросы по тегам