2009-05-17 18 views
5

Estoy trabajando en un servidor de transmisión que será capaz de transmitir anuncios dirigidos. Básicamente, los oyentes escuchan la misma música, pero cada, digamos, 30 minutos viene un bloque de anuncios y cada oyente tiene su propio bloque. La implementación de dicho servidor de transmisión plantea varios problemas y esta pregunta es sobre uno de ellos.¿Cómo puedo concatenar perfectamente las transmisiones de MP3?

El servidor funcionará de manera similar a Icecast, es decir, leerá la transmisión a través de la red de algún generador de flujo y lo retransmitirá a cada oyente. Cuando llega el momento de transmitir anuncios, el servidor deja de buscar el flujo del generador, lee los anuncios de los archivos y los inserta en el búfer de cada oyente, los transmite y reanuda al retransmitir el flujo desde el generador.

Cuando el servidor cambia de retransmisión de transmisión a anuncios de difusión, tiene que concatenar dos transmisiones de MP3 (transmitimos en MP3). Mi preocupación es que simplemente agregar una pieza de datos tras otra puede producir algunos artefactos audibles. ¿Se puede hacer sin problemas?

Ya he resuelto esto: - Puedo hacer que el servidor tenga en cuenta los marcos MP3 para evitar errores de sincronización. - Estoy pensando en anexar cuadros de MP3 desde el archivo de anuncios después de los cuadros de MP3 de la transmisión. - Como el anuncio se carga desde un archivo MP3 codificado correctamente, evito el problema del depósito de bytes, porque el primer fotograma del archivo no puede usarlo.

Pero mi preocupación es la forma en que funciona la MDCT. Los oyentes no tienen idea de lo que hará mi servidor, por lo que sus decodificadores MP3 pueden producir algunos artefactos porque los datos MDCT incorrectos se colocarán uno tras otro en la secuencia que descargan. ¿Compensará el relleno cero al comienzo del archivo con el anuncio?

¿Conoces alguna biblioteca/herramienta (de ser posible de código abierto) que pueda unir sin problemas dos archivos MP3 sin descomprimirlos?

¿Puedes indicar algún buen recurso que describa el formato MP3? Busqué mucho en Internet, encontré mucha información, pero todavía echo de menos la imagen general.

¿Quizás sabes que esto sería más fácil si utilizo otro códec como OGG/Vorbis, AAC?

PS. Esta pregunta no es un duplicado de What is the best way to merge mp3 files?. mp3wrap y herramientas por igual no son una opción para mí.

Respuesta

0

Si está en Windows, la API de Microsoft DirectShow puede ser el camino a seguir. Debería saber que es capaz de hacer cosas con audio y video tanto de forma estática como de transmisión, en una variedad de formatos (solo necesita los códecs necesarios, y la interfaz es prácticamente la misma para todos).

Dicho esto, DirectShow está desafortunadamente diseñado de una manera terriblemente intrincada y tiene una curva de aprendizaje abrupta, pero la potencia que ofrece es inigualable si vas a hacer manipulación de audio/video en Windows. Sin embargo, hay una gran cantidad de muestras y tutoriales sobre cómo usarlo, por lo que puede no ser tan doloroso al final. Además, si está utilizando .NET Framework, hay una administración envuelta por el nombre de DirectShow.NET. No va a ser una tarea fácil hagas lo que hagas, a menos que haya algo que yo no sepa. ¡Buena suerte con eso de todos modos!

+0

Tal API podría ser demasiado costosa desde el punto de vista informático. La estación de radio en la que trabajo ya tiene 5k usuarios/tráfico pico de servidor. Incluso si es solo un segundo de música que tengo que procesar para cada oyente, es más de una hora de música para descomprimir/comprimir en muy poco tiempo ... – Jasiu

+0

No estoy seguro de que sea necesariamente ... realmente deberías hacerlo un poco más investigando sobre esto, ya que DirectShow es * el * camino a seguir para material de medios en Windows. – Noldorin

2

Creo que los MP3 pueden combinarse simplemente concatenando los archivos. En algunas pruebas rápidas (cat file1.mp3 file2.mp3 > merged.mp3; mplayer merged.mp3) parece funcionar como se esperaba. Transmitir desde un servidor web probablemente funcione igual de bien.

