2011-08-19 27 views

Respuesta

6

si se puede hacer la WCF entregar el objeto de multimedia a través de una http-URL (GET) a continuación, puedes asignar esa URL a la propiedad MediaElement.Source - ver http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.source.aspx.

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

Asignación de un Stream no es posible en la actualidad - aunque hay algunos trucos para que esto suceda, para un ejemplo basado en DirectShow ver 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 la de alguna manera el anfitrión de la Silverlight MediaElement y utilizar el método SetSource que puede tomar una corriente y reproducirlo ... ver http://silverlightviewport.codeplex.com/SourceControl/list/changesets y http://msdn.microsoft.com/en-us/library/cc190669%28v=vs.95%29.aspx

4

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

Editar: this page has an example of how to host an ActiveX control inside WPF

+2

¿Puedo ver un ejemplo de una aplicación WPF ejecutando VLC como un componente ActiveX? Me gustaría ver qué aspecto tiene y qué implica ponerlo en funcionamiento antes de que realmente lo haga. – rafale

+0

Hola Stuart, podrías publicar tu ejemplo usando VLC en alguna parte para que pueda echar un vistazo. Gracias. –

12

Antes de que nadie desperdicia horas para encontrar este por sí mismos: es imposible para acoger el Silverlight MediaElement en una aplicación de 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!)

+1

Esto es cierto. Lamentablemente tuve que descubrirlo de la manera difícil. :( – rafale

+4

Sé que esta es una respuesta de un año, pero no son "múltiples tipos distintos con el mismo nombre en el mismo espacio de nombres" ¿por qué existen alias de referencia? –

+1

Siempre es posible hacer el sitio web Silverlight y usar MediaElement allí y en la aplicación WPF agrego el control WebBrowser con la fuente al sitio web de Silverlight y está hecho. –

12

Podría ser demasiado tarde, con suerte esto podría ayudar si aún está buscando una respuesta.

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

He utilizado un tercer componente parte llamada aplicación en caja, Un millón de gracias a BoxedApp - http://www.boxedapp.com/boxedappsdk/

tengo que actualizar el código un poco pequeña para hacer que funcione para byte []. Copiar el constructor de abajo a la clase CustomFileStream de BoxedApp

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

Crear una aplicación de WPF y añadir un elemento de comunicación y un botón y copia el código de abajo

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 por favor, siga las muestras y eso es es ... estás en un mundo feliz ...

Pasa lo mismo con QT Player.

Según la respuesta, agregaré un ejemplo completo si la información proporcionada no es suficiente.

feliz de codificación ....

+0

¡Gran respuesta, muchas gracias! – Mafii

0

Como WPF MediaElement utiliza internamente 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 utilizar clase de registro dotnet para hacer cambios. Referir 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

Cuestiones relacionadas