9
votes

Utilisation de MediaElement pour lire la vidéo du flux

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.


0 commentaires

5 Réponses :


7
votes

Si vous pouvez rendre le WCF livrer l'objet multimédia via un http-url (get) , vous pouvez simplement affecter cette URL au MediaElement.Source Propriété - voir http://msdn.microsoft.com/en-us/library/ System.windows.controls.MediaElement.source.aspx .

Pour les cas où une telle URL n'est pas disponible / possible:

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 .

Une autre option serait d'accueillir d'une autre hébergement le MediaElement Silverlight et d'utiliser la méthode setsource 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


0 commentaires

5
votes

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.

EDIT: Cette La page a un exemple de comment héberger un contrôle ActiveX à l'intérieur du WPF


2 commentaires

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.



15
votes

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!)


4 commentaires

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



14
votes

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, un million grâce à BoxedApp - http://www.boxedapp.com / boxedappsdk / strong> p>

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>

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();
    }
}
  • pour l'application en boîte Veuillez suivre les échantillons et c'est ça. Vous êtes dans un monde heureux ... Li> ul>

    C'est la même chose pour le joueur QT aussi. p> p>


0 commentaires

0
votes

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.

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

Vous pouvez utiliser la classe de registre Dotnet pour apporter des modifications. Reportez-vous à ce lien: https://social.msdn.microsoft.com/forums/vstudio/en-us/1b4b8fb9-ff8f-4861-8E99-4A7A4FC75596/Setting -Windows-media-player-propriétés-in-wpf? forum = WPF # AC879A7F-37BC-4CCCC-854D-AB6E047086E5


0 commentaires