Audio y vídeo desarrollo -FFmpeg

  el desarrollo de audio y vídeo es un muy grandes y complejos temas, desarrollador, patear los neumáticos que, junto con un vistazo a OEIP (proyectos de código abierto) nuevos ejemplos.

  

    Puede abrir FLV, MP4 tipo de archivo y datos de audio y vídeo protocolo RTMP, reproductor de audio usando SDL.

  

    El archivo de medios de trigo / mixta recopilación de datos y sonido recopilación escrita y de vídeo o acuerdo RMTP.

Fotos atributos principales

  Consta de un formato de número de longitud / anchura / canal / pixel (U8 / U16 / F32), y la disposición del formato RGBA / YUV. En donde el canal del formato de píxel, como en OpenCV, CV_8UC1 / CV_8UC4, que muestra un formato de canal U8 cuatro canales. Formato están dispuestas, simplemente dividido en clase RGBA, como BGRA, BGR, R, que se utiliza generalmente para las texturas de juego, RGBA / BGR / R sí mismo representa un formato de canal media, la combinación RGBA32 trasera, RGBAF32 utiliza para representar canal en el formato de datos de píxeles. Y el tipo de YUV, se utiliza generalmente el tipo de medio, tales como la recogida de dispositivos, archivos de audio y vídeo, streaming de deslizamiento similar, parte del formato de dos YUV. En primer lugar, el número de píxeles correspondientes a los rayos UV, tales como YUV420, YUV422, YUV444, su mismo punto es un punto correspondiente a un píxel Y, diferencia se expresa como un YUV420 U / V que corresponde a cuatro píxeles, una UV 422 correspondiente a dos pixeles, UV444 UV indica un punto que corresponde a un píxel, el formato de datos de píxeles YUV es generalmente U8.

  Podemos comparar un formato común finalmente ocupar bytes de tamaño, como en el 1080P.

  • RGBA32 1920 * 1080 * 4 = 8294400 4 en el que cada píxel incluye cuatro canales RGBA.
  • YUV420 1920 * 1080 + 980 * 540 * 2 frente al tamaño ocupado por Y, seguido de tamaño ocupación UV.
  • YUV422 1920 * 1080 + 980 * 1080 * 2 Y está ocupada por el tamaño de la parte delantera, seguido por tamaño ocupación UV
  • YUV444 1920 * 1080 * 3 YUV cada píxel de una de tres canales.

  El segundo formato es ordenados, se puede subdividir como YUV420 YUV420I, YUV420P, yuv420sp (NV12) , simplemente, P es un sufijo que muestra tres YUV almacena por separado, e Y es un SP por separado de, UV entrelazada, y yo aún más simple, YUV entrelazada, simplemente, y arreglo similar formato RGBA.
YUV420P / YUV422P generalmente se utiliza para empujar y tirar en el archivo de vídeo y streaming de, creo, porque el brillo Y para representar la parte más sensible del ojo humano, la televisión en blanco y negro temprana solamente Y todo el mundo puede ver, este formato es compatible con la más conveniente, directamente línea de descarte UV, Y / U / V puede no ser contiguos en la distribución de la memoria. En donde YUV420I / YUV422I intercalador dispositivo de recogida se utiliza generalmente, la memoria de forma continua, para facilitar el procesamiento, yuv420sp (NV12) dispositivo también la recogida de todo esto en general, este formato simple, el uso de sólo una conveniente Y, el segundo es UV e y puede ser uniforme en anchura, y luego alinear la parte posterior, YUV es una unidad, la memoria también es convenientemente de forma continua.

