getid3_flv::Analyze() –

You appear to be a bot. Output may be restricted

Description

Usage

$bool = getid3_flv::Analyze();

Parameters

Returns

bool

Source

File name: wordpress/wp-includes/ID3/module.audio-video.flv.php


Lines:

1 to 100 of 254
  public function Analyze() {
    $info = &$this->getid3->info;

    $this->fseek($info['avdataoffset']);

    $FLVdataLength = $info['avdataend'] - $info['avdataoffset'];
    $FLVheader = $this->fread(5);

    $info['fileformat'] = 'flv';
    $info['flv']['header']['signature'] =                           substr($FLVheader, 0, 3);
    $info['flv']['header']['version']   = getid3_lib::BigEndian2Int(substr($FLVheader, 3, 1));
    $TypeFlags                          = getid3_lib::BigEndian2Int(substr($FLVheader, 4, 1));

    if ($info['flv']['header']['signature'] != self::magic) {
      $this->error('Expecting "'.getid3_lib::PrintHexBytes(self::magic).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($info['flv']['header']['signature']).'"');
      unset($info['flv'], $info['fileformat']);
      return false;
    }

    $info['flv']['header']['hasAudio'] = (bool) ($TypeFlags & 0x04);
    $info['flv']['header']['hasVideo'] = (bool) ($TypeFlags & 0x01);

    $FrameSizeDataLength = getid3_lib::BigEndian2Int($this->fread(4));
    $FLVheaderFrameLength = 9;
    if ($FrameSizeDataLength > $FLVheaderFrameLength) {
      $this->fseek($FrameSizeDataLength - $FLVheaderFrameLength, SEEK_CUR);
    }
    $Duration = 0;
    $found_video = false;
    $found_audio = false;
    $found_meta  = false;
    $found_valid_meta_playtime = false;
    $tagParseCount = 0;
    $info['flv']['framecount'] = array('total'=>0, 'audio'=>0, 'video'=>0);
    $flv_framecount = &$info['flv']['framecount'];
    while ((($this->ftell() + 16) < $info['avdataend']) && (($tagParseCount++ <= $this->max_frames) || !$found_valid_meta_playtime))  {
      $ThisTagHeader = $this->fread(16);

      $PreviousTagLength = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  0, 4));
      $TagType           = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  4, 1));
      $DataLength        = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  5, 3));
      $Timestamp         = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  8, 3));
      $LastHeaderByte    = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 15, 1));
      $NextOffset = $this->ftell() - 1 + $DataLength;
      if ($Timestamp > $Duration) {
        $Duration = $Timestamp;
      }

      $flv_framecount['total']++;
      switch ($TagType) {
        case GETID3_FLV_TAG_AUDIO:
          $flv_framecount['audio']++;
          if (!$found_audio) {
            $found_audio = true;
            $info['flv']['audio']['audioFormat']     = ($LastHeaderByte >> 4) & 0x0F;
            $info['flv']['audio']['audioRate']       = ($LastHeaderByte >> 2) & 0x03;
            $info['flv']['audio']['audioSampleSize'] = ($LastHeaderByte >> 1) & 0x01;
            $info['flv']['audio']['audioType']       =  $LastHeaderByte       & 0x01;
          }
          break;

        case GETID3_FLV_TAG_VIDEO:
          $flv_framecount['video']++;
          if (!$found_video) {
            $found_video = true;
            $info['flv']['video']['videoCodec'] = $LastHeaderByte & 0x07;

            $FLVvideoHeader = $this->fread(11);
            $PictureSizeEnc = array();

            if ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H264) {
              // this code block contributed by: moysevichØgmail*com

              $AVCPacketType = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 0, 1));
              if ($AVCPacketType == H264_AVC_SEQUENCE_HEADER) {
                //	read AVCDecoderConfigurationRecord
                $configurationVersion       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  4, 1));
                $AVCProfileIndication       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  5, 1));
                $profile_compatibility      = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  6, 1));
                $lengthSizeMinusOne         = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  7, 1));
                $numOfSequenceParameterSets = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  8, 1));

                if (($numOfSequenceParameterSets & 0x1F) != 0) {
                  //	there is at least one SequenceParameterSet
                  //	read size of the first SequenceParameterSet
                  //$spsSize = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 9, 2));
                  $spsSize = getid3_lib::LittleEndian2Int(substr($FLVvideoHeader, 9, 2));
                  //	read the first SequenceParameterSet
                  $sps = $this->fread($spsSize);
                  if (strlen($sps) == $spsSize) {  //	make sure that whole SequenceParameterSet was red
                    $spsReader = new AVCSequenceParameterSetReader($sps);
                    $spsReader->readData();
                    $info['video']['resolution_x'] = $spsReader->getWidth();
                    $info['video']['resolution_y'] = $spsReader->getHeight();
                  }
                }
              }
              // end: moysevichØgmail*com

            } elseif ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H263) {

 View on GitHub View on Trac