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

我做错了什么?

VideoTransformEffectDefinition仅适用于MediaTranscoder。它对MediaComposition没有影响。当您通过MediaElement.SetMediaStreamSource(MediaComposition .GenerateMediaStreamSource())设置MediaElement时,它会抛出一个NullReferenceException。

GitHub中有一个使用MediaTranscoder的官方示例。在Scenario1中,它通过private MediaTranscoder _Transcoder = new MediaTranscoder();创建MediaTranscoder。您可以通过AddAudioEffect(System.String activatableClassId, System.Boolean effectRequired, IPropertySet configuration)VideoTransformEffectDefinition添加到MediaTranscoder

您可以在Scenario1_Default.xaml.cs.中将以下代码添加到TranscodePreset事件中

例如:

VideoTransformEffectDefinition videoEffect = new VideoTransformEffectDefinition();
_Transcoder.ClearEffects();
var activatableClassId = videoEffect.ActivatableClassId;
_Transcoder.AddVideoEffect(activatableClassId, true, videoEffect.Properties);
videoEffect.PaddingColor = Colors.Blue;
videoEffect.Rotation = MediaRotation.Clockwise90Degrees;

最新更新