2010-09-29 9 views
8

No sé demasiado sobre h.264, pero la cosa es que tengo este video en h.264 en un contenedor mp4 que me gustaría transmitir a través de UDP.Transmitiendo un video codificado con h.264 a través de UDP

Mi pregunta es simple, ¿hay alguna modificación que pueda hacer mientras codifico el video para que sea bastante tolerante con la pérdida de algunos paquetes "ligeros"?

Sé que el video comprimido generalmente tiene un fotograma clave cada N fotogramas y luego entre los que acaba de enviar los deltas. Me imagino que h.264 debería ser mucho más complejo que eso, por lo que podría no ser tan simple.

Para ser más precisos, he estado haciendo algunos experimentos y me di cuenta de que solo eliminando 1024 bytes de una secuencia de video, lo dejo completamente "no reproducible" desde el punto de la pérdida y continúa.

Lo que me gustaría es que tolere pérdidas de luz como esa, ¿es posible?

Gracias

Nelson

Respuesta

10

Depende de los datos que estamos perdiendo. Algunos datos en la secuencia H264 no son datos que se pueden perder. Por ejemplo, si su experimento en el que dejó 1024 bytes pasó a ser los primeros 1024 bytes que envió, entonces probablemente dejó caer su conjunto de parámetros de secuencia y conjunto de parámetros de imagen (SPS/PPS), que es básicamente la información que le dice al decodificador cómo interpretar la información entrante. Probablemente tampoco puedas simplemente dejar caer 1024 bytes aleatorios fuera de la transmisión; típicamente H264 está empaquetado para que ese tipo de cosas no suceda de todos modos.

Así que H264 contiene algunos pequeños datos que realmente no son "descartables"; muchos de los protocolos de transmisión como RTSP dejan esto en claro al afirmar específicamente que NO DEBERÍA enviar este tipo de información a través del canal de transporte con pérdida, sino en cambio durante el intercambio SDP (que ocurre a través de TCP).

En lo que respecta a la tolerancia a pérdidas, H264 tiene características que se supone que ayudan a la tolerancia de pérdida (ASO, FMO, etc.), pero en la práctica la mayoría de los codificadores no las admiten. Si puedes, usaría x264; su configuración de transmisión de baja latencia supuestamente funciona bien incluso con una pérdida de paquetes de hasta el 20% o más. Si su H264 ya está codificado, entonces no hay mucho por hacer. Tu video ya está codificado y tendrás que transmitirlo tal como está.

Cuestiones relacionadas