2010-03-04 19 views
12

¿Cuál es el significado de los bytes decodificados de Base64 en sprop-parameter-sets en SDP para un flujo h264? ¿Cómo puedo saber el tamaño del video de este ejemplo?¿Cómo decodificar sprop-parameter-sets en un H264 SDP?

ejemplo SDP:

sprop-parameter-sets=Z0IAKeNQFAe2AtwEBAaQeJEV,aM48gA== 

Primera parte decodificada de Base64 a Base16:

67 42 00 29 E3 50 14 07 B6 02 DC 04 04 06 90 78 91 15 

segunda parte (separadas por comas):

68 CE 3C 80 

RESPUESTA:Fetching the dimensions of a H264Video stream

Respuesta

12

La especificación necesita está disponible para su descarga gratuita desde el sitio web de la UIT aquí: - H.264 (03/10)

Seleccione el PDF de descarga gratuita y se encuentra el formato descrito en el punto 7.3.2.1 .1.

Lo siento, no estaba siendo obtuso con mi respuesta anterior, simplemente no sabía que la información estaba disponible en el dominio público.

+0

DUDE YOU RULE !!!!!!!!! ¡GRACIAS! = D – Cipi

+2

La URL en la respuesta no está actualizada, aquí está la nueva: http://www.itu.int/rec/T-REC-H.264/en – Cipi

+0

La especificación ya no está disponible sin una membresía de TIES o una compra una copia. – Deanna

1

Como resultado, la respuesta a mi pregunta está escrita en este documento: ISO/IEC 14496-10: 2005, en la sección 7.3.2.1. Y para obtenerlo tengo que pagar. Así que ... =)

+0

parece que se puede descargar el documento de forma gratuita aquí: http://www.itu.int/rec /T-REC-H.264/en – Flame

+0

¡Gracias por la actualización! :) – Cipi

6

Por supuesto, la especificación siempre es la mejor, pero los conjuntos de parámetros sprop en el SDP generalmente consisten en el parámetro de secuencia y los conjuntos de parámetros de imagen, base-64 codificados y delimitados por una coma. El parámetro de secuencia y los conjuntos de parámetros de imagen le dicen básicamente al decodificador cómo decodificar apropiadamente la corriente entrante H264; sin ella no puedes decodificar correctamente.

Escribir un analizador para SPS/PPS no es tan difícil, aunque para hacer esto, absolutamente necesitará la especificación. También necesitarás tener una buena clase de lector de bits y conocimiento de cómo funciona la codificación de golomb exponencial para valores firmados y no firmados. Ver here y here.

Por último, el código encontrado en this thread en Doom9 fue invaluable para mí, básicamente es un analizador completo para una transmisión H264 elemental. Incluye una clase de lector de bit, rutinas para analizar NALU, sps, pps, parámetros de VUI, matrices de escalado de secuencia, etc. Es una pieza bastante útil de código para cualquier ingeniero de video.

+0

Gracias, ya pude descifrarlo usando esto: http://www.itu.int/rec/T-REC-H.264-200903-I/en. =) – Cipi

1

El tamaño del video está en la línea de "fotogramas por tamaño" de SDP, ¿no es así?

00028 int av_strstart(const char *str, const char *pfx, const char **ptr) 
00029 { 
00030  while (*pfx && *pfx == *str) { 
00031   pfx++; 
00032   str++; 
00033  } 
00034  if (!*pfx && ptr) 
00035   *ptr = str; 
00036  return !*pfx; 
00037 } 
00038 

p es un puntero de su línea de SDP

 if (av_strstart(p, "framesize:", &p)) { 
00370   char buf1[50]; 
00371   char *dst = buf1; 
00372 
00373   // remove the protocol identifier.. 
00374   while (*p && *p == ' ') p++; // strip spaces. 
00375   while (*p && *p != ' ') p++; // eat protocol identifier 
00376   while (*p && *p == ' ') p++; // strip trailing spaces. 
00377   while (*p && *p != '-' && (dst - buf1) < sizeof(buf1) - 1) { 
00378    *dst++ = *p++; 
00379   } 
00380   *dst = '\0'; 
00381 
00382   // a='framesize:96 320-240' 
00383   // set our parameters.. 
00384   codec->width = atoi(buf1); 
00385   codec->height = atoi(p + 1); // skip the - 
00386   codec->pix_fmt = PIX_FMT_YUV420P; 
      } 

referencia: http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/rtpdec__h264_8c-source.html#l00360

+1

Actualmente, el documento en la respuesta aceptada explica cómo decodificar los conjuntos de parámetros ... – Cipi