📄 module.audio-video.quicktime.php
字号:
case 'SelO': // play SELection Only atom case 'AllF': // play ALL Frames atom $atomstructure['data'] = getid3_lib::BigEndian2Int($atomdata); break; case 'name': // case 'MCPS': // Media Cleaner PRo case '@PRM': // adobe PReMiere version case '@PRQ': // adobe PRemiere Quicktime version $atomstructure['data'] = $atomdata; break; case 'cmvd': // Compressed MooV Data atom // Code by ubergeek豼bergeek*tv based on information from // http://developer.apple.com/quicktime/icefloe/dispatch012.html $atomstructure['unCompressedSize'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 4)); $CompressedFileData = substr($atomdata, 4); if ($UncompressedHeader = @gzuncompress($CompressedFileData)) { $atomstructure['subatoms'] = $this->QuicktimeParseContainerAtom($UncompressedHeader, $ThisFileInfo, 0, $atomHierarchy, $ParseAllPossibleAtoms); } else { $ThisFileInfo['warning'][] = 'Error decompressing compressed MOV atom at offset '.$atomstructure['offset']; } break; case 'dcom': // Data COMpression atom $atomstructure['compression_id'] = $atomdata; $atomstructure['compression_text'] = $this->QuicktimeDCOMLookup($atomdata); break; case 'rdrf': // Reference movie Data ReFerence atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); $atomstructure['flags']['internal_data'] = (bool) ($atomstructure['flags_raw'] & 0x000001); $atomstructure['reference_type_name'] = substr($atomdata, 4, 4); $atomstructure['reference_length'] = getid3_lib::BigEndian2Int(substr($atomdata, 8, 4)); switch ($atomstructure['reference_type_name']) { case 'url ': $atomstructure['url'] = $this->NoNullString(substr($atomdata, 12)); break; case 'alis': $atomstructure['file_alias'] = substr($atomdata, 12); break; case 'rsrc': $atomstructure['resource_alias'] = substr($atomdata, 12); break; default: $atomstructure['data'] = substr($atomdata, 12); break; } break; case 'rmqu': // Reference Movie QUality atom $atomstructure['movie_quality'] = getid3_lib::BigEndian2Int($atomdata); break; case 'rmcs': // Reference Movie Cpu Speed atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['cpu_speed_rating'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 2)); break; case 'rmvc': // Reference Movie Version Check atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['gestalt_selector'] = substr($atomdata, 4, 4); $atomstructure['gestalt_value_mask'] = getid3_lib::BigEndian2Int(substr($atomdata, 8, 4)); $atomstructure['gestalt_value'] = getid3_lib::BigEndian2Int(substr($atomdata, 12, 4)); $atomstructure['gestalt_check_type'] = getid3_lib::BigEndian2Int(substr($atomdata, 14, 2)); break; case 'rmcd': // Reference Movie Component check atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['component_type'] = substr($atomdata, 4, 4); $atomstructure['component_subtype'] = substr($atomdata, 8, 4); $atomstructure['component_manufacturer'] = substr($atomdata, 12, 4); $atomstructure['component_flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 16, 4)); $atomstructure['component_flags_mask'] = getid3_lib::BigEndian2Int(substr($atomdata, 20, 4)); $atomstructure['component_min_version'] = getid3_lib::BigEndian2Int(substr($atomdata, 24, 4)); break; case 'rmdr': // Reference Movie Data Rate atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['data_rate'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 4)); $atomstructure['data_rate_bps'] = $atomstructure['data_rate'] * 10; break; case 'rmla': // Reference Movie Language Atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['language_id'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 2)); $atomstructure['language'] = $this->QuicktimeLanguageLookup($atomstructure['language_id']); if (empty($ThisFileInfo['comments']['language']) || (!in_array($atomstructure['language'], $ThisFileInfo['comments']['language']))) { $ThisFileInfo['comments']['language'][] = $atomstructure['language']; } break; case 'rmla': // Reference Movie Language Atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['track_id'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 2)); break; case 'ptv ': // Print To Video - defines a movie's full screen mode // http://developer.apple.com/documentation/QuickTime/APIREF/SOURCESIV/at_ptv-_pg.htm $atomstructure['display_size_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 2)); $atomstructure['reserved_1'] = getid3_lib::BigEndian2Int(substr($atomdata, 2, 2)); // hardcoded: 0x0000 $atomstructure['reserved_2'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 2)); // hardcoded: 0x0000 $atomstructure['slide_show_flag'] = getid3_lib::BigEndian2Int(substr($atomdata, 6, 1)); $atomstructure['play_on_open_flag'] = getid3_lib::BigEndian2Int(substr($atomdata, 7, 1)); $atomstructure['flags']['play_on_open'] = (bool) $atomstructure['play_on_open_flag']; $atomstructure['flags']['slide_show'] = (bool) $atomstructure['slide_show_flag']; $ptv_lookup[0] = 'normal'; $ptv_lookup[1] = 'double'; $ptv_lookup[2] = 'half'; $ptv_lookup[3] = 'full'; $ptv_lookup[4] = 'current'; if (isset($ptv_lookup[$atomstructure['display_size_raw']])) { $atomstructure['display_size'] = $ptv_lookup[$atomstructure['display_size_raw']]; } else { $ThisFileInfo['warning'][] = 'unknown "ptv " display constant ('.$atomstructure['display_size_raw'].')'; } break; case 'stsd': // Sample Table Sample Description atom $atomstructure['version'] = getid3_lib::BigEndian2Int(substr($atomdata, 0, 1)); $atomstructure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atomdata, 1, 3)); // hardcoded: 0x0000 $atomstructure['number_entries'] = getid3_lib::BigEndian2Int(substr($atomdata, 4, 4)); $stsdEntriesDataOffset = 8; for ($i = 0; $i < $atomstructure['number_entries']; $i++) { $atomstructure['sample_description_table'][$i]['size'] = getid3_lib::BigEndian2Int(substr($atomdata, $stsdEntriesDataOffset, 4)); $stsdEntriesDataOffset += 4; $atomstructure['sample_description_table'][$i]['data_format'] = substr($atomdata, $stsdEntriesDataOffset, 4); $stsdEntriesDataOffset += 4; $atomstructure['sample_description_table'][$i]['reserved'] = getid3_lib::BigEndian2Int(substr($atomdata, $stsdEntriesDataOffset, 6)); $stsdEntriesDataOffset += 6; $atomstructure['sample_description_table'][$i]['reference_index'] = getid3_lib::BigEndian2Int(substr($atomdata, $stsdEntriesDataOffset, 2)); $stsdEntriesDataOffset += 2; $atomstructure['sample_description_table'][$i]['data'] = substr($atomdata, $stsdEntriesDataOffset, ($atomstructure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2)); $stsdEntriesDataOffset += ($atomstructure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2); $atomstructure['sample_description_table'][$i]['encoder_version'] = getid3_lib::BigEndian2Int(substr($atomstructure['sample_description_table'][$i]['data'], 0, 2)); $atomstructure['sample_description_table'][$i]['encoder_revision'] = getid3_lib::BigEndian2Int(substr($atomstructure['sample_description_table'][$i]['data'], 2, 2)); $atomstructure['sample_description_table'][$i]['encoder_vendor'] = substr($atomstructure['sample_description_table'][$i]['data'], 4, 4); switch ($atomstructure['sample_description_table'][$i]['encoder_vendor']) { case "\x00\x00\x00\x00": // audio atom $atomstructure['sample_description_table'][$i]['audio_channels'] = getid3_lib::BigEndian2Int(substr($atomstructure['sample_description_table'][$i]['data'], 8, 2)); $atomstructure['sample_description_table'][$i]['audio_bit_depth'] = getid3_lib::BigEndian2Int(substr($atomstructure['sample_description_table'][$i]['data'], 10, 2)); $atomstructure['sample_description_table'][$i]['audio_compression_id'] = getid3_lib::BigEndian2Int(substr($atomstructure['sample_description_table'][$i]['data'], 12, 2)); $atomstructure['sample_description_table'][$i]['audio_packet_size'] = getid3_lib::BigEndian2Int(substr($atomstructure['sample_description_table'][$i]['data'], 14, 2)); $atomstructure['sample_description_table'][$i]['audio_sample_rate'] = getid3_lib::FixedPoint16_16(substr($atomstructure['sample_description_table'][$i]['data'], 16, 4)); switch ($atomstructure['sample_description_table'][$i]['data_format']) { case 'mp4v': $ThisFileInfo['fileformat'] = 'mp4'; $ThisFileInfo['error'][] = 'This version ('.GETID3_VERSION.') of getID3() does not fully support MPEG-4 audio/video streams'; break; case 'qtvr': $ThisFileInfo['video']['dataformat'] = 'quicktimevr'; break; case 'mp4a': default: $ThisFileInfo['quicktime']['audio']['codec'] = $this->QuicktimeAudioCodecLookup($atomstructure['sample_description_table'][$i]['data_format']); $ThisFileInfo['quicktime']['audio']['sample_rate'] = $atomstructure['sample_description_table'][$i]['audio_sample_rate']; $ThisFileInfo['quicktime']['audio']['channels'] = $atomstructure['sample_description_table'][$i]['audio_channels']; $ThisFileInfo['quicktime']['audio']['bit_depth'] = $atomstructure['sample_description_table'][$i]['audio_bit_depth']; $ThisFileInfo['audio']['codec'] = $ThisFileInfo['quicktime']['audio']['codec']; $ThisFileInfo['audio']['sample_rate'] = $ThisFileInfo['quicktime']['audio']['sample_rate']; $ThisFileInfo['audio']['channels'] = $ThisFileInfo['quicktime']['audio']['channels']; $ThisFileInfo['audio']['bits_per_sample'] = $ThisFileInfo['quicktime']['audio']['bit_depth']; switch ($atomstructure['sample_description_table'][$i]['data_format']) { case 'raw ': // PCM case 'alac': // Apple Lossless Audio Codec $ThisFileInfo['audio']['lossless'] = true; break; default: $ThisFileInfo['audio']['lossless'] = false; break; } break; } break; default: switch ($atomstructure['sample_description_table'][$i]['data_format']) { case 'mp4s': $ThisFileInfo['fileformat'] = 'mp4'; break; default:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -