válido visual sólo studio sonidos sonido reproductor reproducir reproducción por poner onda numero grillo emitidos con compatible boton archivos archivo c# c++ flash audio integration

c# - sólo - reproductor mp3 en visual studio



¿Cómo se lee el flujo de sonido C++(C#) enviado por flash? (5)

Necesito leer el flujo de sonido enviado por audio flash en mi aplicación C ++ (C ++ no es una limitación real, puede ser C # o cualquier otro lenguaje de escritorio). Ahora la aplicación flash envía audio a otra aplicación flash, pero necesito recibir el mismo audio con la aplicación de escritorio. Entonces, ¿hay una forma estándar o mejor de cómo hacerlo?

Gracias por sus respuestas.



¿Cómo se envía realmente el sonido? A través de la red?

Editar : estaría capturando el audio de una transmisión HTTP o una transmisión RTMP. Ejecuta Wireshark para descubrirlo, pero sospecho que estás haciendo algo con poca sombra ...



Desafortunadamente, Adobe es relativamente propietario (de ahí que las guerras entre Apple y Adobe ocurran últimamente), pero para varios idiomas, hay proyectos para ayudar con RTMP.

WebOrb es comercial, para .NET, Java, PHP: http://www.themidnightcoders.com/products.html

FluorineFX es de código abierto solo para .NET: http://www.fluorinefx.com/

No he usado ninguno de los dos para RTMP, pero he usado FluorineFX para conectarme a una puerta de acceso flash remoto (AMF). Me imagino que puede hacer lo que necesita para recibir la transmisión de audio desde un cliente habilitado para .NET.


Obtener los marcos, la velocidad de fotogramas y otros atributos del video clip Si tiene experiencia en la escritura de aplicaciones en Microsoft DirectShow Editing Services (nombre en clave Dexter), esto le sonará muy familiar. En el entorno de Windows, la captura tradicional de fotogramas se ha realizado utilizando C ++ y Dexter Type Library para acceder a los objetos COM de DirectShow. Para hacer esto en .NET Framework, puede hacer un ensamblado de Interop de DexterLib que se encuentra en Referencias COM en VS 2005. Sin embargo, le toma una buena cantidad de trabajo averiguar cómo convertir su código de C ++ a C # .NET. El problema ocurre cuando necesita pasar una referencia de puntero como argumento a una función nativa, CLR no admite punteros directamente ya que la posición de la memoria puede cambiar después de cada ciclo de recolección de basura. Puede encontrar muchos artículos sobre cómo usar DirectShow en CodeProject u otros lugares e intentamos mantenerlo simple. Aquí nuestro objetivo es convertir un archivo de video en una matriz de mapas de bits y traté de mantener esto lo más corto posible; por supuesto, puede escribir su propio código para sacar los mapas de bits de una transmisión en vivo y almacenarlos en un búfer poco antes de enviarlos .

Básicamente tenemos dos opciones para usar DirectShow para convertir nuestro archivo de video a marcos en .NET:

Edite el conjunto de interoperabilidad y cambie las referencias de tipo de puntero a tipos de C # .NET. Utilice punteros con palabra clave insegura. Elegimos el método inseguro (leer rápido). Significa que extraemos nuestros marcos fuera del alcance administrado de .NET. ¡Es importante mencionar que administrar no siempre significa mejor y que no es inseguro significa realmente inseguro!

MediaDetClass mediaClass = new MediaDetClass (); _AMMediaType mediaType; ... // cargar el archivo de video int outputStreams = mediaClass.OutputStreams; outFrameRate = 0.0; for (int i = 0; i <outputStreams; i ++) {mediaClass.CurrentStream = i; try {// Si puede obtener el framerate, es suficiente // aceptamos el archivo de video, de lo contrario arroja una excepción aquí outFrameRate = mediaClass.FrameRate; ....... // obtener los atributos aquí .....

}catch { // Not a valid meddia type? go to the next outputstream }

} // ¿Sin velocidad de cuadros? if (outFrameRate == 0.0) lanza una nueva NotSupportedException ("El programa no puede" + "leer el archivo de video."); // tenemos un framerate? seguir adelante ... ... // Crear una matriz para contener mapas de bits e intilizar // otros objetos para almacenar información ...

inseguro {... // crea un puntero de bytes para almacenar BitmapBits
... while (currentStreamPos <endPosition) {mediaClass.GetBitmapBits (currentStreamPos, ref bufferSize, ref * ptrRefFramesBuffer, outClipSize.Width, outClipSize.Height); ...
// añadir marco de mapa de bits a frameArray ...}} ...

Transfiera datos extraídos a través de HTTP Hasta ahora hemos convertido nuestro video a una matriz de cuadros de mapa de bits. El siguiente paso es transferir nuestros cuadros a través de HTTP hasta el navegador del cliente. Sería bueno si pudiéramos enviar nuestros bits de Bitmap al cliente, pero no podemos. HTTP está diseñado para transportar caracteres de texto, lo que significa que su navegador solo lee caracteres que están definidos en el conjunto de caracteres de la página HTML. Cualquier otra cosa fuera de esta codificación no se puede mostrar directamente.

Para lograr este paso, usamos la codificación Base64 para convertir nuestro mapa de bits en caracteres ASCII. Tradicionalmente, la codificación Base64 se ha utilizado para incrustar objetos en correos electrónicos. Casi todos los navegadores modernos, incluidos los navegadores Gecko, Opera, Safari y KDE (¡no IE!) Admiten datos: estándar de esquema URI para mostrar imágenes codificadas en Base64. ¡Estupendo! Ahora, tenemos nuestros marcos listos para ser transferidos a través de HTTP.

System.IO.MemoryStream memory = new System.IO.MemoryStream (); while (currentStreamPos <endPosition) {... // Guarde los Bitmpas en algún lugar de la memoria (administrada) vdeoBitmaps.Save (memory, System.Drawing.Imaging.ImageFormat.Jpeg); // Convertirlo a Base64 strFrameArray [frameCount] = System.Convert.ToBase64String (memory.ToArray ()); // Prepárate para la próxima memoria. Buscar (0, System.IO.SeekOrigin.Begin); } memoria.Close (); ...

Pero no podemos simplemente enviar los marcos codificados como una cadena gigante. Creamos un documento XML que contiene nuestros marcos y otra información sobre el video y luego lo enviamos al cliente. De esta forma, el navegador puede recibir nuestros marcos como un objeto DOM DOM y navegar fácilmente a través de ellos. Solo imagine lo fácil que es editar un video que está almacenado en formato XML:

14.9850224700412 {Ancho = 160, Altura = 120} 6.4731334 / 9j / 4AAQSkZJRgABAQEAYAB .... ....

Este formato también tiene sus propios inconvenientes. Los videos que se convierten en archivos XML codificados en Base64 se encuentran entre el 10% (principalmente archivos AVI) y el 300% o más (algunos archivos WMV) más grandes que su equivalente binario.

Si está utilizando un archivo XML, incluso no necesita un servidor web, puede abrir el HTML desde un directorio local y ¡debería funcionar! Incluí un ejecutable en el archivo de descarga del artículo que puede convertir su archivo de video a un documento XML que luego se puede mostrar en el navegador. ¡Sin embargo, el uso de archivos grandes y videos de alta resolución no es una buena idea!

Bien, ahora podemos enviar nuestro documento XML de video codificado Base64 como lo haríamos con cualquier otro tipo de archivos XML. Quién dice que los archivos XML siempre tienen que ser conjuntos de registros aburridos de todos modos