нужно прочитать информацию об mpeg видео файле вроде аудио\видео кодека, битрейта и т.д. помогите такое сделать, а то где я искал есть описание кодирования видео, но формата заголовка не нашёл...
Здравствуйте, race1, Вы писали:
R>нужно прочитать информацию об mpeg видео файле вроде аудио\видео кодека, битрейта и т.д. помогите такое сделать, а то где я искал есть описание кодирования видео, но формата заголовка не нашёл...
Что касается информации о видео-потоке (кодек, битрейт и т.д.), то её можно вытащить из заголовка видео-последоватедьности, начинающегося с последовательности байт [00 00 01 B3]. Вот кусочек кода, ответственный за это дело:
case 0xB3:
strcat(szLine, " [Sequence]");
{
if (nRemain < 11)
goto need_more;
int nHeight = (pStart[4] << 16) | (pStart[5] << 8) | pStart[6];
int nWidth = ((nHeight >> 12) + 15) & ~0x0F;
nHeight = ((nHeight & 0xFFF) + 15) & ~0x0F;
int nAspectRatioInfo = pStart[7] >> 4;
int nFrameRateCode = pStart[7] & 0x0F;
int nBitrate = (pStart[8] << 10) | (pStart[9] << 2) | (pStart[10] >> 6);
char* pszAspectRatio = "?";
switch (nAspectRatioInfo)
{
case 1: pszAspectRatio = "1:1"; break;
case 2: pszAspectRatio = "4:3"; break;
case 3: pszAspectRatio = "16:9"; break;
case 4: pszAspectRatio = "2.21:1"; break;
}
char* pszFrameRate = "?";
switch (nFrameRateCode)
{
case 1: pszFrameRate = "23.976"; break;
case 2: pszFrameRate = "24"; break;
case 3: pszFrameRate = "25"; break;
case 4: pszFrameRate = "29.97"; break;
case 5: pszFrameRate = "30"; break;
case 6: pszFrameRate = "50"; break;
case 7: pszFrameRate = "59.94"; break;
case 8: pszFrameRate = "60"; break;
}
sprintf(szTemp, " Width=%d Height=%d AspectRatio=%s FrameRate=%s Bitrate=%g",
nWidth, nHeight, pszAspectRatio, pszFrameRate, double(nBitrate) * 4.0 / 10.0);
strcat(szLine, szTemp);
}
break;
Если есть желание, могу прислать весь исходник этой проги.
Здравствуйте, romson, Вы писали:
R>Здравствуйте, race1, Вы писали:
R>>нужно прочитать информацию об mpeg видео файле вроде аудио\видео кодека, битрейта и т.д. помогите такое сделать, а то где я искал есть описание кодирования видео, но формата заголовка не нашёл...
R>Что касается информации о видео-потоке (кодек, битрейт и т.д.), то её можно вытащить из заголовка видео-последоватедьности, начинающегося с последовательности байт [00 00 01 B3]. Вот кусочек кода, ответственный за это дело:
это я уже нашёл, но этой информации мало
R>Если есть желание, могу прислать весь исходник этой проги
было бы здорово. а эта прога читает айдио информацию?
Здравствуйте, race1, Вы писали:
R>а эта прога читает айдио информацию?
Неа. Она только умеет вытаскивать MPEG-Audio фреймы, а их уже нужно парсить отдельно, как обычный MP3-файл. Формат заголовка такого фрейма, если не ошибаюсь, был на
mp3-tech.org.
ЗЫ. Глянь мыло
Здравствуйте, romson, Вы писали:
R>Здравствуйте, race1, Вы писали:
R>>а эта прога читает айдио информацию?
R>Неа. Она только умеет вытаскивать MPEG-Audio фреймы, а их уже нужно парсить отдельно, как обычный MP3-файл. Формат заголовка такого фрейма, если не ошибаюсь, был на mp3-tech.org.
R>ЗЫ. Глянь мыло
там перед непосредственно тэгом (который начинается с байтов FF Fx) ещё что-то записано... оно нужно вообще?
Здравствуйте, romson, Вы писали:
R>Здравствуйте, race1, Вы писали:
R>>нужно прочитать информацию об mpeg видео файле вроде аудио\видео кодека, битрейта и т.д. помогите такое сделать, а то где я искал есть описание кодирования видео, но формата заголовка не нашёл...
R>Что касается информации о видео-потоке (кодек, битрейт и т.д.), то её можно вытащить из заголовка видео-последоватедьности, начинающегося с последовательности байт [00 00 01 B3]. Вот кусочек кода, ответственный за это дело:
R>R> case 0xB3:
R> strcat(szLine, " [Sequence]");
R> {
R> if (nRemain < 11)
R> goto need_more;
R> int nHeight = (pStart[4] << 16) | (pStart[5] << 8) | pStart[6];
R> int nWidth = ((nHeight >> 12) + 15) & ~0x0F;
R> nHeight = ((nHeight & 0xFFF) + 15) & ~0x0F;
R> int nAspectRatioInfo = pStart[7] >> 4;
R> int nFrameRateCode = pStart[7] & 0x0F;
R> int nBitrate = (pStart[8] << 10) | (pStart[9] << 2) | (pStart[10] >> 6);
R> char* pszAspectRatio = "?";
R> switch (nAspectRatioInfo)
R> {
R> case 1: pszAspectRatio = "1:1"; break;
R> case 2: pszAspectRatio = "4:3"; break;
R> case 3: pszAspectRatio = "16:9"; break;
R> case 4: pszAspectRatio = "2.21:1"; break;
R> }
R> char* pszFrameRate = "?";
R> switch (nFrameRateCode)
R> {
R> case 1: pszFrameRate = "23.976"; break;
R> case 2: pszFrameRate = "24"; break;
R> case 3: pszFrameRate = "25"; break;
R> case 4: pszFrameRate = "29.97"; break;
R> case 5: pszFrameRate = "30"; break;
R> case 6: pszFrameRate = "50"; break;
R> case 7: pszFrameRate = "59.94"; break;
R> case 8: pszFrameRate = "60"; break;
R> }
R> sprintf(szTemp, " Width=%d Height=%d AspectRatio=%s FrameRate=%s Bitrate=%g",
R> nWidth, nHeight, pszAspectRatio, pszFrameRate, double(nBitrate) * 4.0 / 10.0);
R> strcat(szLine, szTemp);
R> }
R> break;
R>
R>Если есть желание, могу прислать весь исходник этой проги.