我正在尝试使用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;