H264 для PES пакетирования

У меня есть Ti DaVinci h264 encoder, и я хочу упаковать его выходные кадры в PES. Поток в формате приложения B.
Я взял pes-заголовок ffmpeg и сделал что-то вроде этого:

void MediaPacket::writePesHeader(std::vector< uint8_t >& buffer)
{
int header_len, flags, len, val;
uint8_t *q = buffer.data();

*q++ = 0x00;
*q++ = 0x00;
*q++ = 0x01;
*q++ = 0xe0;

header_len = 0;
flags      = 0;
if (pts != UNKNOWN) {
header_len += 5;
flags      |= 0x80;
}
if (dts != UNKNOWN && pts != UNKNOWN && dts != pts) {
header_len += 5;
flags      |= 0x40;
}

len = 0;
*q++ = len >> 8;
*q++ = len;
val  = 0x80;

*q++ = val;
*q++ = flags;
*q++ = header_len;
if (pts != UNKNOWN) {
write_pts(q, flags >> 6, pts);
q += 5;
}
if (dts != UNKNOWN && pts != UNKNOWN && dts != pts) {
write_pts(q, 1, dts);
q += 5;
}
buffer.resize(q-buffer.data());
}

static void write_pts(uint8_t *q, int fourbits, int64_t pts)
{
int val;

val  = fourbits << 4 | (((pts >> 30) & 0x07) << 1) | 1;
*q++ = val;
val  = (((pts >> 15) & 0x7fff) << 1) | 1;
*q++ = val >> 8;
*q++ = val;
val  = (((pts) & 0x7fff) << 1) | 1;
*q++ = val >> 8;
*q++ = val;
}

Вывод энкодера без заголовков хорошо воспроизводится проигрывателем Totem и avplay, но при отображении заголовков возникает ошибка «не удалось найти параметры кодека».
Что я делаю неправильно?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]