⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module.audio-video.asf.php

📁 一个用PHP编写的
💻 PHP
📖 第 1 页 / 共 5 页
字号:
					$offset += 4; // reserved - DWORD					$StreamPropertiesObjectData['type_specific_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['type_data_length']);					$offset += $StreamPropertiesObjectData['type_data_length'];					$StreamPropertiesObjectData['error_correct_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['error_data_length']);					$offset += $StreamPropertiesObjectData['error_data_length'];					switch ($StreamPropertiesObjectData['stream_type']) {						case GETID3_ASF_Audio_Media:							$thisfile_audio['dataformat']   = (!empty($thisfile_audio['dataformat'])   ? $thisfile_audio['dataformat']   : 'asf');							$thisfile_audio['bitrate_mode'] = (!empty($thisfile_audio['bitrate_mode']) ? $thisfile_audio['bitrate_mode'] : 'cbr');							$audiodata = getid3_riff::RIFFparseWAVEFORMATex(substr($StreamPropertiesObjectData['type_specific_data'], 0, 16));							unset($audiodata['raw']);							$thisfile_audio = getid3_lib::array_merge_noclobber($audiodata, $thisfile_audio);							break;						case GETID3_ASF_Video_Media:							$thisfile_video['dataformat']   = (!empty($thisfile_video['dataformat'])   ? $thisfile_video['dataformat']   : 'asf');							$thisfile_video['bitrate_mode'] = (!empty($thisfile_video['bitrate_mode']) ? $thisfile_video['bitrate_mode'] : 'cbr');							break;						case GETID3_ASF_Command_Media:						default:							// do nothing							break;					}					$thisfile_asf['stream_properties_object'][$StreamPropertiesObjectStreamNumber] = $StreamPropertiesObjectData;					unset($StreamPropertiesObjectData); // clear for next stream, if any					break;				case GETID3_ASF_Header_Extension_Object:					// Header Extension Object: (mandatory, one only)					// Field Name                   Field Type   Size (bits)					// Object ID                    GUID         128             // GUID for Header Extension object - GETID3_ASF_Header_Extension_Object					// Object Size                  QWORD        64              // size of Header Extension object, including 46 bytes of Header Extension Object header					// Reserved Field 1             GUID         128             // hardcoded: GETID3_ASF_Reserved_1					// Reserved Field 2             WORD         16              // hardcoded: 0x00000006					// Header Extension Data Size   DWORD        32              // in bytes. valid: 0, or > 24. equals object size minus 46					// Header Extension Data        BYTESTREAM   variable        // array of zero or more extended header objects					// shortcut					$thisfile_asf['header_extension_object'] = array();					$thisfile_asf_headerextensionobject      = &$thisfile_asf['header_extension_object'];					$thisfile_asf_headerextensionobject['objectid']            = $NextObjectGUID;					$thisfile_asf_headerextensionobject['objectid_guid']       = $NextObjectGUIDtext;					$thisfile_asf_headerextensionobject['objectsize']          = $NextObjectSize;					$thisfile_asf_headerextensionobject['reserved_1']          = substr($ASFHeaderData, $offset, 16);					$offset += 16;					$thisfile_asf_headerextensionobject['reserved_1_guid']     = $this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']);					if ($thisfile_asf_headerextensionobject['reserved_1'] != GETID3_ASF_Reserved_1) {						$ThisFileInfo['warning'][] = 'header_extension_object.reserved_1 GUID ('.$this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']).') does not match expected "GETID3_ASF_Reserved_1" GUID ('.$this->BytestringToGUID(GETID3_ASF_Reserved_1).')';						//return false;						break;					}					$thisfile_asf_headerextensionobject['reserved_2']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));					$offset += 2;					if ($thisfile_asf_headerextensionobject['reserved_2'] != 6) {						$ThisFileInfo['warning'][] = 'header_extension_object.reserved_2 ('.getid3_lib::PrintHexBytes($thisfile_asf_headerextensionobject['reserved_2']).') does not match expected value of "6"';						//return false;						break;					}					$thisfile_asf_headerextensionobject['extension_data_size'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));					$offset += 4;					$thisfile_asf_headerextensionobject['extension_data']      =                              substr($ASFHeaderData, $offset, $thisfile_asf_headerextensionobject['extension_data_size']);					$offset += $thisfile_asf_headerextensionobject['extension_data_size'];					break;				case GETID3_ASF_Codec_List_Object:					// Codec List Object: (optional, one only)					// Field Name                   Field Type   Size (bits)					// Object ID                    GUID         128             // GUID for Codec List object - GETID3_ASF_Codec_List_Object					// Object Size                  QWORD        64              // size of Codec List object, including 44 bytes of Codec List Object header					// Reserved                     GUID         128             // hardcoded: 86D15241-311D-11D0-A3A4-00A0C90348F6					// Codec Entries Count          DWORD        32              // number of entries in Codec Entries array					// Codec Entries                array of:    variable        //					// * Type                       WORD         16              // 0x0001 = Video Codec, 0x0002 = Audio Codec, 0xFFFF = Unknown Codec					// * Codec Name Length          WORD         16              // number of Unicode characters stored in the Codec Name field					// * Codec Name                 WCHAR        variable        // array of Unicode characters - name of codec used to create the content					// * Codec Description Length   WORD         16              // number of Unicode characters stored in the Codec Description field					// * Codec Description          WCHAR        variable        // array of Unicode characters - description of format used to create the content					// * Codec Information Length   WORD         16              // number of Unicode characters stored in the Codec Information field					// * Codec Information          BYTESTREAM   variable        // opaque array of information bytes about the codec used to create the content					// shortcut					$thisfile_asf['codec_list_object'] = array();					$thisfile_asf_codeclistobject      = &$thisfile_asf['codec_list_object'];					$thisfile_asf_codeclistobject['objectid']                  = $NextObjectGUID;					$thisfile_asf_codeclistobject['objectid_guid']             = $NextObjectGUIDtext;					$thisfile_asf_codeclistobject['objectsize']                = $NextObjectSize;					$thisfile_asf_codeclistobject['reserved']                  = substr($ASFHeaderData, $offset, 16);					$offset += 16;					$thisfile_asf_codeclistobject['reserved_guid']             = $this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']);					if ($thisfile_asf_codeclistobject['reserved'] != $this->GUIDtoBytestring('86D15241-311D-11D0-A3A4-00A0C90348F6')) {						$ThisFileInfo['warning'][] = 'codec_list_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {86D15241-311D-11D0-A3A4-00A0C90348F6}';						//return false;						break;					}					$thisfile_asf_codeclistobject['codec_entries_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));					$offset += 4;					for ($CodecEntryCounter = 0; $CodecEntryCounter < $thisfile_asf_codeclistobject['codec_entries_count']; $CodecEntryCounter++) {						// shortcut						$thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter] = array();						$thisfile_asf_codeclistobject_codecentries_current = &$thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter];						$thisfile_asf_codeclistobject_codecentries_current['type_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));						$offset += 2;						$thisfile_asf_codeclistobject_codecentries_current['type'] = $this->ASFCodecListObjectTypeLookup($thisfile_asf_codeclistobject_codecentries_current['type_raw']);						$CodecNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character						$offset += 2;						$thisfile_asf_codeclistobject_codecentries_current['name'] = substr($ASFHeaderData, $offset, $CodecNameLength);						$offset += $CodecNameLength;						$CodecDescriptionLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character						$offset += 2;						$thisfile_asf_codeclistobject_codecentries_current['description'] = substr($ASFHeaderData, $offset, $CodecDescriptionLength);						$offset += $CodecDescriptionLength;						$CodecInformationLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));						$offset += 2;						$thisfile_asf_codeclistobject_codecentries_current['information'] = substr($ASFHeaderData, $offset, $CodecInformationLength);						$offset += $CodecInformationLength;						if ($thisfile_asf_codeclistobject_codecentries_current['type_raw'] == 2) {							// audio codec							if (strpos($thisfile_asf_codeclistobject_codecentries_current['description'], ',') === false) {								$ThisFileInfo['error'][] = '[asf][codec_list_object][codec_entries]['.$CodecEntryCounter.'][description] expected to contain comma-seperated list of parameters: "'.$thisfile_asf_codeclistobject_codecentries_current['description'].'"';								return false;							}							list($AudioCodecBitrate, $AudioCodecFrequency, $AudioCodecChannels) = explode(',', $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['description']));							$thisfile_audio['codec'] = $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['name']);							if (!isset($thisfile_audio['bitrate']) && strstr($AudioCodecBitrate, 'kbps')) {								$thisfile_audio['bitrate'] = (int) (trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000);							}							//if (!isset($thisfile_video['bitrate']) && isset($thisfile_audio['bitrate']) && isset($thisfile_asf['file_properties_object']['max_bitrate']) && ($thisfile_asf_codeclistobject['codec_entries_count'] > 1)) {							if (!@$thisfile_video['bitrate'] && @$thisfile_audio['bitrate'] && @$ThisFileInfo['bitrate']) {								//$thisfile_video['bitrate'] = $thisfile_asf['file_properties_object']['max_bitrate'] - $thisfile_audio['bitrate'];								$thisfile_video['bitrate'] = $ThisFileInfo['bitrate'] - $thisfile_audio['bitrate'];							}							$AudioCodecFrequency = (int) trim(str_replace('kHz', '', $AudioCodecFrequency));							switch ($AudioCodecFrequency) {								case 8:								case 8000:									$thisfile_audio['sample_rate'] = 8000;									break;								case 11:								case 11025:									$thisfile_audio['sample_rate'] = 11025;									break;								case 12:								case 12000:									$thisfile_audio['sample_rate'] = 12000;									break;								case 16:								case 16000:									$thisfile_audio['sample_rate'] = 16000;									break;								case 22:								case 22050:									$thisfile_audio['sample_rate'] = 22050;									break;								case 24:								case 24000:									$thisfile_audio['sample_rate'] = 24000;									break;								case 32:								case 32000:									$thisfile_audio['sample_rate'] = 32000;									break;								case 44:								case 441000:									$thisfile_audio['sample_rate'] = 44100;									break;								case 48:								case 48000:									$thisfile_audio['sample_rate'] = 48000;									break;								default:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -