¿cómo puedo distinguir los marcos de vídeo codificados H264 por alguna etiqueta especial?

Tengo H264 codificado El archivo de vídeo vino de la cámara móvil androide y quiero conseguir los marcos y almacenarlos como archivos uno por uno. El problema es, ¿cómo puedo distinguir los marcos, los marcos se dividen por alguna etiqueta especial? Ahora tengo esta función que puede obtener los marcos de longitud by bytes, tal vez ayuda a entender mis preguntas, Thx 🙂

public static int h263Parse(byte[]buf, int offset, int nLen) { int vop_found, i; vop_found = 0; i=0; if(vop_found == 0) { for(i=(offset + 3); i<(offset+nLen); i++) { if(buf[i-3] == 0x00) if(buf[i-2] == 0x00) if((buf[i-1]&0xff) < 0x84) if((buf[i-1]&0xff) >= 0x80) { i++; vop_found=1; break; } } } if(vop_found == 1) { for(; i<(offset+nLen); i++) { if(buf[i-3] == 0x00) if(buf[i-2] == 0x00) if((buf[i-1]&0xff) < 0x84) if((buf[i-1]&0xff) >= 0x80) { return i-3-offset; } } } return -1; } 

Yo en serio no sé lo que está haciendo su código (porque se llama h263parse ) y usted está preguntando acerca de h264.

De todos modos, los cuadros H264 se dividen por una etiqueta especial, llamada prefijo startcode, que es 0x00 0x00 0x01 OR 0x00 0x00 0x00 0x01
Todos los datos entre dos códigos de inicio comprenden una unidad NAL en H264. Así que quizás lo que quieres hacer es buscar el prefijo de código de inicio en tu flujo h264 y hacer algo con la unidad NAL que sigue (hasta el prefijo startcode siguiente) en la secuencia.

Algo como esto tal vez:

 void h264parse_and_process(char *buf) { while(1) { if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x01) { // Found a NAL unit with 3-byte startcode, do something with it do_something(buf); // May be write to a file break; } else if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x00 && buf[3]==0x01) { // Found a NAL unit with 4-byte startcode, do something with it do_something(buf); // May be write to a file break; } buf++; } } 
  • Utilizar MediaCodec para H264 streaming
  • Flujo de vídeo en tiempo real / latencia cero: ¿qué parámetros de codec utilizar?
  • ¿Qué carga de formato h.264 en android y IOS?
  • Implementación Color_FormatSurface
  • Descodificación de hardware de video en Android usando GStreamer
  • Codificación H.264 de la cámara con Android MediaCodec
  • Uso de jcodec SequenceEncoder
  • Cómo utilizar la codificación de Android MediaCodec Datos de la cámara (YUV420sp)
  • HLS streaming en Android
  • Recibir y decodificar H.264 en vivo en Android
  • H.264 Streaming en tiempo real, fecha y hora en unidades NAL?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.