Registro de transformación de cromo: agregue soporte de audio MP2

En el artículo anterior " Records of Chromium Transformation: Adding MPEG TS Format Support ", hablé sobre cómo agregar soporte para transmisiones MPEG TS a Chromium. Pero esta tarea no ha terminado, porque TS es solo un formato de contenedor, y ahora es equivalente a abrir la tapa, y si la transmisión de video y la transmisión de audio en el interior se pueden reproducir depende del formato de codificación del audio y video y esta codificación. formatos Ya sea para apoyar.

Después de resolver el problema de decodificación de la codificación de video H264 en la transmisión TS, me encontré con el problema de decodificación de audio. Del registro, hay la siguiente información:

03-08 06:38:13.096 31080 31932 V chromium: [VERBOSE1:ffmpeg_common.cc(122)] Unknown audio CodecID: 86016
03-08 06:38:13.096 31080 31932 V chromium: [VERBOSE1:batching_media_log.cc(37)] MediaEvent: {"debug":"Warning, FFmpegDemuxer failed to create a valid/supported audio decoder configuration from muxed str}

El CodecID de audio aquí se define en el archivo third_party/ffmpeg/libavcodec/codec_id.h. Los IDs en este archivo están definidos en forma hexadecimal.Después de una simple conversión, puede saber que los IDs en el registro corresponden a AV_CODEC_ID_MP2.

Otro formato de audio más antiguo, no el MP3 ni el AAC con los que estamos familiarizados. En cuanto al formato MP2, la introducción es la siguiente:

MP2 es la abreviatura de MPEG-1 Layer II Es un formato de audio comprimido con pérdida con una extensión de archivo .mp2. Para aquellos en la industria de producción de televisión, MP2 es un formato de archivo de audio muy común. MP2 se utiliza principalmente en la codificación de audio y video digital de la transmisión digital estandarizada y la transmisión de televisión digital (DAB, DMB, DVB). El formato de audio estándar MPEG II admite tasas de muestreo de 32, 44,1 y 48 kHz y tasas de bits de 32 a 320 kbps/seg.

Cuando la tasa de bits de MP2 alcanza los 256 kbps o más, puede tener una buena resistencia a los errores y una mejor calidad de sonido, y es el estándar de audio dominante en la industria de la transmisión de televisión.

El formato MP2 tiene mejor calidad de sonido (menos compresión de datos) que MP3.

Como una biblioteca de medios de código abierto integral, FFmpeg tiene soporte perfecto para el formato MP2. El problema es que a los ingenieros de Google no les gustan algunos formatos antiguos, por lo que no planean admitirlos en Chromium. Afortunadamente, la escalabilidad del código de Chromium no es mala, por lo que agregar soporte para un nuevo formato a Chromium es relativamente simple.

Se dice que el decodificador de MP3 también es compatible con la decodificación de MP2, pero lo he probado, pero no funciona, al menos no en Chromium, así que todavía tengo que listar MP2 para procesar.

Se mantiene una lista de códecs de audio en Chromium, definida en el archivo media/base/audio_codecs.h:

enum class AudioCodec {
  // These values are histogrammed over time; do not change their ordinal
  // values.  When deleting a codec replace it with a dummy value; when adding a
  // codec, do so at the bottom before kMaxValue, and update the value of
  // kMaxValue to equal the new codec.
  kUnknown = 0,
  kAAC = 1,
  kMP3 = 2,
  kPCM = 3,
  kVorbis = 4,
  kFLAC = 5,
  kAMR_NB = 6,
  kAMR_WB = 7,
  kPCM_MULAW = 8,
  kGSM_MS = 9,
  kPCM_S16BE = 10,
  kPCM_S24BE = 11,
  kOpus = 12,
  kEAC3 = 13,
  kPCM_ALAW = 14,
  kALAC = 15,
  kAC3 = 16,
  kMpegHAudio = 17,
  kDTS = 18,
  kDTSXP2 = 19,
  // DO NOT ADD RANDOM AUDIO CODECS!
  //
  // The only acceptable time to add a new codec is if there is production code
  // that uses said codec in the same CL.

  // Must always be equal to the largest entry ever logged.
  kMaxValue = kDTSXP2,
};

El primer paso es agregar un elemento kMP2 = 20 antes del valor de enumeración kMaxValue y modificar el valor kMaxValue para que sea igual a kMP2.

El segundo paso es modificar el archivo media/base/audio_codecs.cc para establecer la relación correspondiente entre nombre e ID.

El tercer paso es modificar los archivos media/base/supported_types.cc y media/filters/android/media_codec_audio_decoder.cc para indicar claramente a Chromium que admita el formato MP2. Busque la palabra clave kMP3, donde hay kMP3, agregue kMP2.

El cuarto paso es modificar el archivo media/ffmpeg/ffmpeg_common.cc para establecer la asociación entre el ID del códec FFmpeg y el valor de enumeración del códec en Chromium.

El último paso es modificar el archivo codec_list.c, agregar el decodificador ff_mp2_decoder, modificar el archivo config_components.h y habilitar la macro CONFIG_MP2_DECODER de acuerdo con el método en " Chromium Transformation Record: Adding MPEG TS Format Support ".

De esta forma, se añade soporte para la decodificación de MP2. Por supuesto, aquí solo hay soporte para el flujo de audio MP2 contenido en el contenedor de medios. Si es video MP2, ese es otro tema.

Además, el flujo de audio en el flujo TS también se puede codificar en MP3, AAC, AC3, etc., y hay muchas combinaciones de ellos. Por lo tanto, en el trabajo real, existen muchas trampas relacionadas con el audio y el video. Ahora admito todo tipo de formatos de audio y video. Después de todo, en realidad, qué tipo de archivos de audio y video pueden surgir.

Bienvenidos a todos a ver mi vergonzoso viaje de excavación y llenado de pozos.

Supongo que te gusta

Origin blog.csdn.net/mogoweb/article/details/129848573
Recomendado
Clasificación