È possibile utilizzare WPF MediaElement per riprodurre video in streaming da un oggetto System.IO.Stream? L'oggetto Stream viene recuperato da un servizio WCF che archivia i file multimediali.Utilizzo di MediaElement per riprodurre video da Stream
risposta
SE è possibile impostare WCF per la consegna dell'oggetto multimediale tramite http-URL (GET)
, quindi è sufficiente assegnare tale URL alla proprietà MediaElement.Source
- vedere http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.source.aspx.
Per i casi in cui tale URL non è disponibile/possibile:
Assegnazione di uno Stream non è attualmente possibile - anche se ci sono alcuni hack per realizzare questo obiettivo, per esempio a base di DirectShow vedere http://social.msdn.microsoft.com/forums/en-US/wpf/thread/6191ef1a-0010-4294-a5b4-451bbadca33a/ e http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/15/WPF-Hackery-Part-I.aspx.
Un'altra opzione sarebbe quella di ospitare in qualche modo la Silverlight MediaElement
e utilizzare il metodo SetSource
che può richiedere un ruscello e giocare ... vedi http://silverlightviewport.codeplex.com/SourceControl/list/changesets e http://msdn.microsoft.com/en-us/library/cc190669%28v=vs.95%29.aspx
So che questo non è quello che hai chiesto, ma si può ospitare un componente ActiveX VLC all'interno di una finestra in WPF e quindi utilizzare quel controllo VLC per connettersi allo stream e visualizzare lo stream. Questo è il modo in cui ho ottenuto lo streaming lavorando attraverso WPF.
Edit: this page has an example of how to host an ActiveX control inside WPF
Prima che qualcuno spreca ore trovare questo fuori da sé: non è possibile ospitare il Silverlight MediaElement in un'applicazione WPF. La ragione di ciò è che si tratta di un numero di tipi visualizzati in PresentationFramework.dll (inevitabile per WPF) e System.Windows.dll (versioni di Silverlight) che hanno gli stessi nomi e gli stessi spazi dei nomi, ma sono di tipi diversi. (Qualcuno dovrebbe spiegare perché abbiamo namespace su microsoft!)
Questo è vero. Purtroppo ho dovuto scoprirlo nel modo più duro. :( – rafale
So che questa è una risposta di un anno, ma non sono "più tipi distinti con lo stesso nome nello stesso spazio dei nomi" la ragione per cui esistono alias di riferimento? –
È sempre possibile creare un sito Web Silverlight e utilizzare MediaElement lì e in WPF applicatione aggiungere il controllo WebBrowser con il sorgente a quel sito Web di Silverlight ed è fatto. –
Potrebbe essere troppo tardi, si spera che questo possa essere d'aiuto se stai ancora cercando una risposta.
Sì, è possibile riprodurre video da un flusso di memoria utilizzando l'elemento multimediale WPF.
ho usato un componente di terze parti chiamato boxed app, Un milione di grazie a BoxedApp - http://www.boxedapp.com/boxedappsdk/
devo aggiornare il codice un po 'piccolo per farlo funzionare per byte []. Copia il costruttore di seguito per classe CustomFileStream da BoxedApp
public CustomFileStream(byte[] data)
{
_Stream = new MemoryStream(data);
_Length = _Stream.Length;
_data = data;
_Offset = 0;
}
Creare un'applicazione WPF e aggiungere un elemento di supporto e un pulsante e copiare il codice qui sotto
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();
}
}
- per applicazione in scatola si prega di seguire i campioni e questo è è .. sei in un mondo felice ...
È la stessa cosa anche per QT Player.
In base alla risposta, aggiungerò un esempio completo se le informazioni fornite non sono sufficienti. codifica ....
Felice
Ottima risposta, grazie mille! – Mafii
Come WPF MediaElement utilizza internamente windows media player. Se si modificano le impostazioni del buffer del lettore multimediale dall'impostazione del buffer predefinito su personalizzato. Apri Windows Media Player Strumenti Opzioni Prestazioni.
Quando si seleziona l'opzione "Buffer" e si imposta "Seconds of content" su 2. I seguenti valori di registro verranno aggiunti sotto il lettore multimediale. HKEY_CURRENT_USER \ Software \ Microsoft \ MediaPlayer \ Preferences UseDefaultBufferTime = 0 CustomBufferTime = 2000
È possibile utilizzare classe registro dotnet per apportare modifiche. Vedere questo link: https://social.msdn.microsoft.com/Forums/vstudio/en-US/1b4b8fb9-ff8f-4861-8e99-4a7a4fc75596/setting-windows-media-player-properties-in-wpf?forum=wpf#ac879a7f-37bc-4ccc-854d-ab6e047086e5
- 1. MediaElement in WPF riproduce video dallo streaming?
- 2. WPF MediaElement smette di riprodurre se spostato su un'altra schermata
- 3. Come riprodurre video MP4 da Youtube?
- 4. Collegamento ipertestuale per riprodurre video di YouTube
- 5. Riprodurre video utilizzando AVPlayer
- 6. Impossibile riprodurre determinati video
- 7. FFmpeg Live Stream - Loop Video?
- 8. WideVine DRM Stream video di esempio
- 9. Utilizzo di AVPlayer per riprodurre brani protetti da DRM
- 10. WPF MediaElement si interrompe quando si tenta di riprodurre la registrazione di Windows Media Center
- 11. Come forzare YouTube per riprodurre video HD
- 12. Utilizzo dell'API Android di YouTube per riprodurre flussi live
- 13. JWPlayer non può riprodurre video
- 14. HTML: riprodurre un video all'interno di un'immagine
- 15. Impossibile riprodurre video con MPMoviePlayerViewController
- 16. Come posso riprodurre file video?
- 17. Come riprodurre video di YouTube tramite tag video HTML5
- 18. Come riprodurre i video di Youtube in Android Video View?
- 19. Come riprodurre lo streaming audio/video da un URL?
- 20. Mostra il primo frame del video in WPF MediaElement
- 21. Come posso riprodurre video da byte in Android
- 22. Come posso riprodurre in streaming un video da un ServiceWorker?
- 23. Utilizzo di VideoView, come rimuovere il messaggio di avviso "Impossibile riprodurre questo video"?
- 24. Come posso riprodurre video H.264 RTSP nell'app XAML Metro C# di Windows 8?
- 25. Stream video da ffmpeg e acquisizione con OpenCV
- 26. Utilizzo dell'API getUserMedia/Stream con iOS 6
- 27. Stream video Da iPhone o Android a RTMP
- 28. Stream video da BLOB BLU sicuro a WPF
- 29. YouTubeAndroidPlayerAPI non è possibile riprodurre alcuni video
- 30. Silverlight può riprodurre video con trasparenza?
Posso vedere un esempio di un'applicazione WPF che esegue VLC come componente ActiveX? Mi piacerebbe vedere che aspetto ha e cosa è implicato nel farla funzionare prima ancora di farlo. – rafale
Ciao Stuart, potresti pubblicare il tuo esempio usando VLC da qualche parte in modo che io possa dare un'occhiata. Grazie. –