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;

Если есть желание, могу прислать весь исходник этой проги.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.