Creación de un servidor de multidifusión basado en códec OPUS (android / linux)

Estoy tratando de crear un servidor de multidifusión basado en OPUS para un proyecto de audio en el que estoy trabajando y se ejecutará en el O-Droid X (http://www.hardkernel.com/renewal_2011/products/prdt_info.php?g_code = g133999328931) para este proyecto. Por el momento no estoy seguro de por dónde empezar para crear y seguir haciendo un servidor de multidifusión en linux o android usando el codec OPUS. Este es mi primer servidor de multidifusión para soporte de audio que he hecho desde cero. Si hay punteros que sería muy apreciado.

También haciendo que sea accesible a través de una página web y jugable a través de esa página web sería una situación ideal para que una aplicación específica en el lado del cliente no sería necesario.

Al parecer Icecast hace mucho de lo que estás buscando. Es de código abierto (GPL) y admite flujos de Opus utilizando el formato de contenedor Ogg, podría tener un vistazo a algunas ideas generales de arquitectura de software. Mi aplicación SoundWire para Android (con el servidor Win / Linux) hace Opus streaming con baja latencia, pero los protocolos de red son personalizados … No conozco ningún protocolo abierto establecido que puede hacer baja latencia (por mi definición 1 segundo de retraso no es bajo estado latente).

Mi enfoque era construir un servidor de red convencional que configura un socket unidifusión UDP normal para cada cliente. Evite TCP si desea baja latencia, entonces tendrá que lidiar con la naturaleza del datagrama de UDP de alguna manera. Con Opus la cantidad de datos transmitidos por cliente no es excesiva. Utilizo la multidifusión solamente para el descubrimiento (localizar automáticamente un servidor).

Le sugiero que comience con algún código de servidor de código abierto y lo adapte a sus necesidades, traiga Opus que es muy fácil de integrar, elija un formato de contenedor como Ogg si es adecuado (busque Ogg Opus). Si desea compatibilidad de navegador, más o menos implementará parte de un servidor web (HTTP, etc.) y tendrá que renunciar a sus objetivos de baja latencia.

Como nota general, en espera de una respuesta a mi comentario: Usted se sentirá decepcionado al saber que multicast es bastante inútil. Fuera de algunas configuraciones inusuales que probablemente no encontrará en el mundo real, la multidifusión no funciona a través de Internet , ya que la mayoría de routers no están configurados para pasarlo. Es realmente sólo utilizable a través de redes locales.

En cuanto a hacerlo accesible a través de una página web, estás bastante fuera de suerte. No hay soporte de navegador nativo para la multidifusión, ni tampoco existe soporte para OPUS, y la mayoría de los métodos estándar para ampliar las capacidades del navegador (por ejemplo, Javascript y Flash) tampoco pueden ayudarte mucho. Es posible que pueda implementarlo en un applet de Java, pero el número de agentes de usuario con instalaciones Java en funcionamiento se está reduciendo rápidamente (en particular con el reciente exploit de Java) y el applet resultante puede terminar requiriendo privilegios elevados para usar multicast de todos modos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.