propiedades básicas de audio son las siguientes

  Frecuencia de muestreo: el oído humano para que oiga como la frecuencia más alta es de 22 kHz, tal que reproduce completamente la frecuencia, la frecuencia de muestreo es la frecuencia requerida * 2, por lo que, en general, es común 44100 frecuencia de muestreo.

  Número de canales: mono común, de dos canales, también hay canales más inusuales.

  Formato de los datos: Por lo general S16 (16 bits integración firmado), F32 (de 32 bits en coma flotante), el otro no se utiliza como U8, D64, estos van dos decibelios representado por un pequeño, demasiado grande.

  Y un tipo de imagen de la representación tiene una pluralidad de canales P (plano), I (de intercalación), de manera similar, los datos de audio se recoge típicamente I, transmisión P, en artículos OEIP, se transforman en formato apropiado generalmente mono S16, no hay ninguna necesidad de gestionar una P o I.

El concepto básico del desarrollo de audio y vídeo

  Con un conocimiento básico de lo anterior, vamos a saber algunos conceptos (Aquí están algunos de mis conocimientos básicos, si no está mal, la bienvenida a señalar).

  Codificación: la compresión de datos de audio y el vídeo original, simplemente, el tamaño 1080PYUV420 1920 * 1080 * 3/2 = 3.110.400 bytes, 1 segundo, entonces no hay casi 25 marcos 78M. se codifica vídeo como YUV-> H264, Audio PCM-> procedimiento de CAC. En FFmpeg, un proceso similar es AVFrame-> AVPacket

  Decodificación: Los datos de audio y vídeo comprimido se convierte en el audio original y el vídeo, H264-> YUV, ACC-> Proceso de PCM. En el FFmpeg es AVPacket-> AVFrame.

  En la codificación y decodificación, la imagen por trama depende del tamaño original de la composición original tamaño de la imagen de acuerdo con la longitud y la anchura, y la clasificación del formato de píxel, y el canal de audio por trama, el número de cada punto de muestreo se fija para un determinado codec tales como AAC 1024 (también hay especial 2048 caso), MP3 1152, el campo correspondiente indica AVFrame.nb_sampes, AVCodecContext.frame_size en. tal cantidad U16 de doble canal por trama, los datos de la AAC en 2 * sizeof (U16) * 1024. determina la velocidad de codificación y la calidad , en circunstancias normales, la calidad precio es buena, pero el archivo resultante o de red, como la ocupación, la tasa de presentación en línea derecha, baja tasa de uso general 4M 1080P, se utiliza la línea 1 M, pero la imagen puede moverse cuando para pegar, y control de la frecuencia también tienen diferentes estrategias de control, elegir su propia estrategia de control basado en la demanda, esta parte de la Internet tiene una explicación detallada.

  archivo multimedia: FLV / MP4 estos formatos de medios diferentes que codifican la información almacenada en diferentes maneras, en diferentes formatos de medios admite diferentes formatos de codificación, la mayoría de los formatos de medios compatibles con H264 / acc codificación de la información, por lo que este es más comúnmente utilizado dos formatos de codificación .

  Multimedia de Protocolo: RTMP / RTSP éstos, la información sobre la red de transmisión de archivos multimedia y paquetes de control.

  De audio y video corrientes: la corriente en una corriente de audio, flujo de vídeo, flujo de subtítulos, etc. Estos, en el que el archivo de medios puede incluir uno o más de audio y vídeo corrientes, cada flujo de vídeo es los mismos atributos (longitud y anchura, formatos de píxeles, etc.) datos codificados en la corriente de vídeo original.

  Multiplexación: por ejemplo, a un flujo de audio con una secuencia de vídeo en un archivo de medios es multiplexada.

  Demultiplexar: Igual que el anterior, la descomposición de un archivo multimedia correspondiente al flujo de corriente y de audio y vídeo.

