2011-08-21 38 views
9

He escrito un servicio WCF que transmite archivos multimedia. Ahora estoy escribiendo una aplicación WPF que consume este servicio y acabo de descubrir que MediaElement no acepta los objetos Stream como parámetros de entrada para la propiedad de origen.Reproducción de video en WPF

He estado buscando en Google sin parar durante los últimos dos días y he analizado varias alternativas, incluidas las Vistas de Silverlight dentro de WPF, los controles VLC ActiveX, VideoRendererElement y WPFMediaKit. Desafortunadamente, me ha obstaculizado la falta de documentación y/o ejemplos y hasta ahora no he progresado. El hecho de que esta sea la primera vez que uso WPF tampoco ayuda.

En pocas palabras, lo que estoy buscando es algo que viene con documentación o ejemplos que demuestran la transmisión en WPF y, si es posible, también es sencillo de implementar. La solución no tiene que ser perfecta; todo lo que necesito es algo que funcione.

Respuesta

5

Puede alojar un HttpListener dentro de su aplicación WPF y suministrar el flujo que recibe de su servicio WCF a través de una URL que se sirve por HttpListener a MediaElement.Source.

Otras opciones (aunque parece que ha gobernado a cabo):

No estoy seguro si esto es una opción para usted, pero hay bibliotecas comerciales para multimedia, incluida la reproducción de video de transmisiones en WPF:

+0

El servicio WCF utiliza enlaces de TCP, y se ejecuta fuera de un IIS como un servicio administrado de Windows. ¿Podría usar TcpListener en lugar de HttpListener para obtener de algún modo la URL de la transmisión entrante? – rafale

+0

Supongo que su servicio WCF devuelve a IStream - SI esta suposición es verdadera, entonces usted simplemente usaría la clase de proxy WCF para obtener el flujo y luego suministrar ese flujo a las bibliotecas que mencioné y o "retransmitirlo" a una URL http dentro de su aplicación con HttpListener y dígale a MediaElement que use esa URL http ... Recomiendo usar una de las bibliotecas ... – Yahia

+0

Nunca antes había usado la clase HttpListener, así que no entiendo cómo transmitir una secuencia a una URL HTTP. ¿Es esto lo que quieres decir? http://pastebin.com/iELVyybp – rafale

0

No es una forma de lograr esto usando un pseudofiles, es decir, la emulación de las llamadas al sistema de archivos.

Cuando se pasa una ruta, un reproductor multimedia primero abre el archivo (se llama a CreateFile), luego lee datos de él (se llama a ReadFile), mueve la posición dentro del archivo (se llama a SetFilePointer).

Simplemente se mueve dentro del archivo de video y lee los bloques necesarios.

Por ejemplo aquí descrito este enfoque (archivo de llamadas simplemente asigna a los métodos apropiados IStream: ReadFile -> Leer, SetFilePointer -> Seek, CreateFile -> Clonar etc.): http://boxedapp.com/encrypted_video_streaming.html

Cuestiones relacionadas