FMUSER ¡Transmite video y audio sin cables más fácilmente!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikáans
sq.fmuser.org -> albanés
ar.fmuser.org -> árabe
hy.fmuser.org -> Armenio
az.fmuser.org -> azerbaiyano
eu.fmuser.org -> Vasco
be.fmuser.org -> bielorruso
bg.fmuser.org -> Bulgaria
ca.fmuser.org -> catalán
zh-CN.fmuser.org -> chino (simplificado)
zh-TW.fmuser.org -> Chino (tradicional)
hr.fmuser.org -> croata
cs.fmuser.org -> checo
da.fmuser.org -> danés
nl.fmuser.org -> Holandés
et.fmuser.org -> estonio
tl.fmuser.org -> filipino
fi.fmuser.org -> finlandés
fr.fmuser.org -> Francés
gl.fmuser.org -> gallego
ka.fmuser.org -> georgiano
de.fmuser.org -> alemán
el.fmuser.org -> Griego
ht.fmuser.org -> criollo haitiano
iw.fmuser.org -> hebreo
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> islandés
id.fmuser.org -> indonesio
ga.fmuser.org -> irlandés
it.fmuser.org -> Italiano
ja.fmuser.org -> japonés
ko.fmuser.org -> coreano
lv.fmuser.org -> letón
lt.fmuser.org -> Lituania
mk.fmuser.org -> macedonio
ms.fmuser.org -> malayo
mt.fmuser.org -> maltés
no.fmuser.org -> Noruega
fa.fmuser.org -> persa
pl.fmuser.org -> polaco
pt.fmuser.org -> portugués
ro.fmuser.org -> Rumano
ru.fmuser.org -> ruso
sr.fmuser.org -> serbio
sk.fmuser.org -> eslovaco
sl.fmuser.org -> Eslovenia
es.fmuser.org -> español
sw.fmuser.org -> Swahili
sv.fmuser.org -> sueco
th.fmuser.org -> Tailandés
tr.fmuser.org -> turco
uk.fmuser.org -> ucraniano
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamita
cy.fmuser.org -> galés
yi.fmuser.org -> Yiddish
3. colección
La adquisición incluye principalmente dos aspectos: adquisición de video y adquisición de audio. El video es recopilado por la cámara, lo que implica el funcionamiento relevante de la cámara y la configuración de parámetros de la cámara. Debido a las diferencias en las cámaras de varios fabricantes de teléfonos móviles, existen algunas trampas a este respecto, que se describirán en el artículo sobre la cámara. El audio se recopila a través de un micrófono. Los micrófonos de diferentes teléfonos móviles admiten diferentes velocidades de muestreo de audio y, a veces, es necesario cancelar el eco del audio para admitir la función del micrófono.
Puntos clave de la tecnología de captura de video:
Compruebe si se puede utilizar la cámara;
La imagen capturada por la cámara es horizontal y la imagen capturada debe girarse hasta cierto punto antes de mostrarse;
Hay una serie de tamaños de imagen para elegir cuando la cámara captura. Cuando el tamaño de la imagen capturada no coincide con el tamaño de la pantalla del teléfono móvil, se requiere un procesamiento especial;
La cámara del teléfono Android tiene una serie de estados y el funcionamiento correspondiente de la cámara debe estar en el estado correcto;
Muchos parámetros de la cámara del teléfono Android tienen problemas de compatibilidad, y estos problemas de compatibilidad deben tratarse mejor.
Puntos clave de la tecnología de captura de audio:
Compruebe si se puede utilizar el micrófono;
Necesidad de detectar la compatibilidad del teléfono móvil con una determinada frecuencia de muestreo de audio;
En algunos casos, es necesario realizar un procesamiento de cancelación de eco en el audio;
Establezca el tamaño de búfer correcto durante la captura de audio.
Nota: Habrá un artículo especial sobre la colección más adelante.
4. procesamiento
Procesamiento de video
La belleza es ahora casi una configuración estándar del software de transmisión en vivo de teléfonos móviles. Después del embellecimiento, el anfitrión tiene una apariencia más alta y es más atractivo para los fanáticos. También hay algunas aplicaciones de transmisión en vivo de Android que pueden reconocer la cara del anfitrión y agregar animaciones divertidas. Efectos especiales, a veces también necesitamos agregar una marca de agua al video.
De hecho, el embellecimiento de videos y la adición de efectos especiales se procesan a través de OpenGL. Existe GLSurfaceView en Android, que es similar a SurfaceView, pero se puede renderizar con Renderer. La textura se puede generar a través de OpenGL, SurfaceTexture se puede generar a través del Id de la textura, y SurfaceTexture se puede entregar a la cámara, y finalmente la pantalla de vista previa de la cámara y OpenGL se conectan a través de la textura, de modo que se pueden realizar una serie de operaciones a través de OpenGL .
Todo el proceso de embellecimiento no es más que generar una nueva textura a través de la tecnología FBO en OpenGL basada en la textura previsualizada por la Cámara, y luego usar la nueva textura para dibujar en el onDrawFrame () en el Renderer. Agregar una marca de agua es convertir primero una imagen en una textura y luego usar OpenGL para dibujar. Agregar efectos especiales de colgante dinámico es más complicado. Primero, es necesario realizar un análisis algorítmico para identificar las partes correspondientes del rostro humano en función de la imagen de vista previa actual, y luego dibujar las imágenes correspondientes en cada parte correspondiente. La realización de todo el proceso es algo difícil.
La siguiente figura es un diagrama de flujo de todo el proceso de belleza:
Proceso de belleza
La siguiente imagen muestra muy bien la belleza y los efectos de animación.
Beauty
Efectos de animación y marcas de agua.
Nota: Habrá un artículo especial sobre OpenGL y la realización de todo el proceso.
Procesamiento de audio
En algunos casos, el anfitrión necesita agregar algunos sonidos adicionales para aumentar la atmósfera de transmisión en vivo, como aplausos, etc. Una forma de lidiar con esto es reproducir el sonido adicional directamente, de modo que el micrófono lo recopile y luego lo grabe juntos, pero este tipo de procesamiento no funcionará cuando el presentador use auriculares o necesite realizar un procesamiento de cancelación de eco en el sonido. . Dado que la función correspondiente no se ha agregado a nuestro proyecto, no hay experiencia relevante para compartir por el momento, podemos agregar esta función más adelante y luego compartirla con usted.
5. codificación
A través de la cámara y el micrófono, podemos recopilar los datos de audio y video correspondientes, pero estos son datos sin procesar en un formato fijo. En términos generales, la cámara recopila fotograma a fotograma y el micrófono recopila datos de audio PCM. Si estos datos se envían directamente, la cantidad de datos suele ser muy grande, lo que genera una gran pérdida de ancho de banda, por lo que a menudo es necesario codificar el video y el audio antes de enviarlos.
Codificacion de video
1. Codificación predictiva
Como todos sabemos, una imagen se compone de muchos de los llamados píxeles. Una gran cantidad de estadísticas muestran que existe una fuerte correlación entre los píxeles de la misma imagen. Cuanto menor sea la distancia entre dos píxeles, mayor será la correlación. En términos sencillos, cuanto más cercanos están los valores de los dos píxeles. Por lo tanto, las personas pueden usar esta correlación entre píxeles para realizar la codificación de compresión. Este método de compresión se denomina codificación de predicción intracuadro. No solo eso, la correlación entre cuadros adyacentes es generalmente más fuerte que la correlación entre píxeles dentro de un cuadro, y la relación de compresión también es mayor. Puede verse que utilizando la correlación entre píxeles (intracuadro) y la correlación entre cuadros, es decir, encontrando el píxel de referencia correspondiente o el cuadro de referencia como valor predicho, se puede realizar la codificación de compresión de vídeo.
2. Transformar la codificación
Una gran cantidad de estadísticas muestran que la señal de video contiene los componentes de baja frecuencia y CC que consumen más energía, es decir, la parte plana de la imagen, y una pequeña cantidad de componentes de alta frecuencia, es decir, los detalles del imagen. Por tanto, se puede utilizar otro método para la codificación de vídeo. Después de que la imagen sufre una cierta transformación matemática, se obtiene la imagen en el dominio transformado (como se muestra en la figura), donde uyv son las coordenadas de frecuencia espacial respectivamente.
Transformar codificación
3. Codificación basada en formas de onda
La codificación basada en formas de onda utiliza un método de codificación híbrido basado en bloques que combina codificación predictiva y codificación por transformación. Para reducir la complejidad de la codificación y hacer que la operación de codificación de video sea más fácil de realizar, cuando utilice el método de codificación híbrida, primero divida una imagen en bloques de tamaño fijo, como el bloque 8 × 8 (es decir, 8 filas por bloque, 8 píxeles por fila), Bloque 16 × 16 (16 líneas por bloque, 16 píxeles por línea) y así sucesivamente, y luego comprima y codifique el bloque.
Desde que ITU-T lanzó el primer estándar de codificación de video digital-H.261 en 1989, ha lanzado sucesivamente estándares de codificación de video como H.263 y estándares de terminales multimedia como H.320 y H.323. El Moving Picture Experts Group (MPEG) bajo ISO ha definido MPEG-1, MPEG-2, MPEG-4 y otros estándares internacionales de codificación de entretenimiento y compresión de TV digital.
En marzo de 2003, ITU-T promulgó el estándar de codificación de video H.264. No solo mejora significativamente la compresión de video en comparación con los estándares anteriores, sino que también tiene una buena afinidad de red, especialmente para Internet IP, red móvil inalámbrica y otro rendimiento de transmisión de video de red que es fácil de error, fácil de bloquear y no fácil de garantizar QoS. . . Todas estas codificaciones de video utilizan codificación híbrida basada en bloques, que son codificación basada en formas de onda.
4. Codificación basada en contenido
También existe una tecnología de codificación basada en contenido, donde el fotograma de video se divide primero en regiones correspondientes a diferentes objetos y luego se codifica. Específicamente, codifica la forma, el movimiento y la textura de diferentes objetos. En el caso más simple, se usa un contorno bidimensional para describir la forma de un objeto, se usa un vector de movimiento para describir su estado de movimiento y una textura se describe mediante una forma de onda de color.
Cuando se conocen los tipos de objetos de la secuencia de vídeo, se puede utilizar la codificación basada en el conocimiento o en el modelo. Por ejemplo, para rostros humanos, se han desarrollado algunos esquemas de alambre predefinidos para codificar las características del rostro. En este momento, la eficiencia de la codificación es muy alta y solo se necesitan unos pocos bits para describir sus características. Para las expresiones faciales (como enojado, feliz, etc.), los posibles comportamientos se pueden codificar mediante semántica. Dado que el número de posibles comportamientos de un objeto es muy pequeño, se puede obtener una eficiencia de codificación muy alta.
El método de codificación adoptado por MPEG-4 es un método de codificación híbrido basado en bloques y un método de codificación basado en contenido.
5. Tejido suave y duro
Hay dos formas de implementar la codificación de video en la plataforma Android, una es la codificación suave y la otra es la codificación dura. Para la edición suave, a menudo se basa en la CPU y utiliza la potencia informática de la CPU para realizar la codificación. Por ejemplo, podemos descargar la biblioteca de codificación x264, escribir la interfaz jni relevante y luego pasar los datos de imagen correspondientes. Después de ser procesada por la biblioteca x264, la imagen original se convierte en un video en formato h264.
El código duro utiliza el MediaCodec proporcionado por el propio Android. Para utilizar MediaCodec, debe pasar los datos correspondientes. Estos datos pueden ser información de imagen yuv o una superficie. Generalmente se recomienda Surface, que es más eficiente. Surface usa directamente búferes de datos de video locales sin mapearlos ni copiarlos en ByteBuffers; por lo tanto, este enfoque será más eficiente. Cuando usa Surface, generalmente no puede acceder directamente a los datos de video originales, pero puede usar la clase ImageReader para acceder a cuadros de video decodificados (u originales) no confiables. Esto puede ser aún más eficaz que usar ByteBuffers, porque algunos búferes locales se pueden asignar a ByteBuffers directos. Al usar el modo ByteBuffer, puede usar la clase Image y los métodos getInput / OutputImage (int) para acceder al marco de datos de video original.
Nota: El siguiente artículo describirá específicamente cómo realizar la codificación de video
Codificación de audio
AudioRecord se puede utilizar en Android para grabar sonido, y el sonido grabado es sonido PCM. Si desea expresar el sonido en lenguaje informático, debe digitalizar el sonido. La forma más común de digitalizar el sonido es a través de la modulación de código de pulso (PCM). El sonido pasa por el micrófono y se convierte en una serie de señales de cambios de voltaje. La forma de convertir dicha señal en formato PCM es utilizar tres parámetros para representar el sonido. Son: el número de canales, el número de bits de muestreo y la frecuencia de muestreo.
1. Frecuencia de muestreo
Es decir, la frecuencia de muestreo, que se refiere al número de veces que se obtiene una muestra de sonido por segundo. Cuanto mayor sea la frecuencia de muestreo, mejor será la calidad del sonido y más realista será la reproducción del sonido, pero al mismo tiempo ocupa más recursos. Debido a la resolución limitada del oído humano, no se puede distinguir una frecuencia demasiado alta. Hay 22 KHz, 44 KHz y otros niveles en tarjetas de sonido de 16 bits. Entre ellos, 22 KHz es equivalente a la calidad de sonido de una transmisión de FM ordinaria, y 44 KHz es equivalente a la calidad de sonido de un CD. La frecuencia de muestreo común actual no supera los 48 KHz.
2. Número de bits de muestreo
Es decir, el valor de muestreo o el valor de muestreo (es decir, se cuantifica la amplitud de la muestra de muestreo). Es un parámetro que se utiliza para medir la fluctuación del sonido, y también se puede decir que es la resolución de la tarjeta de sonido. Cuanto mayor sea su valor, mayor será la resolución y la potencia del sonido.
En la computadora, el número de bits de muestreo es generalmente de 8 bits y 16 bits, pero tenga en cuenta que 8 bits no significa dividir la ordenada en 8 partes, sino dividirla en 2 a la octava potencia, que es 8 partes; lo mismo es cierto para 256 bits. Divide la ordenada en 16 elevado a 2 de 16.
3. Número de canales
Es fácil entender que hay monofónicos y estereofónicos. El sonido monofónico solo puede ser producido por un altavoz (algunos también se procesan en dos altavoces para emitir el mismo sonido de canal), y el pcm estéreo puede producir dos altavoces Ambos sonidos (generalmente hay una división del trabajo entre los canales izquierdo y derecho), para que puedas sentir más el efecto espacial.
Entonces, ahora podemos obtener la fórmula para la capacidad del archivo pcm:
Capacidad de almacenamiento = (frecuencia de muestreo ✖️ número de bits de muestreo ✖️ canal ✖️ tiempo) ➗ 8 (unidad: número de bytes)
Si todo el audio se transmite en formato PCM, el ancho de banda ocupado es relativamente grande, por lo que el audio debe codificarse antes de la transmisión.
Ya existen algunos formatos de sonido ampliamente utilizados, como wav, MIDI, MP3, WMA, AAC, Ogg, etc. En comparación con el formato pcm, estos formatos comprimen los datos de sonido, lo que puede reducir el ancho de banda de transmisión.
La codificación de audio también se puede dividir en dos tipos: codificación flexible y codificación fija. Para la edición suave, descargue la biblioteca de codificación correspondiente, escriba el jni correspondiente y luego pase los datos para la codificación. El código duro utiliza el MediaCodec proporcionado por el propio Android.
Nota: El siguiente artículo describirá específicamente cómo realizar la codificación de audio.
6, embalaje
El video y el audio deben definir el formato correspondiente durante el proceso de transmisión, de modo que se pueda analizar correctamente cuando se transmita al extremo opuesto.
1. HTTP-FLV
En la era de la Web 2.0, los tipos de sitios web más populares son, naturalmente, Youtube desde el extranjero, los sitios web de Youku y Tudou en China. Se puede decir que el contenido de video proporcionado por dichos sitios tiene sus propios méritos, pero todos usan Flash como soporte de reproducción de video sin excepción. La base técnica que respalda estos sitios de videos es Flash Video (FLV). FLV es un nuevo formato de transmisión de video multimedia, que utiliza la plataforma Flash Player ampliamente utilizada en las páginas web para integrar el video en la animación Flash. En otras palabras, siempre que los visitantes del sitio web puedan ver animaciones Flash, naturalmente pueden ver videos en formato FLV sin la necesidad de instalar complementos de video adicionales. El uso de videos FLV aporta una gran comodidad a la difusión de videos.
HTTP-FLV encapsula los datos de audio y video en FLV y luego los transmite al cliente a través del protocolo HTTP. Como cargador, solo es necesario transmitir al servidor el video y el audio en formato FLV.
En términos generales, el video y el audio en formato FLV generalmente usan el formato h264 para el video, y el audio generalmente usa el formato AAC-LC.
El formato FLV es primero transmitir la información del encabezado FLV, luego transmitir los metadatos con los parámetros de video y audio (metadatos), luego transmitir la información de los parámetros de video y audio, y luego transmitir los datos de video y audio.
Nota: El siguiente artículo describirá FLV en detalle
2.RTMP
RTMP es el acrónimo de Real Time Messaging Protocol. El protocolo se basa en TCP y es un grupo de protocolos, que incluye el protocolo básico RTMP y RTMPT / RTMPS / RTMPE y muchas otras variantes. RTMP es un protocolo de red diseñado para la comunicación de datos en tiempo real. Se utiliza principalmente para la comunicación de audio, video y datos entre la plataforma Flash / AIR y un servidor multimedia / interactivo de transmisión que admite el protocolo RTMP.
El protocolo RTMP es un protocolo de transmisión en tiempo real lanzado por Adobe, que se utiliza principalmente para la transmisión en tiempo real de secuencias de audio y video basadas en el formato flv. Después de obtener los datos de audio y video codificados, primero se requiere el empaquetado FLV, luego se empaqueta en formato rtmp y luego se transmite.
Para usar el formato RTMP para la transmisión, primero debe conectarse al servidor, luego crear una transmisión, luego publicar la transmisión y luego transmitir los datos de audio y video correspondientes. Toda la transmisión está definida por mensajes, rtmp define varias formas de mensajes, y para enviar bien los mensajes, los mensajes se dividen en bloques, lo que hace que todo el protocolo sea más complicado.
Nota: los artículos posteriores describirán RTMP en detalle
También hay varias otras formas de protocolos, como RTP, etc. Los principios generales son similares, por lo que no los explicaré uno por uno.
7. procesamiento de red deficiente
El video y el audio se pueden enviar a tiempo bajo una buena red, sin causar la acumulación de datos de video y audio localmente, el efecto de transmisión en vivo es suave y el retraso es pequeño. En un entorno de red defectuoso, si los datos de audio y video no se pueden enviar, necesitamos procesar los datos de audio y video. En general, existen cuatro métodos de procesamiento para datos de video y audio en un entorno de red deficiente: diseño de búfer, detección de red, procesamiento de pérdida de cuadros y procesamiento de reducción de velocidad de bits.
1. Diseño de búfer
Los datos de video y audio se transfieren al búfer, y el remitente obtiene los datos del búfer y los envía, formando así un modo productor-consumidor asíncrono. El productor solo necesita enviar los datos de audio y video recopilados y codificados al búfer, y el consumidor es responsable de sacar los datos del búfer y enviarlos.
Búfer de video y audio
En la figura anterior solo se muestra el cuadro de video y, obviamente, hay cuadros de audio correspondientes en el interior. Para construir un modelo productor-consumidor asincrónico, Java ha proporcionado una buena clase. Dado que la pérdida de fotogramas, la inserción, la eliminación, etc. deben procesarse más tarde, es obvio que LinkedBlockingQueue es una muy buena opción.
2. Detección de red
Un proceso importante en el proceso de procesamiento deficiente de la red es la detección de la red. Cuando la red se vuelve pobre, puede detectarse rápidamente y luego procesarse en consecuencia. Esto hará que la respuesta de la red sea más sensible y el efecto será mucho mejor.
Calculamos los datos en el búfer de entrada por segundo y los datos enviados en tiempo real. Si los datos enviados son más pequeños que los datos en el búfer de entrada, entonces el ancho de banda de la red no es bueno. En este momento, los datos en el búfer seguirán aumentando. Activar el mecanismo correspondiente.
3. Procesamiento de fotogramas sueltos
Cuando se detecta degradación de la red, la pérdida de tramas es un buen mecanismo de respuesta. Una vez codificado el video, hay fotogramas clave y fotogramas no clave. El cuadro clave es una imagen completa y el cuadro no clave describe el cambio relativo de la imagen.
La estrategia de caída de tramas se puede definir por sí misma. Una cosa a tener en cuenta es: si desea eliminar fotogramas P (fotogramas no clave), debe eliminar todos los fotogramas no clave entre los dos fotogramas clave, de lo contrario, se producirán mosaicos. El diseño de la estrategia de pérdida de fotogramas varía según las necesidades y puede diseñarlo usted mismo.
4. Tasa de reducción de código
En Android, si se utiliza codificación rígida para codificar, en un entorno de red deficiente, podemos cambiar la tasa de bits de la codificación rígida en tiempo real para que la transmisión en vivo sea más fluida. Cuando se detecta que el entorno de red es deficiente, también podemos reducir la tasa de bits de video y audio mientras descartamos cuadros. Cuando la versión sdk de Android es mayor o igual a 19, puede pasar parámetros a MediaCodec para cambiar la velocidad de bits de los datos del codificador codificado.
Bundle bitrate = new Bundle (); bitrate.putInt (MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, bps * 1024);
mMediaCodec.setParameters (tasa de bits);
8. enviar
Después de varios procesamientos, los datos deben enviarse finalmente, este paso es relativamente simple. Ya sea HTTP-FLV o RTMP, usamos TCP para establecer una conexión. Antes de la transmisión en vivo, debe conectarse al servidor a través del Socket para verificar si puede conectarse al servidor. Después de la conexión, use este Socket para enviar datos al servidor y cierre el Socket después de que se envíen los datos.
|
Ingrese el correo electrónico para recibir una sorpresa
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikáans
sq.fmuser.org -> albanés
ar.fmuser.org -> árabe
hy.fmuser.org -> Armenio
az.fmuser.org -> azerbaiyano
eu.fmuser.org -> Vasco
be.fmuser.org -> bielorruso
bg.fmuser.org -> Bulgaria
ca.fmuser.org -> catalán
zh-CN.fmuser.org -> chino (simplificado)
zh-TW.fmuser.org -> Chino (tradicional)
hr.fmuser.org -> croata
cs.fmuser.org -> checo
da.fmuser.org -> danés
nl.fmuser.org -> Holandés
et.fmuser.org -> estonio
tl.fmuser.org -> filipino
fi.fmuser.org -> finlandés
fr.fmuser.org -> Francés
gl.fmuser.org -> gallego
ka.fmuser.org -> georgiano
de.fmuser.org -> alemán
el.fmuser.org -> Griego
ht.fmuser.org -> criollo haitiano
iw.fmuser.org -> hebreo
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> islandés
id.fmuser.org -> indonesio
ga.fmuser.org -> irlandés
it.fmuser.org -> Italiano
ja.fmuser.org -> japonés
ko.fmuser.org -> coreano
lv.fmuser.org -> letón
lt.fmuser.org -> Lituania
mk.fmuser.org -> macedonio
ms.fmuser.org -> malayo
mt.fmuser.org -> maltés
no.fmuser.org -> Noruega
fa.fmuser.org -> persa
pl.fmuser.org -> polaco
pt.fmuser.org -> portugués
ro.fmuser.org -> Rumano
ru.fmuser.org -> ruso
sr.fmuser.org -> serbio
sk.fmuser.org -> eslovaco
sl.fmuser.org -> Eslovenia
es.fmuser.org -> español
sw.fmuser.org -> Swahili
sv.fmuser.org -> sueco
th.fmuser.org -> Tailandés
tr.fmuser.org -> turco
uk.fmuser.org -> ucraniano
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamita
cy.fmuser.org -> galés
yi.fmuser.org -> Yiddish
FMUSER ¡Transmite video y audio sin cables más fácilmente!
Contacto
Dirección:
Habitación No.305 Edificio HuiLan No.273 Huanpu Road Guangzhou China 510620
Categorías
Newsletter