亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP獲取音頻文件的相關信息

2020-03-22 19:45:30
字體:
來源:轉載
供稿:網友
項目需求:現在有一個音頻文件上傳的功能,在上傳后PHP需要獲取這個音頻文件的相關信息,例如:時長等,由于這個文件是放在買的空間上的,沒有像ffmpeg這樣的擴展來處理,那么PHP能不能獲取到這些信息?下面是之前在項目中用到的一個用PHP進行音頻文件頭部信息的讀取與寫入操作的實現,主要針對 WMA 和 MP3 兩種格式,供參考。// AudioExif.html' target='_blank'>class.php// 用PHP進行音頻文件頭部信息的讀取與寫入// 目前只支持 WMA 和 MP3 兩種格式, 只支持常用的幾個頭部信息// 寫入信息支持: Title(名稱), Artist(藝術家), Copyright(版權), Description (描述)// Year(年代), Genre (流派), AlbumTitle (專輯標題)// 其中 mp3 和 wma 略有不同, 具體返回的信息還可能更多, 但只有以上信息可以被寫入// mp3 還支持 Track (曲目編號寫入)// 對于 MP3 文件支持 ID3v1也支持ID3v2, 讀取時優先 v2, 寫入時總是會寫入v1, 必要時寫入v2// 用法說明: (由于 wma 使用 Unicode 存取, 故還需要 mb_convert_encoding() 擴展// 返回數據及寫入數據均為 ANSI 編碼, 即存什么就顯示什么 (中文_GB2312)// require ('AudioExif.class.php');// $AE = new AudioExif;// $file = '/path/to/test.mp3';// 1. 檢查文件是否完整 (only for wma, mp3始終返回 true)// $AE- CheckSize($file);// 2. 讀取信息, 返回值由信息組成的數組, 鍵名解釋參見上方// print_r($AE- GetInfo($file));// 3. 寫入信息, 第二參數是一個哈希數組, 鍵- 值, 支持的參見上方的, mp3也支持 Track// 要求第一參數的文件路徑可由本程序寫入// $pa = array('Title' = '新標題', 'AlbumTitle' = '新的專輯名稱');// $AE- SetInfo($file, $pa);// 其它: 該插件花了不少時間搜集查找 wma及mp3 的文件格式說明文檔與網頁, 希望對大家有用.// 其實網上已經有不少類似的程序, 但對 wma 實在太少了, 只能在 win 平臺下通過 M$ 的// API 來操作, 而 MP3 也很少有可以在 unix/linux 命令行操作的, 所以特意寫了這個模塊// 如果發現 bug 或提交 patch, 或加以改進使它更加健壯, 請告訴我.// (關于 ID3和Wma的文件格式及結構 在網上應該都可以找到參考資料)if (!extension_loaded('mbstring')){trigger_error('PHP Extension module `mbstring` is required for AudioExif', E_USER_WARNING);return true;// the Main Classclass AudioExif{// public varsvar $_wma = false;var $_mp3 = false;// Constructfunction AudioExif() {// nothing to do// check the filesizefunction CheckSize($file) {$handler = &$this- _get_handler($file);if (!$handler) return false;return $handler- check_size($file);// get the infomationsfunction GetInfo($file) {$handler = &$this- _get_handler($file);if (!$handler) return false;return $handler- get_info($file);// write the infomationsfunction SetInfo($file, $pa) {if (!is_writable($file)) {trigger_error('AudioExif: file `' . $file . '` can not been overwritten', E_USER_WARNING);return false;$handler = &$this- _get_handler($file);if (!$handler) return false;return $handler- set_info($file, $pa);// private methodsfunction &_get_handler($file) {$ext = strtolower(strrchr($file, '.'));$ret = false;if ($ext == '.mp3') {// MP3$ret = &$this- _mp3;if (!$ret) $ret = new _Mp3Exif();else if ($ext == '.wma'){ // wma$ret = &$this- _wma;if (!$ret) $ret = new _WmaExif();{ // unknowntrigger_error('AudioExif not supported `' . $ext . '` file.', E_USER_WARNING);return $ret;// DBCS = gb2312function dbcs_gbk($str)// strip the last "/0/0"$str = substr($str, 0, -2);return mb_convert_encoding($str, 'GBK', 'UCS-2LE');// gb2312 = DBCSfunction gbk_dbcs($str)$str = mb_convert_encoding($str, 'UCS-2LE', 'GBK');$str .= "/0/0";return $str;// file exifclass _AudioExifvar $fd;var $head;var $head_off;var $head_buf;// init the file handlerfunction _file_init($fpath, $write = false)$mode = ($write 'rb+' : 'rb');$this- fd = @fopen($fpath, $mode);if (!$this- fd)trigger_error('AudioExif: `' . $fpath . '` can not be opened with mode `' . $mode . '`', E_USER_WARNING);return false;$this- head = false;$this- head_off = 0;$this- head_buf = '';return true;// read buffer from the head_buf & move the off pointerfunction _read_head_buf($len)if ($len = 0) return NULL;$buf = substr($this- head_buf, $this- head_off, $len);$this- head_off += strlen($buf);return $buf;// read one short valuefunction _read_head_short()$ord1 = ord(substr($this- head_buf, $this- head_off, 1));$ord2 = ord(substr($this- head_buf, $this- head_off+1, 1));$this- head_off += 2;return ($ord1 + ($ord2 8));// save the file headfunction _file_save($head, $olen, $nlen = 0)if ($nlen == 0) $nlen = strlen($head);if ($nlen == $olen)// shorterflock($this- fd, LOCK_EX);fseek($this- fd, 0, SEEK_SET);fwrite($this- fd, $head, $nlen);flock($this- fd, LOCK_UN);// longer, buffer required$stat = fstat($this- $fsize = $stat['size'];// buf required (4096 ) 應該不會 nlen - olen 4096 吧$woff = 0;$roff = $olen;// read first bufferflock($this- fd, LOCK_EX);fseek($this- fd, $roff, SEEK_SET);$buf = fread($this- fd, 4096);// seek to startfseek($this- fd, $woff, SEEK_SET);fwrite($this- fd, $head, $nlen);$woff += $nlen;// seek to woff & write the data$buf2 = $buf;$roff += 4096;if ($roff $fsize)fseek($this- fd, $roff, SEEK_SET);$buf = fread($this- fd, 4096);// save last buffer$len2 = strlen($buf2);fseek($this- fd, $woff, SEEK_SET);fwrite($this- fd, $buf2, $len2);$woff += $len2;while ($roff $fsize);ftruncate($this- fd, $woff);flock($this- fd, LOCK_UN);// close the filefunction _file_deinit()if ($this- fd)fclose($this- $this- fd = false;// wma classclass _WmaExif extends _AudioExifvar $items1 = array('Title', 'Artist', 'Copyright', 'Description', 'Reserved');var $items2 = array('Year', 'Genre', 'AlbumTitle');// check file size (length) maybe invalid filefunction check_size($file)$ret = false;if (!$this- _file_init($file)) return true;if ($this- _init_header())$buf = fread($this- fd, 24);$tmp = unpack('H32id/Vlen/H8unused', $buf);if ($tmp['id'] == '3626b2758e66cf11a6d900aa0062ce6c')$stat = fstat($this- $ret = ($stat['size'] == ($this- head['len'] + $tmp['len']));$this- _file_deinit();return $ret;// set info (save the infos)function set_info($file, $pa)// check the pasettype($pa, 'array');if (!$this- _file_init($file, true)) return false;if (!$this- _init_header())$this- _file_deinit();return false;// parse the old header & generate the new header$head_body = '';$st_found = $ex_found = false;$head_num = $this- head['num'];while (($tmp = $this- _get_head_frame()) && ($head_num 0))$head_num--;if ($tmp['id'] == '3326b2758e66cf11a6d900aa0062ce6c'){ // Standard Info// 1-4$st_found = true;$st_body1 = $st_body2 = '';$lenx = unpack('v5', $this- _read_head_buf(10));$tmp['len'] -= 34; // 10 + 24for ($i = 0; $i count($this- items1); $i++)$l = $lenx[$i+1];$k = $this- items1[$i];$tmp['len'] -= $l;$data = $this- _read_head_buf($l);if (isset($pa[$k])) $data = gbk_dbcs($pa[$k]);$st_body2 .= $data;$st_body1 .= pack('v', strlen($data));// left lengthif ($tmp['len'] 0) $st_body2 .= $this- _read_head_buf($tmp['len']);// save to head_body$head_body .= pack('H32VH8', $tmp['id'], strlen($st_body1 . $st_body2)+24, $tmp['unused']);$head_body .= $st_body1 . $st_body2;$st_body2 .= $data;// save to head_body$head_body .= pack('H32Va4', '3326b2758e66cf11a6d900aa0062ce6c', strlen($st_body1 . $st_body2)+24, '');$head_body .= $st_body1 . $st_body2;$this- head['num']++;// ex not found if (!$ex_found)$inum = 0;$et_body = '';foreach ($this- items2 as $k)$nbuf = gbk_dbcs('WM/' . $k);$vbuf = (isset($pa[$k]) gbk_dbcs($pa[$k]) : "");$et_body .= pack('v', strlen($nbuf)) . $nbuf . pack('vv', 0, strlen($vbuf)) . $vbuf;$inum++;$head_body .= pack('H32Va4v', '40a4d0d207e3d21197f000a0c95ea850', strlen($et_body)+26, '', $inum);$head_body .= $et_body;$this- head['num']++;// after save$new_len = strlen($head_body) + 30;$old_len = $this- head['len'];if ($new_len $old_len)$head_body .= str_repeat("/0", $old_len - $new_len);$new_len = $old_len;$tmp = $this- head;$head_buf = pack('H32VVVH4', $tmp['id'], $new_len, $tmp['len2'], $tmp['num'], $tmp['unused']);$head_buf .= $head_body;$this- _file_save($head_buf, $old_len, $new_len);// close the file & return$this- _file_deinit();return true;// get infofunction get_info($file)$ret = array();if (!$this- _file_init($file)) return false;if (!$this- _init_header())$this- _file_deinit();return false;// get the data from head_buf$head_num = $this- head['num']; // num of head_framewhile (($tmp = $this- _get_head_frame()) && $head_num 0)$head_num--;if ($tmp['id'] == '3326b2758e66cf11a6d900aa0062ce6c'){ // Standard Info$lenx = unpack('v*', $this- _read_head_buf(10));for ($i = 1; $i = count($this- items1); $i++)$k = $this- items1[$i-1];$ret[$k] = dbcs_gbk($this- _read_head_buf($lenx[$i]));else if ($tmp['id'] == '40a4d0d207e3d21197f000a0c95ea850'){ // Extended Info$inum = $this- _read_head_short();$tmp['len'] -= 26;while ($inum 0 && $tmp['len'] 0)// attribute name$nlen = $this- _read_head_short();$nbuf = $this- _read_head_buf($nlen);// the flag & value length$flag = $this- _read_head_short();$vlen = $this- _read_head_short();$vbuf = $this- _read_head_buf($vlen);// update the XX$tmp['len'] -= (6 + $nlen + $vlen);$inum--;$name = dbcs_gbk($nbuf);$k = substr($name, 3);if (in_array($k, $this- items2)){ // all is string value (refer to falg for other tags)$ret[$k] = dbcs_gbk($vbuf);{ // skip onlyif ($tmp['len'] 24) $this- head_off += ($tmp['len'] - 24);$this- _file_deinit();return $ret;// get the header function _init_header()fseek($this- fd, 0, SEEK_SET);$buf = fread($this- fd, 30);if (strlen($buf) != 30) return false;$tmp = unpack('H32id/Vlen/Vlen2/Vnum/H4unused', $buf);if ($tmp['id'] != '3026b2758e66cf11a6d900aa0062ce6c')return false;$this- head_buf = fread($this- fd, $tmp['len'] - 30);$this- head = $tmp;return true;// _get_head_frame()function _get_head_frame()$buf = $this- _read_head_buf(24);if (strlen($buf) != 24) return false;$tmp = unpack('H32id/Vlen/H8unused', $buf);return $tmp;// mp3 class (if not IDv2 then select IDv1)class _Mp3Exif extends _AudioExifvar $head1;var $genres = array('Blues','Classic Rock','Country','Dance','Disco','Funk','Grunge','Hip-Hop','Jazz','Metal','New Age','Oldies','Other','Pop','R&B','Rap','Reggae','Rock','Techno','Industrial','Alternative','Ska','Death Metal','Pranks','Soundtrack','Euro-Techno','Ambient','Trip-Hop','Vocal','Jazz+Funk','Fusion','Trance','Classical','Instrumental','Acid','House','Game','Sound Clip','Gospel','Noise','AlternRock','Bass','Soul','Punk','Space','Meditative','Instrumental Pop','Instrumental Rock','Ethnic','Gothic','Darkwave','Techno-Industrial','Electronic','Pop-Folk','Eurodance','Dream','Southern Rock','Comedy','Cult','Gangsta','Top 40','Christian Rap','Pop/Funk','Jungle','Native American','Cabaret','New Wave','Psychadelic','Rave','Showtunes','Trailer','Lo-Fi','Tribal','Acid Punk','Acid Jazz','Polka','Retro','Musical','Rock & Roll','Hard Rock','Unknown');// MP3 always return truefunction check_size($file)return true;// get infofunction get_info($file)if (!$this- _file_init($file)) return false;$ret = false;if ($this- _init_header())$ret = ($this- head $this- _get_v2_info() : $this- _get_v1_info());$ret['meta'] = $this- _get_meta_info();$this- _file_deinit();return $ret;// set infofunction set_info($file, $pa)if (!$this- _file_init($file, true)) return false;if ($this- _init_header())// always save v1 info$this- _set_v1_info($pa);// set v2 first if need$this- _set_v2_info($pa);$this- _file_deinit();return true;// get the header information[v1+v2], call after file_initfunction _init_header()$this- head1 = false;$this- head = false;// try to get ID3v1 firstfseek($this- fd, -128, SEEK_END);$buf = fread($this- fd, 128);if (strlen($buf) == 128 && substr($buf, 0, 3) == 'TAG')$tmp = unpack('a3id/a30Title/a30Artist/a30AlbumTitle/a4Year/a28Description/CReserved/CTrack/CGenre', $buf);$this- head1 = $tmp;// try to get ID3v2fseek($this- fd, 0, SEEK_SET);$buf = fread($this- fd, 10);if (strlen($buf) == 10 && substr($buf, 0, 3) == 'ID3')$tmp = unpack('a3id/Cver/Crev/Cflag/C4size', $buf);$tmp['size'] = ($tmp['size1'] 21)|($tmp['size2'] 14)|($tmp['size3'] 7)|$tmp['size4'];unset($tmp['size1'], $tmp['size2'], $tmp['size3'], $tmp['size4']);$this- head = $tmp;$this- head_buf = fread($this- fd, $tmp['size']);return ($this- head1 || $this- head);// get v1 infofunction _get_v1_info()$ret = array();$tmpa = array('Title', 'Artist', 'Copyright', 'Description', 'Year', 'AlbumTitle');foreach ($tmpa as $tmp)$ret[$tmp] = $this- head1[$tmp];if ($pos = strpos($ret[$tmp], "/0"))$ret[$tmp] = substr($ret[$tmp], 0, $pos);// count the Genre, [Track]if ($this- head1['Reserved'] == 0) $ret['Track'] = $this- head1['Track'];else $ret['Description'] .= chr($ret['Reserved']) . chr($ret['Track']);// Genre_idx$g = $this- head1['Genre'];if (!isset($this- genres[$g])) $ret['Genre'] = 'Unknown';else $ret['Genre'] = $this- genres[$g];// return the value$ret['ID3v1'] = 'yes';return $ret;// get v2 infofunction _get_v2_info()$ret = array();$items = array( 'TCOP'= 'Copyright', 'TPE1'= 'Artist', 'TIT2'= 'Title', 'TRCK'= 'Track','TCON'= 'Genre', 'COMM'= 'Description', 'TYER'= 'Year', 'TALB'= 'AlbumTitle');while (true)$buf = $this- _read_head_buf(10);if (strlen($buf) != 10) break;$tmp = unpack('a4fid/Nsize/nflag', $buf);if ($tmp['size'] == 0) break;$tmp['dat'] = $this- _read_head_buf($tmp['size']);// 0x6000 (11000000 00000000)if ($tmp['flag'] & 0x6000) continue;// mapping the dataif ($k = $items[$tmp['fid']]){ // If first char is "/0", just skipif (substr($tmp['dat'], 0, 1) == "/0") $tmp['dat'] = substr($tmp['dat'], 1);$ret[$k] = $tmp['dat'];// reset the genreif ($g = $ret['Genre'])if (substr($g,0,1) == '(' && substr($g,-1,1) == ')') $g = substr($g, 1, -1);if (is_numeric($g))$g = intval($g);$ret['Genre'] = (isset($this- genres[$g]) $this- genres[$g] : 'Unknown');$ret['ID3v1'] = 'no';return $ret;// get meta info of MP3function _get_meta_info()// seek to the lead buf: 0xff$off = 0;if ($this- head) $off = $this- head['size'] + 10;fseek($this- fd, $off, SEEK_SET);while (!feof($this- fd))$skip = ord(fread($this- fd, 1));if ($skip == 0xff) break;if ($skip != 0xff) return false;$buf = fread($this- fd, 3);if (strlen($buf) != 3) return false;$tmp = unpack('C3', $buf);if (($tmp[1] & 0xf0) != 0xf0) return false;// get the meta info$meta = array();// get mpeg version$meta['mpeg'] = ($tmp[1] & 0x08 1 : 2);$meta['layer'] = ($tmp[1] & 0x04) (($tmp[1] & 0x02) 1 : 2) : (($tmp[1] & 0x02) 3 : 0);$meta['epro'] = ($tmp[1] & 0x01) 'no' : 'yes';// bit rates$bit_rates = array(1 = array(1 = array(0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,0),2 = array(0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,0),3 = array(0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0)2 = array(1 = array(0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,0),2 = array(0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0),3 = array(0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0)$i = $meta['mpeg'];$j = $meta['layer'];$k = ($tmp[2] 4);$meta['bitrate'] = $bit_rates[$i][$j][$k];// sample rates 采樣率 $sam_rates = array(1= array(44100,48000,32000,0), 2= array(22050,24000,16000,0));$meta['samrate'] = $sam_rates[$i][$k];$meta["padding"] = ($tmp[2] & 0x02) 'on' : 'off';$meta["private"] = ($tmp[2] & 0x01) 'on' : 'off';// mode & mode_ext$k = ($tmp[3] 6);$channel_modes = array('stereo', 'joint stereo', 'dual channel', 'single channel');$meta['mode'] = $channel_modes[$k];$k = (($tmp[3] 4) $extend_modes = array('MPG_MD_LR_LR', 'MPG_MD_LR_I', 'MPG_MD_MS_LR', 'MPG_MD_MS_I');$meta['ext_mode'] = $extend_modes[$k];$meta['copyright'] = ($tmp[3] & 0x08) 'yes' : 'no';$meta['original'] = ($tmp[3] & 0x04) 'yes' : 'no';$emphasis = array('none', '50/15 microsecs', 'rreserved', 'CCITT J 17');$k = ($tmp[3] $meta['emphasis'] = $emphasis[$k];return $meta;// set v1 infofunction _set_v1_info($pa)// ID3v1 (simpled)$off = -128;if (!($tmp = $this- head1))$off = 0;$tmp['id'] = 'TAG';$tmp['Title'] = $tmp['Artist'] = $tmp['AlbumTitle'] = $tmp['Year'] = $tmp['Description'] = '';$tmp['Reserved'] = $tmp['Track'] = $tmp['Genre'] = 0;// basic items$items = array('Title', 'Artist', 'Copyright', 'Description', 'Year', 'AlbumTitle');foreach ($items as $k)if (isset($pa[$k])) $tmp[$k] = $pa[$k];// genre indexif (isset($pa['Genre']))$g = 0;foreach ($this- genres as $gtmp)if (!strcasecmp($gtmp, $pa['Genre']))break;$g++;$tmp['Genre'] = $g;if (isset($pa['Track'])) $tmp['Track'] = intval($pa['Track']);// pack the data$buf = pack('a3a30a30a30a4a28CCC', $tmp['id'], $tmp['Title'], $tmp['Artist'], $tmp['AlbumTitle'],$tmp['Year'], $tmp['Description'], 0, $tmp['Track'], $tmp['Genre']);flock($this- fd, LOCK_EX);fseek($this- fd, $off, SEEK_END);fwrite($this- fd, $buf, 128);flock($this- fd, LOCK_UN);// set v2 infofunction _set_v2_info($pa)if (!$this- head){ // insert ID3return; // 沒有就算了$tmp = array('id'= 'ID3','ver'= 3,'rev'= 0,'flag'= $tmp['size'] = -10; // +10 = 0$this- head = $tmp;$this- head_buf = '';$this- head_off = 0;$items = array( 'TCOP'= 'Copyright', 'TPE1'= 'Artist', 'TIT2'= 'Title', 'TRAC'= 'Track','TCON'= 'Genre', 'COMM'= 'Description', 'TYER'= 'Year', 'TALB'= 'AlbumTitle');$head_body = '';while (true)$buf = $this- _read_head_buf(10);if (strlen($buf) != 10) break;$tmp = unpack('a4fid/Nsize/nflag', $buf);if ($tmp['size'] == 0) break;$data = $this- _read_head_buf($tmp['size']);if (($k = $items[$tmp['fid']]) && isset($pa[$k]))// the data should prefix by "/0" [replace]$data = "/0" . $pa[$k];unset($pa[$k]);$head_body .= pack('a4Nn', $tmp['fid'], strlen($data), $tmp['flag']) . $data;// reverse the items & set the new tags$items = array_flip($items);foreach ($pa as $k = $v)if ($fid = $items[$k])$head_body .= pack('a4Nn', $fid, strlen($v) + 1, 0) . "/0" . $v;// new length$new_len = strlen($head_body) + 10;$old_len = $this- head['size'] + 10;if ($new_len $old_len)$head_body .= str_repeat("/0", $old_len - $new_len);$new_len = $old_len;// count the size1,2,3,4, no include the header// 較為變態的算法... :p (28bytes integer)$size = array();$nlen = $new_len - 10;for ($i = 4; $i $i--)$size[$i] = ($nlen $nlen = 7;$tmp = $this- head;//echo "old_len : $old_len new_len: $new_len/n";$head_buf = pack('a3CCCCCCC', $tmp['id'], $tmp['ver'], $tmp['rev'], $tmp['flag'],$size[1], $size[2], $size[3], $size[4]);$head_buf .= $head_body;$this- _file_save($head_buf, $old_len, $new_len);以上所述就是本文的全部內容了,希望大家能夠喜歡。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美激情精品| 成人黄色av免费在线观看| 国产精品九九九| 5566日本婷婷色中文字幕97| 国产日韩欧美影视| 欧美一级淫片aaaaaaa视频| 中文字幕久久久av一区| 欧美日韩国产专区| 精品精品国产国产自在线| 欧美日韩视频在线| 亚洲美女在线观看| 亚洲成色www8888| 亚洲人成网站999久久久综合| 国产高清在线不卡| 自拍偷拍亚洲区| 欧美人交a欧美精品| 在线观看欧美视频| 色777狠狠综合秋免鲁丝| 精品香蕉在线观看视频一| 91精品视频在线播放| 国产视频亚洲视频| 懂色av中文一区二区三区天美| 欧美性jizz18性欧美| 在线播放国产一区中文字幕剧情欧美| 国产福利成人在线| 色偷偷888欧美精品久久久| 国产亚洲精品日韩| 久久最新资源网| 57pao国产成人免费| 欧美性猛交xxxx黑人猛交| 欧美天堂在线观看| 亚洲欧美日韩一区在线| 日韩电影免费观看在线| 97视频在线看| 亚洲精品第一页| 国产精品www网站| 欧美刺激性大交免费视频| 7m精品福利视频导航| 亚洲国产一区二区三区四区| 国产精品69久久久久| 国自产精品手机在线观看视频| 国产成人精品一区二区| 欧美成人午夜激情视频| 中文一区二区视频| 欧美一级免费看| 欧洲亚洲女同hd| 国产一区香蕉久久| 亚洲国产另类 国产精品国产免费| 欧美丰满少妇xxxxx| 一区二区三区视频免费| www.亚洲人.com| 成年人精品视频| 亚洲一区二区久久久久久久| 国产精品视频26uuu| 日韩av影院在线观看| 午夜精品久久17c| 国产精品99久久久久久人| 爽爽爽爽爽爽爽成人免费观看| 91av视频在线免费观看| 精品国产区一区二区三区在线观看| 欧美另类老女人| 欧美在线性视频| 91亚洲国产成人久久精品网站| 少妇高潮久久久久久潘金莲| 青青草精品毛片| 97在线视频观看| 91chinesevideo永久地址| 97在线观看免费高清| 欧美日韩一区二区三区在线免费观看| 国产精品一区二区电影| 久久久国产视频91| 91免费视频网站| 96pao国产成视频永久免费| 一区二区成人精品| 亚洲精品一区久久久久久| 久久人人爽人人爽人人片av高清| 国产一区二区三区视频在线观看| 久久精品国产视频| 精品亚洲国产视频| 国产91亚洲精品| 亚洲最大成人网色| 国产精品看片资源| 成人写真视频福利网| 欧美激情乱人伦一区| 亚洲三级黄色在线观看| 精品伊人久久97| 黑人精品xxx一区一二区| 日韩电视剧免费观看网站| 亚洲人在线视频| 日韩av日韩在线观看| 日本乱人伦a精品| 日韩在线中文字| 91精品国产自产在线老师啪| 国产精品久久久久久网站| 亚洲免费中文字幕| 国产视频精品xxxx| 欧美精品福利在线| 国产视频在线观看一区二区| 国产91在线视频| 国产精品入口福利| 国产男人精品视频| 欧美中文在线观看国产| 国产精品视频一区二区高潮| 亚洲第一视频网站| 一本色道久久综合狠狠躁篇的优点| 日韩视频在线免费观看| 亚洲的天堂在线中文字幕| 国模gogo一区二区大胆私拍| 97色在线视频观看| 久久亚洲精品小早川怜子66| 97av在线影院| 91精品国产自产在线| 欧美丰满少妇xxxxx做受| 国产专区精品视频| 2019亚洲日韩新视频| 欧美在线观看一区二区三区| 亚洲а∨天堂久久精品9966| 亚洲激情视频在线| 成人有码视频在线播放| 国产精品狠色婷| 国产做受69高潮| 欧美激情一区二区久久久| 91九色国产在线| 久久久www成人免费精品| 国产精品白嫩美女在线观看| 深夜福利日韩在线看| 久久久久久91香蕉国产| 日韩一区二区在线视频| 精品中文字幕在线2019| 日本久久久久久久| 亚洲国产精久久久久久| 日韩电影中文 亚洲精品乱码| 欧美电影在线观看完整版| 欧美另类在线播放| 国产精品自产拍在线观看中文| 亚洲精品日韩久久久| 欧美精品一二区| 91av网站在线播放| 性金发美女69hd大尺寸| 97成人在线视频| 日韩在线免费视频观看| 日韩中文有码在线视频| 精品久久久久人成| 亚洲欧洲日韩国产| 久久91亚洲精品中文字幕| 成人美女免费网站视频| 久久久久国色av免费观看性色| 伊人成人开心激情综合网| 久久免费精品日本久久中文字幕| 亚洲成人激情图| 成人性生交大片免费观看嘿嘿视频| 国产色综合天天综合网| 欧美激情中文字幕在线| 国产一区二区三区视频免费| 69av在线播放| 亚洲人成网站999久久久综合| 欧美一级大胆视频| 精品福利视频导航| 麻豆国产va免费精品高清在线| 国产一区二区在线免费视频| 日韩电影中文字幕一区| 国产欧美久久久久久| 日韩av大片在线| 精品视频在线播放免|