objetivo principal de FFmpeg

  AVFormatContext: protocolo multimedia o un archivo multimedia, y si el acuerdo resolvería un archivo multimedia de información contenida en el acuerdo, el director se encuentra ahora de lectura / escritura de archivo, de lectura / escritura de la cabeza y el final de los archivos de método de archivo y así sucesivamente. Usted puede poner un objeto pensado para ser un archivo multimedia.

  Avcodec: códec, la codificación y decodificación, o una nota con el mismo codecId, pero objeto diferente que contiene los principales punteros de función, dice cómo el paquete de paquetes> marco marco> /.

  AVCodecContext: entorno de códec, en términos simples, avcodec decir cómo códec, esto es para decirle la configuración de atributos apropiados, tales como el vídeo correspondiente, la longitud y anchura, así como el correspondiente conjunto codificado contiene cuadros B, GOP es cuánto de todo esto, se puede entender, si suponemos que avcodec y AVCodecContext es una clase, que es equivalente a conjunto avcodec de métodos, que es equivalente a conjunto AVCodecContext de variables.

  AVStream: los medios de comunicación generales del archivo comprende al menos un flujo de audio o un flujo de vídeo, la multiplexación / demultiplexación una relación nexo entre códec. Se puede entender información de la lista AVStream incluye audio y vídeo de codificación. AVStream también contienen información de códec correspondiente AVCodecContext contenía detrás habla tanto información de multiplexación y demultiplexación a que a partir de esa copia.

  AVFrame: el audio original y la información de vídeo, que comprende una datos de longitud fija.

  AVPacket: información de vídeo de codificación de audio y, que comprende un conjunto de datos de longitud variable.

