mpeg header
От: race1 Россия  
Дата: 01.08.04 06:49
Оценка:
нужно прочитать информацию об mpeg видео файле вроде аудио\видео кодека, битрейта и т.д. помогите такое сделать, а то где я искал есть описание кодирования видео, но формата заголовка не нашёл...
Re: mpeg header
От: romson  
Дата: 02.08.04 11:11
Оценка:
Здравствуйте, 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;

Если есть желание, могу прислать весь исходник этой проги.
Re[2]: mpeg header
От: race1 Россия  
Дата: 02.08.04 11:29
Оценка:
Здравствуйте, romson, Вы писали:

R>Здравствуйте, race1, Вы писали:


R>>нужно прочитать информацию об mpeg видео файле вроде аудио\видео кодека, битрейта и т.д. помогите такое сделать, а то где я искал есть описание кодирования видео, но формата заголовка не нашёл...


R>Что касается информации о видео-потоке (кодек, битрейт и т.д.), то её можно вытащить из заголовка видео-последоватедьности, начинающегося с последовательности байт [00 00 01 B3]. Вот кусочек кода, ответственный за это дело:


это я уже нашёл, но этой информации мало

R>Если есть желание, могу прислать весь исходник этой проги


было бы здорово. а эта прога читает айдио информацию?
Re[3]: mpeg header
От: romson  
Дата: 02.08.04 12:58
Оценка:
Здравствуйте, race1, Вы писали:

R>а эта прога читает айдио информацию?


Неа. Она только умеет вытаскивать MPEG-Audio фреймы, а их уже нужно парсить отдельно, как обычный MP3-файл. Формат заголовка такого фрейма, если не ошибаюсь, был на mp3-tech.org.

ЗЫ. Глянь мыло
Re[4]: mpeg header
От: race1 Россия  
Дата: 03.08.04 08:58
Оценка:
Здравствуйте, romson, Вы писали:

R>Здравствуйте, race1, Вы писали:


R>>а эта прога читает айдио информацию?


R>Неа. Она только умеет вытаскивать MPEG-Audio фреймы, а их уже нужно парсить отдельно, как обычный MP3-файл. Формат заголовка такого фрейма, если не ошибаюсь, был на mp3-tech.org.


R>ЗЫ. Глянь мыло


там перед непосредственно тэгом (который начинается с байтов FF Fx) ещё что-то записано... оно нужно вообще?
Re[2]: mpeg header
От: Аноним  
Дата: 21.09.04 01:22
Оценка:
Здравствуйте, 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>Если есть желание, могу прислать весь исходник этой проги.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.