¿Cómo se manejará el cambio del archivo de entrada actual? Simplemente puede tratar los anuncios como pistas cortas para jugar.

+0

Sí, así es como me gustaría ir, pero ¿está seguro de que funciona y no hay circunstancias bajo las cuales se produzca un fallo audible? – Jasiu

+1

Lo más probable es que esto no funcionará ... hay múltiples formatos de mp3 ... Puede tener un conjunto de frecuencia constante de bits de mp3 con un tamaño de fotograma constante (tantos bits por muestra), o una tasa de bits variable mp3 que fluctúa. .. no son compatibles. Además, simplemente concatenar colocaría las etiquetas de cabecera e id3 en el medio del archivo, por lo que los archivos multimedia tendrían problemas para reproducir el archivo. Si desea hacer esto de la manera correcta, necesitará usar un software que hace esto, o convertir ambos archivos de auditoría a un formato único y luego concatenar las secuencias de audio y guardarlas en un archivo nuevo. – uzbones

+0

Digamos que no tengo ninguna etiqueta ID3 y utilizo tasa de bits constante. – Jasiu

0

me acercó un problema muy similar, y después de hacer las preguntas correctas en diversas fuentes le ocurrió la siguiente ...

Cualquier decodificador digna omitirá los datos "malos" hasta que se realiza un encabezado de la trama válida. Esto es en lo que ID3v2 confía para inyectar información adicional en los datos mp3. En el servidor, iría con el análisis de archivos MP3 de origen para que solo sirvan marcos de MP3 válidos. Si sirve unos pocos fotogramas silenciosos (alrededor de 7 deberían hacerlo), el decodificador debería tener tiempo para establecerse antes de aumentar la siguiente carga de datos MP3 (no asociados), evitando los artefactos que (correctamente) asume al concatenar fotogramas de codificación diferente. sesiones

Más problemático es la posible conmutación de atributos MP3 (1/2 canales, velocidad de muestreo de salida, etc.) entre un cuadro y el siguiente. Algunos decodificadores se molestan bastante cuando se enfrentan a una transmisión de este tipo, lo que resulta en una reproducción de 1/2 velocidad y similares. Por lo tanto, debe asegurarse de que todo el material de origen esté codificado con los mismos atributos de salida, de lo contrario, puede despegarse.

Es posible que haya visto esto ya, pero si no:

http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=79&printer=t

0

no veo por qué desea para concatenar los archivos. ¿Por qué no usas algún tipo de sistema de lista de reproducción y simplemente cambias qué archivo envías? Creo que esto permitiría una mayor flexibilidad en el largo plazo, y no terminarías con archivos MP3 grandes.

+0

No estoy seguro de si entiendo lo que está diciendo, pero no puedo ver cómo su idea permite anuncios dirigidos. Mi radio usa el protocolo SHOUTcast/Icy, hay varios jugadores, así que no puedo hacer nada en el lado del cliente. Estoy hablando de archivos, porque no importa por el bien de esta pregunta, pero en realidad usaré flujos de MP3 generados sobre la marcha. – Jasiu

+0

Sería todo del lado del servidor ... Básicamente, el servidor trataría los anuncios como canciones, excepto que alternarías entre canciones y anuncios. Supongo que no concatenar todas las canciones juntas cuando las pones en la transmisión ... – uzbones

2

Debería poder concatenar archivos mp3 de ambos formatos, CBR y VBR. Los archivos MP3 no tienen un encabezado principal (sin tener en cuenta ID3 y Xing). Los datos de audio se almacenan como fragmentos donde cada fragmento incluye su propio encabezado. El encabezado contiene la información necesaria (tasa de bits, frecuencia de muestreo, estéreo, etc.) para la decodificación de los datos de audio en ese fragmento.

Esta es una de las razones por las que es difícil determinar la duración de un archivo mp3.

Otra forma de verlo es, si concatenas un archivo MP3 CBR con un archivo VBR, el resultado final es el mismo que un archivo largo VBR con la primera sección de Audio a una tasa de bits constante.

El problema es que algunos reproductores MP3 pueden ser estrictos y esperan un encabezado Xing para un archivo MP3 VBR. Sin embargo, esto nunca fue la especificación para el formato MP3, pero ahora se supone que es verdadero.

Cuestiones relacionadas