est-il possible d'utiliser le MediaElement WPF pour lire la vidéo en streaming à partir d'un objet System.IO.Stream? L'objet de flux est extrait à partir d'un service WCF qui stocke les fichiers multimédia. P>
5 Réponses :
Si vous pouvez rendre le WCF livrer l'objet multimédia via un Pour les cas où une telle URL n'est pas disponible / possible: P>
L'attribution d'un flux n'est actuellement pas possible - bien qu'il y ait des hacks pour que cela se produise, pour un exemple basé sur DirectShow, voir http://social.msdn.microsoft.com/forums/en-us/wpf/thread/6191ef1A-0010-4294-A5B4-451BBADCA33A/ < / a> et http://jmorrill.hjtcentral.com/ Accueil / Tabid / 428 / Entrée / 15 / WPF-Hackery-Part-i.aspx . P>
Une autre option serait d'accueillir d'une autre hébergement le MediaElement http-url (get) code>, vous pouvez simplement affecter cette URL au MediaElement.Source code> Propriété - voir http://msdn.microsoft.com/en-us/library/ System.windows.controls.MediaElement.source.aspx . P>
Silverlight Code> et d'utiliser la méthode
setsource code> qui peut prendre un flux et la lire ... voir http://silverlightviewport.codeplex.com/sourcecontrol/list/changeSets et HTP://msdn.microsoft.com/en-us/Library/cc190669%28V=VS.95%29.aspx p>
Je sais que ce n'est pas ce que vous avez demandé, mais vous pouvez héberger un composant VLC ActiveX dans une fenêtre dans WPF, puis utiliser ce contrôle VLC pour vous connecter au flux et afficher le flux. Voici comment j'ai eu la diffusion de streaming de travailler via WPF. P>
EDIT: Cette La page a un exemple de comment héberger un contrôle ActiveX à l'intérieur du WPF P>
Puis-je voir un exemple d'application WPF exécutant VLC en tant que composant ActiveX? J'aimerais voir à quoi ça ressemble et ce qui est impliqué dans l'obtention de la course avant que je ne l'emporte réellement.
Bonjour Stuart, pourriez-vous publier votre exemple en utilisant VLC quelque part afin que je puisse jeter un coup d'œil. Merci.
Avant que quiconque gaspille des heures en trouvant cela pour eux-mêmes: il est impossible d'héberger le MediaElement Silverlight dans une application WPF. La raison en est que c'est l'un des types de types qui apparaissent dans PrésentationFramework.dll (inévitable pour WPF) et System.Windows.dll (Versions Silverlight) qui ont les mêmes noms et mêmes espaces de noms, mais sont différents types. (Quelqu'un devrait expliquer pourquoi nous avons des espaces de noms à Microsoft!) P>
C'est vrai. Malheureusement, je devais y trouver de la dure. :(
Je sais que c'est une réponse antérieure d'une année, mais ne sont pas "multiples types distincts avec le même nom dans la même espace de noms", la raison pour laquelle les alias de référence existent-ils?
Il est toujours possible de créer un site Web Silverlight et d'utiliser MediaElement et dans WPF Applicatione Ajouter un contrôle WebBrowser avec source à ce site Web Silverlight et c'est fait.
Oui @damien_the_unbeliever ma pensée au début - mais cela dépend de la façon dont il joue et j'ai vu des situations où des astuces similaires ne sont pas possibles. Je dirais que cela reste «pourrait» être possible, avec un piratage. N'a pas essayé cependant, ressemble à des ennuis
Il pourrait être trop tard, j'espère que cela pourrait aider si vous cherchez toujours une réponse.
Oui, vous pouvez lire une vidéo à partir de la mémoire de la mémoire à l'aide de WPF Media Element. P>
J'ai utilisé un Composante tiers appelée application boxed, Je dois mettre à jour le code un peu un peu pour le faire fonctionner pour l'octet []. Copiez le constructeur ci-dessous en classe CustomFileStream à partir de BoxedApp P> C'est la même chose pour le joueur QT aussi. p> p>public MainWindow()
{
BoxedAppSDK.NativeMethods.BoxedAppSDK_Init();
InitializeComponent();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
var MyFileStream = new CustomFileStream(File.ReadAllBytes(@"wildlife.wmv"));
IntPtr ptr = BoxedAppSDK.NativeMethods.BoxedAppSDK_CreateVirtualFileBasedOnIStream(
@"1.wmv",
BoxedAppSDK.NativeMethods.EFileAccess.GenericWrite,
BoxedAppSDK.NativeMethods.EFileShare.Read,
IntPtr.Zero,
BoxedAppSDK.NativeMethods.ECreationDisposition.New,
BoxedAppSDK.NativeMethods.EFileAttributes.Normal,
IntPtr.Zero,
MyFileStream);
using (new SafeFileHandle(ptr, true))
{
mediaElement1.Source = new Uri(Path.GetFullPath("1.wmv"));
mediaElement1.LoadedBehavior = MediaState.Manual;
mediaElement1.Play();
}
}
En tant que MediaElement WPF utilise à l'interne Windows Media Player. Si vous modifiez les paramètres de mémoire tampon du lecteur multimédia à partir du paramètre tampon par défaut à la douane. Ouvrez Windows Media Player Outils Options Performance. p>
Lorsque vous choisissez une option "tampon" et définissez "Secondes de contenu" sur 2. Les valeurs de registre suivantes seront ajoutées sous le lecteur multimédia. HKEY_CURRENT_USER \ Software \ Microsoft \ Mediafplayer \ Préférences EmployéFaultBufferTime = 0 CustomBufferTime = 2000 P>
Vous pouvez utiliser la classe de registre Dotnet pour apporter des modifications.
Reportez-vous à ce lien: