2016-04-11 5 views
0

Ich versuche VideoTransformEffectDefinition zu verwenden.VideoTransformEffectDefinition endet mit Fehler: Video konnte nicht decodiert werden

 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 

Das wird werfen Ausnahme nicht, aber es mir

"Error: Video could not be decoded"

auf Medienelement zeigen.

Es ist seltsam, weil Code funktioniert gut mit 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 

Was mache ich falsch?

Antwort

1

Die VideoTransformEffectDefinition funktioniert nur mit MediaTranscoder. Es hat keine Wirkung über MediaComposition. Und es wird eine NullReferenceException ausgelöst, wenn Sie die MediaElement von MediaElement.SetMediaStreamSource(MediaComposition .GenerateMediaStreamSource()) festlegen.

Es gibt eine offizielle Probe von GitHub, die die MediaTranscoder verwendet. Und in Szenario1 erstellt es die MediaTranscoder von private MediaTranscoder _Transcoder = new MediaTranscoder(); Sie können die VideoTransformEffectDefinition zu MediaTranscoder von AddAudioEffect(System.String activatableClassId, System.Boolean effectRequired, IPropertySet configuration) hinzufügen.

Sie können den folgenden Code zum Ereignis TranscodePreset in Scenario1_Default.xaml.cs hinzufügen.

Zum Beispiel:

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

Also .. es bedeutet, dass es nicht möglich ist (zum Beispiel) padding Farbe in Echtzeit hinzufügen? Offizielles Beispiel ist immer mit Speichern in Speicherdatei. – Alamakanambra

+0

Es scheint, es ist, finde ich nicht die Methode in Echtzeit zu spielen. –

Verwandte Themen