Ce code fonctionne dans une application Windows Forms (il affiche l'aperçu) mais pas dans une application WPF.Comment prévisualiser une session Windows Media Encoder dans WPF?
WMEncoder _encoder;
WMEncDataView _preview;
_encoder = new WMEncoder();
IWMEncSourceGroupCollection SrcGrpColl = _encoder.SourceGroupCollection;
IWMEncSourceGroup2 sourceGroup = (IWMEncSourceGroup2)SrcGrpColl.Add("SG_1");
IWMEncVideoSource2 videoDevice = (IWMEncVideoSource2)sourceGroup.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
videoDevice.SetInput("Default_Video_Device", "Device", "");
IWMEncAudioSource audioDevice = (IWMEncAudioSource)sourceGroup.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
audioDevice.SetInput("Default_Audio_Device", "Device", "");
IWMEncProfile2 profile = new WMEncProfile2();
profile.LoadFromFile("Recording.prx");
sourceGroup.set_Profile(profile);
_encoder.PrepareToEncode(true);
_preview = new WMEncDataView();
int lpreviewStream = videoDevice.PreviewCollection.Add(_preview);
_encoder.Start();
_preview.SetViewProperties(lpreviewStream, (int)windowsFormsHost1.Handle);
_preview.StartView(lpreviewStream);
J'ai essayé d'utiliser le contrôle WindowsFormsHost pour obtenir une poignée de passer (comme indiqué dans l'échantillon), mais toujours pas de chance.
Cela fonctionne très bien! Impossible d'accéder à la variable _preview à partir du contrôle. Connaissez-vous un moyen de permettre de redimensionner l'aperçu lorsque le contrôle change de taille? – loraderon
C'est exactement la raison pour laquelle mon exemple réinitialise le handle chaque fois que la position ou la taille de la fenêtre change, ce qui provoque la réinitialisation du rendu de DirectShow. Que se passe-t-il si vous appelez successivement StopView et StartView lorsque vous répondez au dimensionnement du contrôle? –
Cela ne fonctionne pas même lorsque vous appelez StopView, SetViewProperties et StartView dans OnWindowPositionChanged ou un bouton séparé. Je dois démarrer/arrêter l'encodage (peut-être des problèmes avec l'encodeur Windows Media) – loraderon