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
Hace unos días, dediqué un tiempo a estudiar la tecnología HTTP live streaming (HLS) e implementar un codificador HLS, hlsliveencoder, escrito en C ++. Su función es capturar la cámara y el micrófono, la codificación de video H.264 en tiempo real y la codificación de audio aac, y de acuerdo con la especificación del protocolo HLS, generar un archivo TS estándar segmentado y un archivo de índice m3u8. A través de mi hlsliveencoder y el servidor HTTP de terceros (como nginx), realizamos con éxito la transmisión en vivo de HTTP y pasamos la prueba en el iPhone. Escribiré algunas de las ganancias aquí.
1. Análisis de la tecnología HLS
La transmisión en vivo HTTP (HLS) es un protocolo de transporte de medios de transmisión basado en HTTP implementado por Apple Inc., que puede realizar transmisión de medios en vivo y bajo demanda. Se utiliza principalmente en el sistema IOS para proporcionar soluciones de audio y video en vivo y bajo demanda para dispositivos IOS (como iPhone y iPad). HLS bajo demanda es básicamente un HTTP segmentado común bajo demanda. La diferencia es que sus segmentos son muy pequeños. Para realizar HLS a pedido, la clave es segmentar los archivos multimedia. En la actualidad, existen muchas herramientas de código abierto que se pueden utilizar. No lo discutiré aquí, solo hablaré sobre la tecnología de transmisión en vivo de HLS.
En comparación con los protocolos de transmisión en vivo comunes, como el protocolo RTMP, el protocolo RTSP, el protocolo MMS, etc., la mayor diferencia de la transmisión en vivo de HLS es que el cliente en vivo no obtiene un flujo de datos completo. El protocolo HLS almacena el flujo de datos en vivo como archivos multimedia continuos, a corto plazo y largos (formato mpeg-ts) en el lado del servidor, mientras que el lado del cliente descarga y reproduce continuamente estos archivos pequeños, porque el lado del servidor siempre genera nuevos archivos pequeños desde los últimos datos en vivo, de modo que el lado del cliente solo necesita reproducir los archivos obtenidos del servidor para realizar el en vivo. Se puede ver que HLS básicamente realiza transmisiones en vivo mediante tecnología VOD. Debido a que los datos se transmiten a través del protocolo HTTP, no es necesario considerar el problema del firewall o proxy, y el tiempo de segmentación de archivos es muy corto. El cliente puede seleccionar y cambiar rápidamente la velocidad del código para adaptarse a la reproducción en diferentes condiciones de ancho de banda. Sin embargo, debido a las características técnicas de HLS, su retraso es siempre mayor que el del protocolo de transmisión en vivo normal.
De acuerdo con el entendimiento anterior, para lograr la transmisión HTTP en vivo en vivo, debemos estudiar e implementar las siguientes tecnologías clave.
(1) Recopile los datos de la fuente de video y la fuente de audio
(2) Los datos originales están codificados por H264 y AAC
(3) Los datos de video y audio se empaquetan como paquetes mpeg-ts
(4) Estrategia de generación de segmentación HLS y archivo de índice m3u8
2. Protocolo de transporte HTTP
Entre ellos, el primer y segundo punto los he mencionado en mi artículo anterior, y el último punto es que podemos usar el servidor HTTP existente, por lo que la implementación del tercer y cuarto punto es la clave.
(1) Marco e implementación del programa
A través del análisis anterior, la lógica y el proceso del codificador en vivo HLS son básicamente claros: inicie el hilo de codificación de audio y video respectivamente, realice la adquisición de audio y video a través de la tecnología DirectShow (u otra) y luego llame a libx264 y libfaac respectivamente para video y codificación de audio. Después de que los dos subprocesos de codificación codifican los datos de audio y video en tiempo real, los almacenan en un archivo de segmento de formato mpeg-ts de acuerdo con la estrategia de partición personalizada. Cuando se almacena un archivo de segmento, se actualiza el archivo de índice m3u8. Como se muestra en la siguiente figura:
En la figura anterior, después de recibir los datos de video y audio, hlsliveencoder primero debe determinar si la partición actual debe finalizar y crear una nueva partición para continuar con la generación continua de la partición TS. Cabe señalar que la nueva fragmentación debe comenzar desde el fotograma clave para evitar que el reproductor falle en la decodificación. El código central es el siguiente:
La interfaz de tsmuxer también es relativamente simple.
(2) Estrategia de generación del segmento HLS y m3u8
① Estrategia de segmentación
Básicamente, se recomienda dividir la estrategia de segmentación de HLS cada 10 segundos. Por supuesto, el tiempo específico debe marcarse de acuerdo con la duración real de la división.
En términos generales, por razones de caché y otras razones, las últimas tres direcciones de fragmentos se guardan en el archivo de índice y se actualizan en forma de "ventana deslizante".
② Introducción del archivo m3u8
M3u8 es el archivo de índice de transmisión en vivo HTTP. M3u8 se puede considerar como. Básicamente, el archivo en formato M3U, la diferencia es que el archivo m3u8 usa codificación de caracteres UTF-8.
Copiar código
# Encabezado del archivo Extm3u M3U, debe colocarse en la primera línea
# Número de serie del primer segmento TS de ext-x-media-sequence
# Ext-x-targetduration la duración máxima de cada segmento de TS
# ¿Ext-x-allow-cache permite caché?
#Fin del archivo m3u8 ext-x-endlist
#Extinf información adicional, la información de split ts, como duración, ancho de banda, etc.
|
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