Usando MediaElement para reproducir video de Stream

¿Es posible utilizar WPF MediaElement para reproducir video desde un objeto System.IO.Stream? El objeto Stream se está recuperando de un servicio WCF que almacena los archivos multimedia.

SI puede hacer que WCF entregue el objeto multimedia a través de una http-URL (GET) , puede asignar esa URL a la propiedad MediaElement.Source ; consulte http://msdn.microsoft.com/en-us/library/system. .windows.controls.mediaelement.source.aspx .

Para los casos en que dicha URL no está disponible / posible:

Actualmente, no es posible asignar un flujo. Aunque hay algunos hacks para que esto suceda, para un ejemplo basado en DirectShow, consulte http://social.msdn.microsoft.com/forums/en-US/wpf/thread/6191ef1a-0010. -4294-a5b4-451bbadca33a / y http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/15/WPF-Hackery-Part-I.aspx .

Otra opción sería alojar Silverlight MediaElement SetSource algún modo y usar el método SetSource , que puede tomar una secuencia y reproducirla … consulte http://silverlightviewport.codeplex.com/SourceControl/list/changesets y http://msdn.microsoft .com / en-us / library / cc190669% 28v = vs.95% 29.aspx

Puede ser demasiado tarde, con suerte esto podría ayudar si todavía está buscando una respuesta.

Sí, puede reproducir video de la secuencia de la memoria usando el elemento de medios WPF.

He usado un componente de terceros llamado aplicación en caja, Un millón gracias a BoxedApp – http://www.boxedapp.com/boxedappsdk/

Tengo que actualizar el código un poco para que funcione en byte []. Copie el constructor siguiente a la clase CustomFileStream desde BoxedApp

 public CustomFileStream(byte[] data) { _Stream = new MemoryStream(data); _Length = _Stream.Length; _data = data; _Offset = 0; } 

Cree una aplicación wpf y agregue un elemento multimedia y un botón y copie el código siguiente

 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(); } } 

– Para la aplicación en caja, sigue las muestras y listo … estás en un mundo feliz …

Es lo mismo para QT Player también.

En función de la respuesta, agregaré un ejemplo completo si la información proporcionada no es suficiente.

Feliz encoding …

Antes de que alguien pierda horas descubriendo esto por sí mismo: es imposible alojar Silverlight MediaElement en una aplicación WPF. La razón de esto es que es uno de los tipos que aparecen en PresentationFramework.dll (inevitable para WPF) y System.Windows.dll (versiones de Silverlight) que tienen los mismos nombres y los mismos espacios de nombres, pero son de tipos diferentes. (¡Alguien debería explicar por qué tenemos espacios de nombres en Microsoft!)

Sé que esto no es lo que pediste, pero puedes alojar un componente VLC ActiveX dentro de una ventana en WPF y luego usar ese control VLC para conectarte a la transmisión y mostrar la transmisión. Así es como obtuve la transmisión trabajando a través de WPF.

Editar: esta página tiene un ejemplo de cómo alojar un control ActiveX dentro de WPF

Como elemento medio de WPF internamente usa Windows Media Player. Si modifica la configuración del búfer del reproductor de medios de la configuración predeterminada del búfer a la personalización. Abra el reproductor multimedia de Windows  Herramientas  Opciones  Rendimiento.

Cuando elige la opción “Búfer” y establece “Segundos de contenido” en 2. Los siguientes valores de registro se agregarán en el reproductor de medios. HKEY_CURRENT_USER \ Software \ Microsoft \ MediaPlayer \ Preferences UseDefaultBufferTime = 0 CustomBufferTime = 2000

Puede usar la clase de registro dotnet para realizar cambios. Consulte este enlace: 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