análisis API común FFmpeg

  La lectura de un archivo de acción apropiada medios para resolver la API.

  avformat_open_input abierta AVFormatContext acuerdo con los archivos de medios de comunicación / dirección de protocolo.

  avformat_find_stream_info encontrar audio y vídeo en el índice correspondiente AVFormatContext.

  avcodec_find_decoder abrir el flujo de audio y de vídeo correspondiente decodificador de acuerdo con el índice.

  avcodec_alloc_context3 generar decodificador El entorno decodificador.

  corriente avcodec_parameters_to_context parámetros descodificados (longitud y anchura de la imagen, audio, y las propiedades básicas de la frame_size) copiados en el entorno de decodificador.

  avcodec_open2 ambiente decodificador abierta.

  av_read_frame cada AVPacket lee desde el AVFormatContext archivo multimedia.

  Las índice corresponde AVPacket avcodec_send_packet, emiten un decodificador correspondiente para decodificar la corriente.

  avcodec_receive_frame obtener datos en bruto descodificador descodifica, como en el flujo de vídeo, cuadros P porque tramas B relación, uno no necesariamente obtener un AVPacket AVFrame, cuadros P antes y después de tal consideración, puede ser el tiempo después de que varios paquetes, lee las tramas de datos y mucho más, por lo avcodec_send_packet / avcodec_receive_frame redacción sería un caso así.

  operación de escritura correspondiente al archivo de medios con el API de análisis (modo no-IO):

  avformat_alloc_output_context2 genera de acuerdo a un formato que corresponde a la AVFormatContext, número fijo de formatos de datos son diferentes, tales como el formato FLV, flujo de audio base de tiempo y la secuencia de vídeo está milisegundos, traté de convertir este valor se puede cambiar más adelante de nuevo después de avformat_write_header.

  avcodec_find_encoder / avcodec_find_encoder_by_name elegir su codificador deseada.

  avcodec_alloc_context3 codificador seleccionado genera entorno codificador selección, diferente de la anterior proceso, en el que necesitamos para llenar su respectiva información, tal como la necesidad de conocer la longitud y anchura de la imagen de codificación, velocidad de bits, GOP y otros ajustes de decodificación.

  avcodec_open2 ambiente decodificador abierta.

  avformat_new_stream generar información de flujo de audio y vídeo, relleno correspondiente en el codificador correspondiente a AVFormatContext.

  avcodec_parameters_from_context copiar codificador conjunto de parámetros a una corriente.

  Resolución, y el protocolo de acuerdo de puntero avio_open, cómo leer y cabecera del protocolo de información de protocolo de escritura, el contenido del protocolo.

  avformat_write_header información de la cabecera de escritura.

  avcodec_send_frame el final de los datos comprimidos al codificador.

  Los datos a obtener avcodec_receive_packet codificación, decodificación y similares, cuadros P un marco imposible decidir un paquete, puede haber varias marco frontal, con el fin de obtener una serie de paquetes.

  av_interleaved_write_frame los datos de audio y de vídeo codificados en los archivos de medios cruzada de escritura

  av_write_trailer se haya completado la escritura, la parte de llenado del valor que se ha estimado a partir de todos los datos se escriben.

  También hay un caso de usar el modo de IO, se pueden utilizar los datos de imagen de fotogramas clave se escribe directamente en la IO audio, y luego lee los atributos de las correspondientes tramas de audio y vídeo de la corriente directamente traído directamente para la transmisión de vídeo longitud incierta y anchura, etc. .

  Las diferencias se pueden ver desde la API para leer y escribir, leer la información en el archivo de medios AVFormatContext todos tienen, para leer información del flujo de decodificación obtenida de la corriente, el decodificador se abre, lee cada paquete de la AVFormatContext, un decodificador para decodificar el paquete. Escribir el archivo de medios es generar la AVFormatContext un espacio en blanco, y luego abrir el codificador seleccionado, genera una corriente y, a continuación, escribe el flujo de datos por cuadro, los codifica codificador finalizados el uso de archivos.

  pit relacionadas, los archivos multimedia de imagen se utiliza generalmente en el formato P YUV, el bloque de almacenamiento de formato YUV, así como el concepto de la align correspondiente, por ejemplo, supongamos que está amplia 1080, pero en el bloque de YUV, Y es el ancho pueden 1088 (suponiendo que el uso de 32 se estableció a ras), en el que cada fila de datos en el índice cero acolchado 1080-1087, correspondiente a toda la imagen de tratamiento propuestas en mi tratamiento OEIP, datos de imagen OEIP al apretado todo el proceso GPU necesario los datos de hash, es necesario el uso de av_image_copy_to_buffer / procesan av_image_fill_arrays.

  se utiliza el formato P pit relacionada, archivos multimedia de audio multicanal, mientras que el equipo de captura y reproducción de audio para el formato de uso general I, por lo que el uso general del convertidor swr_convert, reproductor de audio usando la biblioteca SDL en unas pocas llamadas a la API en la línea, en esto no quiere decir que se puede ver el código de OEIP en el procesamiento, Winodws de captura de audio utilizan el WASAPI.

  concepto basado en el tiempo: el concepto de flujo de audio y vídeo tiene una base de tiempo, la, audio y video flv más importantes son (1, 1000), si se trata de mp4, video basado en el tiempo es (1,90000), situada generalmente de audio correspondiente tasa de muestreo. basado en el tiempo, puede entenderse simplemente como una segunda báscula, flv flujo de correspondencia es milisegundos, y flujo de video mp4 basado en el tiempo que corresponde a 1/90 de una milésima de segundo, ¿qué sentido, como su vídeo corresponde a 25 cuadros en formato FLV donde, por marco, separadas por 40 grupos de tiempo, y en el mp4, el separaron 360 de base de tiempo, cuando se codifica, necesitamos pts en frams / DTS / duración unidades de base de tiempo correspondientes, se señaló que la conversión en OEIP en todos nos dirigimos hacia fuera / transferencia relacionada con el usuario todo el tiempo en milisegundos, lo que convierte nuestro propio proceso interno.

  Por lo tanto, este OEIP , añadir archivos de medios / protocolos disponibles fuente de entrada y salida, de manera similar, aparecen fácilmente Unity3D / UE4 Lane, tales como archivos de medios de comunicación / presentación de contenidos en el protocolo para corresponder directamente Unity3D / UE4 carril Texture2D pantalla, o la Unity3D / UE4 en los datos Texture2D / RTT almacenados en el video, o empujar hacia fuera.

  Referencia:
  https://www.cnblogs.com/leisure_chn/category/1351812.html deja más que el desarrollo de FFmpeg

Supongo que te gusta

Origin www.cnblogs.com/zhouxin/p/12651304.html
Recomendado
Clasificación