Imagine que tengo tramas H.264 AnxB procedentes de una conversación en tiempo real. ¿Cuál es la mejor manera de encapsular en la corriente de transporte MPEG2 mientras se mantiene la información de sincronización para la reproducción posterior?encapsulando velocidades H.264 de velocidad de cuadro variable en la corriente de transporte MPEG2
Estoy usando librerías libavcodec y libavformat. Cuando obtengo el puntero a objeto (* pcc) de tipo AVCodecContext, configuro el comando foll.
pcc->codec_id = CODEC_ID_H264;
pcc->bit_rate = br;
pcc->width = 640;
pcc->height = 480;
pcc->time_base.num = 1;
pcc->time_base.den = fps;
Cuando recibo unidades NAL, creo un AVPacket y llamo av_interleaved_write_frame().
AVPacket pkt;
av_init_packet(&pkt);
pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index = pst->index;
pkt.data = (uint8_t*)p_NALunit;
pkt.size = len;
pkt.dts = AV_NOPTS_VALUE;
pkt.pts = AV_NOPTS_VALUE;
av_interleaved_write_frame(fc, &pkt);
básicamente Tengo dos preguntas:
1) para imágenes por segundo variables, es que hay una manera de no especificar el ss. pcc-> time_base.num = 1; pcc-> time_base.den = fps; y lo reemplaza con algo para indicar una tasa de cuadros variable?
2) Al enviar los paquetes, ¿qué "marcas de tiempo" debo asignar a pkt.dts y pkt.pts?
En este momento, cuando reproduzco la salida usando ffplay, estoy reproduciendo a una velocidad de fotogramas constante (fps) que utilizo en el código anterior.
También me gustaría saber cómo acomodar la resolución espacial variable. En la transmisión que recibo, cada fotograma clave está precedido por SPS y PPS. Sé cada vez que cambia la resolución espacial. ¿Hay alguna forma de no tener que especificar pcc-> width = 640; pcc-> altura = 480; por adelantado? En otras palabras, indique que la resolución espacial puede cambiar a mitad de camino.
Muchas gracias, Eddie