Práctica recomendada de la tecnología de canciones K y videos cortos: exploración de la tecnología de audio y video "Sing Bar"

Contenido original, indique la fuente para la reimpresión

I. Introducción

  Con el desarrollo de las aplicaciones móviles en la actualidad, casi todas las aplicaciones tienen funciones relacionadas con audio y video. En resumen, probablemente haya grabación de audio y video, reproducción de audio y video, procesamiento de efectos especiales de audio y video y transmisión de audio y video.
  Las aplicaciones de videos cortos más populares son Douyin y Kuaishou, la aplicación de canciones K Sing Bar y la canción National K, y la nueva Music Street de NetEase Cloud, así como NetEase Cloud Music y QQ Music para escuchar canciones. Aunque el modo de funcionamiento de cada aplicación es diferente, la implementación técnica es similar. El software de video corto tiene un procesamiento de video más rico, con filtros, calcomanías y software de canciones K muy interesantes que maneja más detalles de la música, como el volumen, los efectos de sonido y el tono.
  El autor es un usuario anterior de Sing Bar. Desde su desarrollo, la tecnología de audio y video cubierta por Sing Bar es relativamente completa. El maestro Zhan Xiaokai, el director original de la tecnología de audio y video de Sing Bar, explicó al audio móvil en el libro "Guía avanzada de audio y video". Las mejores prácticas de video brindan implementaciones específicas, por lo que usaré Sing Bar como referencia para explorar tecnologías relacionadas con audio y video en el terminal móvil. (La implementación del código se basa en Android, pero para la operación de audio y video de bajo nivel, las ideas de implementación de cada plataforma son aproximadamente las mismas. Además, el autor nunca ha trabajado en la barra de canto. Si hay alguna infracción u otro comportamiento, deje un mensaje. Si desea comunicarse con el autor Para discutir juntos la tecnología de audio y video móvil, deje un mensaje o hable en WeChat (smzh_james).


Un directorio de técnicas enumera
a, grabación de audio (grabación, un decodificador de audio, remuestreo de audio, mezcla de audio) En
segundo lugar, la reproducción de audio y el procesamiento de efectos (volumen, tono, sonido)
tres grabaciones de video (relacionadas con la cámara, codificación de video)
IV Efectos de video Procesamiento (belleza, filtros, pegatinas)
5. Reproducción de video (decodificación de video, reproducción de video, sincronización de audio y video)
6. Mezcla de audio y video
(los enlaces de contenido se actualizarán sucesivamente)

2. Comparación de efectos y análisis de la realización técnica

Consulte la interfaz de la aplicación Sing Bar e hizo un software de canción K simple, estilo blanco y negro, pero cubre la mayoría de las funciones, en adelante llamado SuperKtv. La comparación de efectos se muestra en la siguiente figura.

(1) La

  imagen 1 de la página de la lista de canciones K es SuperKtv, la imagen 2 la canta.

  La implementación de SuperKtv es relativamente simple: obtiene directamente los archivos de audio existentes en el teléfono móvil y los muestra en una lista, proporcionando una entrada para funciones posteriores. No hay dificultad en la implementación, y todos los que hacen desarrollo lo entienden, así que no lo repetiré.

(2) Las

  dos primeras imágenes de la página de grabación de audio son las páginas de grabación de audio de SuperKtv, y la tercera imagen es la página de grabación de audio de Sing Bar.

  • Las letras
      son muy importantes para el software de karaoke. El software de karaoke profesional como Sing Bar tiene una enorme biblioteca de música. Para sincronizarse con el canto, las letras suelen tener una marca de tiempo para que se puedan desplazar dinámicamente durante el canto. , Y función de puntuación. A partir de un análisis técnico, la letra y la función de puntuación deben ser diferentes para cada canción, este aspecto no implica tecnología de audio y video, y el autor no tiene mucha energía para personalizar la letra y la función de puntuación de la canción.
      Para que SuperKtv y Sing Bar tengan un mayor grado de intimidad, todavía pienso en formas de hacer este trabajo. Para resolver rápidamente el problema de las letras de SuperKtv, solo puede comenzar desde la red, utilizando la red de letras https://www.90lrc.cn poderosas capacidades de búsqueda, usando su interfaz de búsqueda para buscar la canción, Html regresó con la lista de resultados de búsqueda y luego analizar Html obtiene el elemento de lista apropiado. Generalmente, el primer elemento es el más apropiado, y el enlace de la letra se elimina, y luego el HTML con la letra se obtiene a través del enlace de la letra, y el texto de la letra se puede obtener después de filtrar. El efecto de visualización es como se muestra en la Figura 1. Una forma de realizar la función de puntuación es hacer coincidir el tono reconocido dinámicamente con el contenido del archivo predefinido durante el proceso de canto.

  • Grabación de
       una de las funciones principales del software de canciones K para requisitos de audio de baja latencia de alto rendimiento, este punto que Android IOS para hacerlo mucho mejor, y la función es perfecta, con AudioUnit puede resolver la mayoría de los problemas; Android8.0 menos Se recomienda OpenSL ES, que es una implementación optimizada de OpengSL en dispositivos integrados; Android 8.0 y superior recomiendan AAudio, una interfaz de grabación liviana, creada para el procesamiento de audio de baja latencia. Según el documento del sitio web oficial, el rendimiento de baja latencia es mejor. Bien, y dados los datos de prueba de varios modelos de Pixel. Sin embargo, debido a que hay demasiados modelos de Android y diferentes esfuerzos de implementación de hardware, ambos no son tan buenos como AudioRecorder en compatibilidad. El equipo de Google Android encapsuló OpenSL ES y AAudio y lo llamó Oboe. Parece tener el ideal de ponerse al día con AudioUnit. Proporciona una interfaz de llamada unificada y es extremadamente conveniente de usar. Oboe se puede encontrar directamente en GitHub https: // GitHub / Oboe , la demostración proporcionada tiene un gran valor de referencia, pero según los comentarios en GitHub, hay muchos problemas en el uso, principalmente en el ruido y el retraso. Espero con interés la actualización de seguimiento para resolver por completo el problema que Android ha sido criticado desde sus inicios.
       Otra solución para la grabación de baja latencia es calcular el retardo de grabación. Se supone que si se puede obtener el retardo de grabación, el sonido grabado se puede hacer avanzar artificialmente durante un período de tiempo cuando la página de edición está mezclada, y el resultado es casi nulo. Pero si puede ser tan fácil de resolver si no es Android, el registro de cálculo de retraso no es fácil, cálculos aproximados que graban el retraso del hardware = retraso + retraso de almacenamiento en búfer, Si hay más cálculos en la devolución de llamada de grabación, es necesario agregar el retraso de cálculo. Hasta ahora, solo AAudio proporciona un método para calcular el retardo, lo vergonzoso es que el retardo medido es 0. Incluso si los dispositivos superiores a 8.0 ya han ocupado el mercado principal, ciertamente no es suficiente que el software comercial admita 8.0. El retraso del hardware solo puede ser obtenido por los fabricantes con datos más precisos, por lo que la cooperación con los fabricantes es una de las soluciones. Método. Para los teléfonos móviles de Huawei, las API correspondientes se proporcionan en el SDK de Huawei. AudioKit se puede utilizar para obtener directamente el retardo de grabación, y tiene la función ear-back y siete efectos de sonido. Esta debería ser la mejor noticia que he escuchado hasta ahora.

  • La decodificación de audio y el remuestreo
       generalmente reproducirán acompañamiento o voces originales cuando se graba en el software de la canción K para proporcionar una referencia para el cantante. La API subyacente generalmente no proporciona funciones de decodificación, por lo que se requiere acompañamiento antes de "llenar" los datos en el búfer del dispositivo O la canción original se decodifica en los datos originales, que es el famoso Pcm. Los archivos de canciones generalmente están en formato Mp3 o AAC. Se recomienda Lame para codificar y decodificar MP3, y Fdk-aac se recomienda para codificar y decodificar AAC. Estos dos tienen la mejor velocidad hasta ahora y son más adecuados para aquellos con requisitos de tiempo real. , Puede usar o compilar directamente estas dos bibliotecas en FFmpeg, llamar a la operación Api de FFmpeg, dar un paso atrás, usar directamente el algoritmo de decodificación de FFmpeg para completar las funciones correspondientes, por supuesto, hay diferencias en el rendimiento. La práctica común en la decodificación es compilar FFmpeg con Lame o Fdk-aac, y llamar a la Api de FFmpeg para que realice la codificación y decodificación, porque la uniformidad de su Api es muy ventajosa.
       En la plataforma Android, MediaCodec también se puede usar para decodificar. El sistema viene con Api, que es fácil de usar, tiene más documentos y usa decodificación de hardware, que es mucho más rápida que la decodificación de software. Lamentablemente, MediaCodec no se proporciona hasta después de Android 6.0 Interfaz C ++, considerando la unidad con IOS, se recomienda la primera.
       Los puntos clave del remuestreo son la frecuencia de muestreo, el número de canales y la profundidad de muestreo (también conocida como precisión de cuantificación) del archivo de música. La frecuencia de muestreo, el número de canales y la precisión de cuantificación de un determinado archivo de música pueden considerarse inciertos, pero la frecuencia de muestreo, el canal y la profundidad de muestreo admitidos por el hardware de la plataforma de reproducción son limitados y seguros, por lo que los datos de "relleno" para el audio Otra tarea antes del búfer del dispositivo es el remuestreo.Simplemente use FFmpeg directamente.La función de remuestreo proporcionada por FFmpeg es más poderosa, incluyendo la frecuencia de muestreo, el número de canales y la profundidad de muestreo se pueden cambiar. Puede consultar el documento o buscar en Internet. Cabe señalar que la mayoría de los tutoriales de remuestreo de FFmpeg en Internet ignoran un problema: al remuestrear de mono a canal dual, para asegurarse de que el volumen de audio permanece sin cambios, el decibelio real (volumen) cambiará ligeramente. Los puntos también necesitan una atención especial.

  • Almacenamiento de contenido de audio
       Teniendo en cuenta que el contenido de audio grabado por el software de la canción K se editará más tarde, se recomienda guardar los datos originales directamente cuando el espacio en disco no esté limitado para facilitar las operaciones posteriores. El espacio de una canción generalmente es de 100 Mb. Si tiene en cuenta el espacio en disco, puede codificar y guardar los datos grabados y luego decodificarlos al editarlos. En cuanto a la parte de codificación de audio, la analizaremos en detalle al guardarlo. Cabe señalar que el archivo debe leerse y escribirse con frecuencia al guardar datos. Teniendo en cuenta los problemas de rendimiento, se pueden usar operaciones asíncronas para completar. El problema de sincronización de subprocesos de operaciones asíncronas se puede usar en la biblioteca Boost. Proporcione la cola sin candados para completar.

(3) Página de edición de audio


  Las dos primeras imágenes son SuperKtv, las dos últimas están cantando. Al escribir este artículo, se ha revisado la página del editor de Sing Bar. El diseño de la página ha sufrido cambios tremendos y el estilo es más similar al de Yinjie. Pero cuando el autor imitó la interfaz de Sing Bar, los antiguos usuarios deberían tener más claro que la apariencia es muy similar a SuperKtv. Es una lástima que no pude restaurar la aplicación Sing Bar con la mayor similitud.

  • Reproducción de audio El
       software de la canción K requiere la reproducción de audio en la página de edición y requiere un rendimiento de baja latencia alta. El propósito es reproducir el contenido previamente grabado y el acompañamiento al mismo tiempo, lo que suena como escuchar el álbum de un cantante. Usar OpenSL ES y AAudio en la plataforma Android es una mejor opción. Para lograr un mejor efecto de sincronización, es necesario elegir un Api de baja latencia, además, también es necesario controlar con precisión el tiempo de reproducción de las dos pistas. La forma más sencilla es abrir dos reproductores, uno para tocar las voces y el otro para tocar el acompañamiento para lograr el efecto de reproducción sincronizada. Más útil es seleccionar un jugador y mezclar los datos Pcm de las voces y el acompañamiento para tocar. , La sincronización de este último es mejor que el primero y la eficiencia es mayor. El segundo esquema se usa en SuperKtv y el efecto no es malo. Antes de reproducir, preste atención al canal, la frecuencia de muestreo y la profundidad de muestreo de los datos de Pcm, y vuelva a muestrear si es necesario.

  • Control de volumen
       En el procesamiento de audio, es difícil procesar el audio codificado, generalmente procesando los datos originales. El volumen, los efectos de sonido y el procesamiento de tono posteriores están procesando Pcm.
       Como todos sabemos, el sonido es una onda, y el volumen puede entenderse como la amplitud de la onda, también llamado sonoridad. Cambiar el volumen significa cambiar la amplitud de la onda. Desde un punto de vista matemático, para aumentar la amplitud de una onda sinusoidal, basta con multiplicarla por la ganancia. Del mismo modo, el volumen es correcto. Los datos de Pcm se pueden multiplicar por la ganancia, por supuesto, puede usar FFmpeg para resolverlo directamente. Cabe señalar que los valores máximo y mínimo de cada cuadro de datos no se pueden exceder después de aumentar la amplitud. Tomando como ejemplo la precisión de modelado de 16 bits, si el valor final es mayor que 32767 o menor que -32768, entonces la calidad del sonido se verá afectada y suena como El mismo ruido.

  • Control de
       tono El tono está determinado principalmente por la frecuencia del sonido, pero también está relacionado con la intensidad del sonido. Para una cierta intensidad de tonos puros, el tono sube y baja con el aumento y la caída de la frecuencia; para ciertas frecuencias de tonos puros y tonos puros de baja frecuencia, el tono disminuye con el aumento de la intensidad del sonido, mientras que el tono de los tonos puros de alta frecuencia aumenta con el aumento de intensidad. Se recomienda utilizar SoundTouch (https://sourceforge.net/projects/soundtouch/) para el ajuste de tono . El uso es relativamente simple, y también tiene funciones como velocidad variable.
       El tono está determinado principalmente por la frecuencia de la onda de sonido. Está asociado con puntos de conocimiento relacionados con las ondas en matemáticas o física, que puede realizar manualmente usted mismo. Se entiende simplemente como volver a muestrear los datos de audio a otra frecuencia, pero el contenido de los datos no se reduce. Según la definición de la transformada de Fourier, cualquier onda periódica se puede descomponer en una superposición de varias ondas sinusoidales. La práctica común aquí es transformar los datos de Pcm en el dominio de frecuencia mediante la transformada de Fourier y cambiar la frecuencia de la onda fundamental. Debido a que el cambio de frecuencia puede hacer que los datos disminuyan o aumenten, es necesario realizar un cálculo de interpolación y, finalmente, hacer el Fourier inverso La transformación transforma los datos en el dominio del tiempo y se pueden obtener los datos de Pcm con la frecuencia cambiada, es decir, se cambia el tono.

  • Control de efectos de sonido
       Dado que el sonido es una onda, el efecto de sonido también se procesa de acuerdo con algunas características de la onda, por ejemplo, el efecto de eco se realiza de acuerdo con la reflectividad de la onda. El profesor Xiaokai Zhan dio la realización específica de efectos de audio con Sox en el libro "Guía avanzada de audio y video". FFmpeg también puede realizar procesamiento de efectos de audio, y SuperKtv usa ambos para lograr el procesamiento de efectos de audio. Sox tiene una función un poco más completa en el procesamiento de efectos de audio . Se recomienda Sox http://sox.sourceforge.net/ . Es conocido como la navaja suiza del procesamiento de audio. Desafortunadamente, esta biblioteca dejó de actualizarse antes. Su función es reemplazada gradualmente por el cliente de escritorio AudioCity.
       El procesamiento de efectos de audio se divide en reverberación, ecualización y compresión. La reverberación puede entenderse como el eco del canto en una casa. Los factores que influyen generalmente incluyen el tamaño de la habitación, la reflectividad de la pared (materiales de decoración, etc.), la ubicación del cantante, etc., por lo que al cambiar el tamaño de la habitación y otros parámetros, puede Imitando el efecto de una sala de estudio profesional, como se conocen los parámetros de reverberación de la sala de estudio de Viena, hacer referencia a estos parámetros puede simular el efecto de un concierto en la sala de estudio de Viena. El ecualizador puede ajustar por separado la amplificación de varias señales de componentes de frecuencia. Generalmente, el ecualizador en el mezclador solo puede ajustar las señales eléctricas de alta frecuencia, frecuencia intermedia y baja frecuencia por separado. El ecualizador también tiene filtrado de paso alto y filtrado de paso bajo. Por ejemplo, el efecto de fonógrafo en Sing Bar usa un ecualizador. Por un lado, filtra los armónicos de ciertas frecuencias y, por el otro, cambia la ganancia de ciertos componentes de la señal de frecuencia para obtener el efecto del fonógrafo. La definición de compresor en la Enciclopedia Baidu es la siguiente: "El compresor es un amplificador cuya ganancia disminuye a medida que aumenta el nivel de la señal de entrada. Lo que esencialmente cambia es la relación entre la señal de entrada y la de salida. Los compresores son los dos más comunes Uno de los dispositivos utilizados para procesar el rango dinámico de las señales de audio. ”Esta definición debe ser muy clara. La realización de Sox se basa principalmente en el ajuste de parámetros. Mediante la superposición de estos tres efectos, puede ajustar los efectos de diferentes estilos como Ktv, flauta dulce, pop y rap. El efecto de sonido personalizado en la imagen de arriba proporciona acceso ajustable a algunos parámetros importantes de los tres efectos de reverberación, ecualización y compresión. Otros efectos de sonido pueden entenderse como una combinación de parámetros fijos basados ​​en la experiencia. Los principios de los tres algoritmos anteriores pueden referirse a los tres archivos reverb.c, bequed.c y compand.c en el código fuente de Sox.

(4) Página de grabación de video

  Las primeras tres imágenes son la interfaz de grabación de video de SuperKtv, y las últimas tres imágenes son la interfaz de grabación de video de Sing Bar.
  A partir de una comparación funcional, el panel de belleza SuperKtv carece de las funciones de afilado, estiramiento facial y ojos grandes. Además, la función de apoyo no está implementada, y la analizaremos más adelante.
   La parte de audio es la misma que antes, centrándose en el análisis de la grabación de vídeo. La grabación de video necesita guardar el video con efectos de belleza. Por supuesto, también puede guardar la pantalla de video original para procesarla en la página de edición. La primera se usa en Sing Bar, por lo que la primera solución también se usa en SuperKtv.

  • El funcionamiento, la belleza y los filtros de la cámara
       deben tener cierta base OpenGL ES, que puede entenderse como procesar cada píxel en cada cuadro de la imagen y luego representarlo en la pantalla. Para conocer los principios detallados, consulte los artículos de la serie OpenGL ES del blogger.
    Android OpenGL ES desde el principio hasta el avanzado (1) -Cinco minutos para desarrollar una cámara de belleza
    Android OpenGL ES desde el principio hasta el avanzado (6) -OpenGL ES Blanqueamiento y pulido de retratos Una exploración preliminar de
    Android OpenGL ES desde la entrada hasta la avanzada (8): el filtro de búsqueda universal El
    contenido anterior pertenece a la parte básica de OpenGL ES, y este artículo no lo describirá. Si tiene alguna pregunta, puede dejar un mensaje de comunicación.

  • Pegatinas (accesorios)
       En los productos de cámaras de belleza, la función de pegatina debe considerarse como lo más destacado, y se denomina accesorios en Sing Bar. Actualmente, la función de pegatina en Douyin es relativamente poderosa. La realización de este tipo de función se basa en el reconocimiento de puntos de características faciales y tiene requisitos relativamente altos en tiempo real. Sensetime Technology y Megvii Technology, que funcionan bien en el reconocimiento facial comercial doméstico Sdk, son productos de belleza para pequeñas y medianas empresas. Compré Sdk de estas dos empresas Douyin y FaceU utilizaron el reconocimiento facial de desarrollo propio de ByteDance, hasta donde yo sé. Debido a los altos requisitos para el rendimiento en tiempo real, generalmente se utilizan algoritmos de aprendizaje profundo y el modelo se identifica después del entrenamiento. Si los requisitos en tiempo real no son altos, puede usar Dlib http://dlib.net/ . El uso basado en OpenCV es relativamente simple. Esto también se basa en el aprendizaje profundo. El modelo que se da en el documento oficial es de unos 100 Mb. Después de todo, es de código abierto y gratuito. Existe una gran brecha en el rendimiento en comparación con el Sdk comercial. Según la medición real, Dlib tarda entre 400 y 500 ms en reconocer una imagen de 1080 x 720, e incluso 1000 ms en algunos teléfonos móviles de bajo rendimiento, mientras que los SDK comerciales se pueden completar en 20 ms. Por eso, los hay de código abierto, gratuitos y comerciales. La razón por la que puede venderse tan caro también nos permite respetar los derechos de propiedad intelectual. Debido a estas limitaciones, no hay una función de etiqueta dinámica en SuperKtv temporalmente.

   En cuanto al uso de pegatinas, puedes consultar otro blog Android OpenGL ES desde entrada a avanzado (7) -Pegatinas 2D OpenGL ES y mezcla Blend. Este es un artículo sobre pegatinas estáticas. Las pegatinas dinámicas son un poco más problemáticas y deben basarse en la cara. Cambie la posición y el ángulo de la pegatina de vez en cuando, y algunos necesitan desplazarse y hacer zoom. La regla de cambio de la pegatina debe definirse de antemano. Tome Shangtang Sdk como ejemplo. La regla de movimiento de la pegatina se define en un archivo json. Utilice la pegatina para analizarla primero. json, y luego hacer movimientos periódicos a lo largo del tiempo, este es el principio general de las pegatinas dinámicas.

  • La codificación de video es
       diferente del audio. El video original ocupa un gran espacio en el disco. Si el video grabado se guarda como datos originales, es inimaginable. Por lo tanto, después de grabar el video, debe guardarse después de la codificación. Hay muchos formatos de codificación de video. H264 y H265 son populares en terminales móviles. , SuperKtv usa la codificación H264, por lo que el artículo también toma H264 como ejemplo para el análisis.
       Si no necesita editar la imagen dos veces después de guardar el video con el efecto de belleza (por ejemplo, cantarlo), MediaCodec y Surface son los preferidos en la plataforma Android. Por un lado, la velocidad de codificación del hardware es mejor que la del software. Por otro lado, el sistema viene con Api será más conveniente de usar. Mediacodec puede codificar directamente los datos en Surface. Solo necesita escribir los datos codificados en un archivo, que se adapta muy bien a las necesidades de SuperKtv. Sin embargo, la compatibilidad de la codificación de hardware no es muy buena, sobre todo para miles de modelos de Android. Siempre hay varios teléfonos móviles que tienen problemas de este y otros. Teniendo en cuenta esta situación, a veces se utiliza la codificación de software y la codificación de software. Se recomienda X264 para H264. El rendimiento del algoritmo es mejor que el algoritmo de codificación H264 que viene con FFmpeg, pero el uso común es compilar X264 en FFmpeg y llamarlo con una interfaz unificada. Este método es un poco más problemático. Primero, debes volver a llamar a la cámara. Los datos se procesan para belleza, filtros, etc., y luego de acuerdo con las necesidades para ver si se requiere la conversión del formato de datos, porque hay dos conjuntos de API de cámara de Android, Camera1 recomienda usar NV21, Camera2 recomienda usar Yuv420p, al codificar con FFmpeg, debido al espacio de color Para mayor comodidad de uso, se recomienda que los datos se conviertan uniformemente al formato Yuv420p y luego se codifiquen. El algoritmo de conversión está disponible en Internet. Aquí se recomienda LibYuv, que es muy potente. Esta parte del contenido requiere la comprensión de varios espacios de color de la imagen. Especialmente la serie RGBA y la serie YUV.
       Si desea editar el video original dos veces en la página de edición, solo puede guardar la imagen original. En este momento, puede usar MediaCodec o FFmpeg. Bajo esta demanda, los dos no son muy grandes y la velocidad de codificación del hardware es rápida. , Pero la compatibilidad es un poco peor, la compatibilidad de la codificación del software es buena, pero la velocidad es un poco más lenta, puede elegirla adecuadamente. Por supuesto, FFmpeg también admite codificación de hardware, pero se necesita algún procesamiento adicional al compilar, pero si se trata de codificación de hardware, ¿por qué no utilizar la API del sistema directamente?

(5) Página de edición de audio y video

  Las dos primeras imágenes son la realización de SuperKtv, y las dos últimas imágenes son la realización de Sing Bar.
  Del mismo modo, Sing Bar también se ha sometido a una revisión importante en la página de edición de audio y video. Sing Bar no implementa la edición de video bajo la función de canto, por lo que sigue el estilo de Sing Bar, principalmente para la edición de audio. La implementación de la función es la misma que la edición de audio mencionada anteriormente. El punto más importante es la reproducción de video. A decodificación de video y sincronización de audio y video. Si desea realizar la función de edición de video, hay dos ideas, una es usar OpenGL ES para procesar y guardar en segundo plano, la otra es usar FFmpeg u OpenCV para guardar los datos después del procesamiento, se recomienda usar OpenGL ES para la edición de video.

  • La
       plataforma Android de decodificación de video recomienda usar la decodificación MediaCodec, que se puede decodificar directamente en Surface para su visualización, lo que ahorra muchas operaciones adicionales (conversión y renderizado de formatos de datos).
    Por supuesto, también puede usar X264 o FFmpeg para decodificar y copiar los datos decodificados al búfer provisto por ANative_Window para su visualización. Esto es mucho más conveniente que la codificación FFmpeg. Si necesita usar OpenGL ES para editar el video, necesita convertir los datos. La textura se carga en el búfer proporcionado por OpenGL ES para su visualización. Sing Bar puede importar videos externos para editarlos, lo que se puede lograr con las ideas anteriores.

  • Sincronización de audio y video La sincronización de
       audio y video es una parte muy importante de la reproducción de video, que afecta directamente los resultados de todo el trabajo anterior. La sincronización de audio y video generalmente usa sincronización de marca de tiempo, que requiere que se agregue la marca de tiempo correcta al codificar. La devolución de llamada de la cámara tiene la marca de tiempo del fotograma actual en microsegundos, que es consistente con la unidad requerida de MediaCodec, que es más conveniente de usar al codificar. La marca de tiempo de FFmpeg es diferente a la de MediaCodec. Se calcula en base a la base de tiempo. Solo necesita agregar el índice del marco actual al codificar. El motivo de la sincronización es que la cantidad de datos de reproducción de audio por unidad de tiempo es fija. Solo necesita completar los datos para la devolución de llamada de la API de reproducción, pero el video no tiene un mecanismo correspondiente. El contenido que se muestra en la pantalla y cuando se muestra son todos del mundo exterior. Control, si se usa la velocidad de decodificación, si la velocidad de decodificación es demasiado rápida, se puede reproducir un video más largo en poco tiempo, y si la velocidad de decodificación es demasiado lenta, la imagen se congelará. El proceso de sincronización se puede describir a grandes rasgos de la siguiente manera: si el fotograma actual se reproduce rápido, el siguiente fotograma continuará reproduciendo el fotograma actual, lo que equivale a esperar. Si el fotograma actual se reproduce demasiado lento, deséchelo y reproduzca el siguiente fotograma o el siguiente, de modo que Puede controlar la velocidad de reproducción de video. Los métodos de sincronización generalmente incluyen sincronización de audio a video, sincronización de video a audio, los dos se sincronizan con el tiempo de referencia y el video se sincroniza con audio para películas generales, porque los datos de audio reproducidos en una unidad de tiempo son fijos.

(6) Guardar y página de lista de trabajo

  La primera imagen es la interfaz guardada y la segunda imagen es la página de lista de trabajo guardada. La interfaz es simple, sin comparación con Sing Bar.

  El propósito de guardar es hacer que el resultado guardado sea el mismo que el efecto ajustado de la página de edición, lo que equivale a repetir la operación de la página de edición, pero que se convierta en una operación en segundo plano. Lo único que el primer plano debe mostrar es el progreso del guardado, y los datos procesados ​​en segundo plano son directamente Solo codifícalo.

  • La codificación de audio
       mencionó anteriormente que para la conveniencia de la edición, el sonido grabado se guarda como los datos originales, pero el resultado de audio debe ser el producto terminado (codificado), por lo que debe codificarse antes de guardar. La codificación de audio móvil generalmente usa formato MP3 o AAC. Se recomienda Lame para la codificación MP3, Fdk-aac se recomienda para la codificación AAC y también se puede utilizar el algoritmo de codificación de MediaCodec o FFmpeg. Para los requisitos de almacenamiento de SuperKtv, la velocidad de codificación no es muy importante, por lo que puede elegir cualquiera. Después de comprender la diferencia entre el formato MP3 y el formato AAC, puede elegir cualquier método para lograr buenos resultados. Una diferencia es que el AAC codificado por MediaCodec es una transmisión simple sin ADTS. Si este es el archivo de audio final, debe agregar ADTS manualmente y, después de usar la codificación Fdk-aac, ADTS se agregará automáticamente.

  • La combinación de audio y video
       finaliza este paso. Los archivos de audio y video generados previamente están todos separados. Para la grabación de audio, este paso se ha completado. Para el video, es necesario combinar audio y video en un solo archivo. Se puede entender que los dos archivos se fusionan en un solo archivo, y los dos tipos de datos se distinguen mediante una cierta regla, y los datos de audio y video se pueden obtener por separado cuando se usan, lo cual es un poco similar a la sensación de sincronización de audio y video en la página de edición. Puede utilizar la API de MediaMuxer proporcionada por Android o FFmpeg. Al usar MediaMuxer para fusionar audio y video, si el audio está en formato AAC, debe proporcionar una transmisión sin procesar AAC. Si usa FFmpeg, no lo necesita. Incluso puede usar comandos para completarlo. Después de fusionar, será un video en el sentido general. Es un trabajo que se puede publicar directamente. .

(7) Página de reproducción de obras locales

  La primera imagen es la interfaz de reproducción de audio y la segunda imagen es la interfaz de reproducción de video. La interfaz es simple, sin comparación con Sing Bar.

   Se ha trabajado mucho antes, y el resultado final es solo un archivo, uno es un archivo de audio, similar a .mp3, y el que se usa comúnmente es .m4a, etc .; el otro es un archivo de video, similar a .mp4, y el formato comúnmente usado es .flv Espere. Todo el mundo debería estar familiarizado con dichos archivos. El teléfono móvil puede reproducirlo con sus propias funciones, por lo que no es necesario escribir otro conjunto de reproductores cuando disfruta o comparte trabajos personales en SuperKtv. Puede utilizar el ya creado o incluso llamar al sistema directamente. API MediaPlayer está bien. En cuanto al uso del reproductor, se recomienda utilizar EXOPlayer bajo la plataforma Android. Este es un reproductor de Google de código abierto basado en MediaCodec. Soporta audio, video y sus formatos comunes, usa decodificación por hardware, y además viene con algunos controles básicos, el cual es altamente personalizable. SuperKtv es una función de reproducción de trabajo local basada en ExoPlayer, el efecto se muestra en la imagen de arriba y la experiencia también es muy buena.

Tres, resumen

   Este artículo se basa en la "Aplicación Sing Bar" como referencia, basada en la plataforma Android, resume la estrategia de implementación de la tecnología de audio y video móvil, adecuada para desarrolladores con cierta base de audio y video, se puede utilizar como referencia para soluciones técnicas, debido al tiempo y energía limitados, los detalles de implementación seguirán Se publica en forma de artículo. Si tiene alguna pregunta, deje un mensaje para intercambiar.

Indique la fuente.

Enlaces amistosos:
1. FFmpeg http://ffmpeg.org/ (Un artefacto imprescindible para audio y video)
2. Sox http://sox.sourceforge.net/ (Navaja suiza en la industria del audio)
3. SoundTouch https://sourceforge.net / projects / soundtouch / (tono, velocidad variable)
4. Dlib http://dlib.net/ (biblioteca de código abierto de reconocimiento de puntos de características faciales)
5. Oboe https: // GitHub / Oboe (interfaz de audio de baja latencia para la plataforma Android)

Supongo que te gusta

Origin blog.csdn.net/liuderong0/article/details/109172929
Recomendado
Clasificación