日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

基于QT实现简单的音乐播放器

發(fā)布時間:2023/12/10 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于QT实现简单的音乐播放器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基于QT實現(xiàn)簡單的音樂播放器
轉(zhuǎn)載網(wǎng)址:https://www.shangmayuan.com/a/f65b7d1ceb09400aab5f1003.html
2020年12月07日 閱讀數(shù):77
這篇文章主要向大家介紹基于QT實現(xiàn)簡單的音樂播放器,主要內(nèi)容包括基礎應用、實用技巧、原理機制等方面,希望對大家有所幫助。
標簽:javascriptjavaideuithisspa設計3dcode視頻
基于QT實現(xiàn)一個多功能媒體播放器,它能播放音頻(如mp3),視頻
媒體播放器界面,有進度條,可展現(xiàn)總播放時間、當前播放時間,進度條可拖動,有播放、暫停鍵,有快進、快退鍵,上一曲下一曲,靜音,調(diào)節(jié)音量,雙擊播放歌曲,以及簡單的歌詞同步。
主界面以下:
在這里插入圖片描述
建立三個本地文件夾分別存放MV,歌詞和音樂文件
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
工程結(jié)構(gòu)目錄以下(整個結(jié)構(gòu)沒有設計好,因此每一個視頻都要單首創(chuàng)建文件):
在這里插入圖片描述
mainwindow.h代碼以下:

javascript

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include
#include
#include
#include
#include
#include
#include
#include
#include<videoplayer.h>
#include<videoplayer_qr.h>
#include<videoplayer_cq.h>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
VideoPlayer *v1;
videoplayer_qr *v_qr;
videoplayer_cq *v_cq;

bool isPlay=false; bool ismute=false; QString MusicPath="C:\\Users\\44637\\Music\\QTMusic"; QString LrcPath="C:\\Users\\44637\\Music\\QTLrc";QStringList fileList; //文件名稱 QStringList lrcList; QMediaPlaylist *PlayerList; QMediaPlayer *Player; int moved; int iCount=0; QTimer *timer2; QMap<int, QString> map; QMap<QString, QString> *map2; void getHeader(const char *str, QString &des); void getTime(QString line);//改動二

private slots:
void init();//初始化
void addItem(QString name); //把歌名添加到musicname上
QStringList getFileNames(const QString &path); //獲取路徑下全部文件名
QStringList getLrcNames(const QString &path); //獲取路徑下全部文件名
void slotButtonStart();//播放
void slotButtonLast();//上一首
void slotButtonNext();//下一首
void slotShowCurrentMusic();//顯示當前播放的歌曲
void volumChange(int);//控制音量
void positionChange(qint64 position);//進度條隨著音樂播放變化
void seekChange(int position); //滑動滑動條快進、倒退音樂,且音樂已播放時長也跟著變化
void musicTime();//歌曲總時間
void slotShowCurrentLrc();
void showWord(int time);//顯示歌詞
void initlrc(const QString& fileName);//初始化歌詞
void button_style();//按鈕樣式
void changestartbutton();
void cleanmap();
void playto(int i,int );//雙擊播放
void video_click_wm();//播放相應視頻
void video_click_qr();
void video_click_cq();
void mute();//靜音
void fastForward();//快進
void fastBack();//快退

};
#endif // MAINWINDOW_H

mainwindow.cpp代碼以下:java

#include “mainwindow.h”
#include “ui_mainwindow.h”
#include
#include
#include
#include

MainWindow::MainWindow(QWidget *parent)
QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::slotButtonStart);
connect(ui->Buttonlast,&QPushButton::clicked,this,&MainWindow::slotButtonLast);
connect(ui->Buttonnext,&QPushButton::clicked,this,&MainWindow::slotButtonNext);
connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::changestartbutton);
connect(ui->Buttonvideo_wm,&QPushButton::clicked,this,&MainWindow::video_click_wm);
connect(ui->Buttonvideo_qr,&QPushButton::clicked,this,&MainWindow::video_click_qr);
connect(ui->Buttonvideo_cq,&QPushButton::clicked,this,&MainWindow::video_click_cq);
connect(ui->Buttonmute,&QPushButton::clicked,this,&MainWindow::mute);
connect(ui->fastButton,&QPushButton::clicked,this,&MainWindow::fastForward);
connect(ui->fastbackButton,&QPushButton::clicked,this,&MainWindow::fastBack);
init();
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::init(){
button_style();

PlayerList = new QMediaPlaylist; //實例化播放器和播放列表 Player = new QMediaPlayer; fileList = getFileNames(this->MusicPath); //獲取文件夾下全部音樂文件 lrcList = getLrcNames(this->LrcPath); moved = 0; qDebug()<<"ALL Music File \n"<<fileList; qDebug()<<"ALL Lrc File \n"<<lrcList;for(int i=0;i<fileList.size();i++){QString fileName=fileList.at(i);addItem(fileName);PlayerList->addMedia(QUrl::fromLocalFile(MusicPath+"\\"+fileName)); } PlayerList->setCurrentIndex(0); Player->setPlaylist(PlayerList); //將播放列表加載到播放器connect(Player,&QMediaPlayer::currentMediaChanged,this,&MainWindow::slotShowCurrentMusic); connect(Player,&QMediaPlayer::currentMediaChanged,this,&MainWindow::slotShowCurrentLrc); connect(Player,&QMediaPlayer::currentMediaChanged,this,&MainWindow::cleanmap); connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::slotShowCurrentLrc); connect(ui->Buttonnext,&QPushButton::clicked,this,&MainWindow::slotShowCurrentLrc); connect(ui->Buttonlast,&QPushButton::clicked,this,&MainWindow::slotShowCurrentLrc); connect(ui->Buttonstart,&QPushButton::clicked,this,&MainWindow::slotShowCurrentMusic); connect(ui->Volumebar, SIGNAL(sliderMoved(int)), this, SLOT(volumChange(int)));connect(Player,SIGNAL(positionChanged(qint64)),this,SLOT(positionChange(qint64))); connect(Player,SIGNAL(durationChanged(qint64)),this,SLOT(musicTime())); connect(ui->Progressbar,SIGNAL(sliderMoved(int)),this,SLOT(seekChange(int)));connect(ui->musicname,SIGNAL(cellDoubleClicked(int,int)),this,SLOT(playto(int,int)));

}

QStringList MainWindow::getFileNames(const QString &path)
{
QDir dir(path);
QStringList nameFilters;
nameFilters << “*.mp3”;
QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);
return files;
}

QStringList MainWindow::getLrcNames(const QString &path)
{
QDir dir(path);
QStringList nameFilters;
nameFilters <<"*.txt";
QStringList files = dir.entryList(nameFilters, QDir::Files|QDir::Readable, QDir::Name);
return files;
}

void MainWindow::addItem(QString name){
int count = ui ->musicname->rowCount();
ui->musicname->setRowCount(count+1);
QTableWidgetItem *itemName = new QTableWidgetItem(name);
itemName->setFlags(itemName->flags() & ~Qt::ItemIsEditable);
ui->musicname->setItem(count,0,itemName);
}

void MainWindow::slotShowCurrentMusic(){
int index=PlayerList->currentIndex();
QString songName=fileList.at(index);
ui->CurrentMusic->setText(songName);
}

void MainWindow::slotShowCurrentLrc(){
int index=PlayerList->currentIndex();
qDebug()<<index;
QString musicLrc=lrcList.at(index);
qDebug()<<musicLrc;
initlrc(musicLrc);

}

void MainWindow::slotButtonStart(){
if(!isPlay){
isPlay=true;
Player->setVolume(100);
Player->play();
musicTime();

} else{isPlay=false;Player->pause();musicTime(); }

}

void MainWindow::slotButtonLast(){
int currentIndex = PlayerList->currentIndex();
if(currentIndex == 0){
currentIndex=PlayerList->mediaCount();
}
else{
PlayerList->previous();
PlayerList->previousIndex();
musicTime();
}
}

void MainWindow::slotButtonNext(){
int currentIndex = PlayerList->currentIndex();
if(++currentIndex == PlayerList->mediaCount()){
currentIndex=0;}
PlayerList->setCurrentIndex(currentIndex);
musicTime();
}

void MainWindow::volumChange(int vol)
{
Player -> setVolume(vol);
}

void MainWindow::positionChange(qint64 position)
{
ui->Progressbar->setMaximum(Player->duration() / 1000);//設置滑塊的長度范圍為音樂長.00度
ui->Progressbar->setValue(position / 1000);//若是音樂進度改變,則改變滑塊顯示位置
moved = position;//讓播放時間等于音樂進度(毫秒)
QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//設置時間
ui->showPro ->setText(moveTime.toString(“mm:ss”));//顯示時間
QString t=moveTime.toString(“mm:ss”);
QString mm = t.mid(0,2);
QString ss = t.mid(3, 2);
int m = mm.toInt();
int s = ss.toInt();
int time = m601000 + s*1000;
showWord(time);
}

void MainWindow::seekChange(int position)
{
Player -> setPosition(position * 1000);//若是滑塊改變位置,則改變音樂進度
moved = position * 1000;//讓播放時間等于音樂進度(毫秒)
QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//設置時間
ui->showPro ->setText(moveTime.toString(“mm:ss”));//顯示時間

}

void MainWindow::musicTime(){

qint64 time = Player->duration();QTime Time(0,(time % (1000 * 60 * 60)) / (1000 * 60),(time % (1000 * 60)) / 1000);ui->MusicTime->setText(Time.toString("mm:ss"));qDebug()<<"time:"<<Time;

}

void MainWindow::showWord(int time)
{
if(map.contains(time))
{
ui->label1->setText(map.value(time));

} else{qDebug()<<"繼續(xù)上一句歌詞"; }

}

void MainWindow::getHeader(const char *str, QString &des)
{
des = des.remove(str);
des = des.remove("]");
}

void MainWindow::getTime(QString line)//獲取lrc文件的每句的時間
{
if(line.startsWith("["))
{
int index = line.indexOf("]");
QString t = line.mid(1, index - 1);
QString mm = t.mid(0,2);
QString ss = t.mid(3, 2);
int m = mm.toInt();
int s = ss.toInt();
int time = m601000 + s*1000;
t = line.mid(index + 1);
index = t.lastIndexOf("]");
if(index < 0)
{
map.insert(time, t);
}
else
{
t = t.mid(index + 1);
map.insert(time, t);
getTime(t);
qDebug()<<“time123:”<<time;
}
}
}

void MainWindow::initlrc(const QString& fileName)
{
QMap<int, QString> map;
QString l;
QFile file(“C:\Users\44637\Music\QTLrc\”+fileName);
if(file.exists()){
qDebug()<<“文件存在”;
}
else{
qDebug()<<“文件不存在”;
}

if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){return; }QTextCodec *codec = QTextCodec::codecForName("GBK"); while(!file.atEnd()) {QString line = codec->toUnicode(file.readLine());QString s(line);if(s.length()<4)continue;if(s.startsWith("[ti:")){getHeader("[ti:", s);map.insert(0, s);ui->topmusicname->setText(s);continue;}else if(s.startsWith("[ar:")){getHeader("[ar:", s);map.insert(1000, s);ui->singer->setText("歌手:"+s);continue;}else if(s.startsWith("[al:")){getHeader("[al:", s);map.insert(2000, s);ui->album->setText("專輯:"+s);continue;}else if(s.startsWith("[by:")){getHeader("[by:", s);map.insert(3000, s);continue;}else{getTime(s);}

}
file.close();

}

void MainWindow::button_style(){
ui->Buttonstart->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\start.jpg”));
ui->Buttonlast->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\last.jpg”));
ui->Buttonnext->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\next.png”));
ui->Buttonmute->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\volume.jpg”));
ui->Buttonvideo_qr->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\MV.png”));
ui->Buttonvideo_wm->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\MV.png”));
ui->Buttonvideo_cq->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\MV.png”));
}

void MainWindow::changestartbutton(){
if(isPlay)
ui->Buttonstart->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\pause.jpg”));
else
ui->Buttonstart->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\start.jpg”));
}

void MainWindow::cleanmap(){
map.clear();
}

void MainWindow::playto(int i,int )
{
PlayerList->setCurrentIndex(i);
isPlay=true;
changestartbutton();
QString musicLrc=lrcList.at(i);
initlrc(musicLrc);
Player->play();
}

void MainWindow::video_click_wm(){
v1= new VideoPlayer(this);
v1->setModal(false);
v1->show();
}

void MainWindow::video_click_qr(){
v_qr= new videoplayer_qr(this);
v_qr->setModal(false);
v_qr->show();
}

void MainWindow::video_click_cq(){
v_cq= new videoplayer_cq(this);
v_cq->setModal(false);
v_cq->show();
}

void MainWindow::mute(){
if(!ismute){
Player -> setVolume(0);
//ui->voiceslider->value();
ui->Buttonmute->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\mute.png”));
ismute=true;
}
else{
Player -> setVolume(100);
ui->Buttonmute->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\volume.jpg”));
ismute=false;
}
}

void MainWindow::fastForward(){
qint64 position=Player->position();
qDebug()<<“position”<<position;
position=position+5000;
ui->Progressbar->setValue(position/1000);
Player -> setPosition(position);//若是滑塊改變位置,則改變音樂進度
}

void MainWindow::fastBack(){
qint64 position=Player->position();
qDebug()<<“position”<<position;
position=position-5000;
ui->Progressbar->setValue(position/1000);
Player -> setPosition(position);//若是滑塊改變位置,則改變音樂進度

}

videoplayer.h代碼以下(視頻播放和音樂播放差很少):ide

#ifndef VIDEOPLAYER_H
#define VIDEOPLAYER_H

#include
#include
#include
#include
#include
#include

namespace Ui {
class VideoPlayer;
}

class VideoPlayer : public QDialog
{
Q_OBJECT

public:
explicit VideoPlayer(QWidget *parent = nullptr);
~VideoPlayer();

public slots:
void init();
void slotButtonStart();
void slotstop();
void closeEvent(QCloseEvent *);
void volumChange(int);
void positionChange(qint64 position);
void seekChange(int position); //滑動滑動條快進、倒退音樂,且音樂已播放時長也跟著變化
void videoTime();
void changestartbutton();
void button_style();
void mute();

private:
QMediaPlayer* player;
QVideoWidget* videoWidget;
QMediaPlaylist* playlist;
Ui::VideoPlayer *ui;
bool isPlay_wm=false;
bool ismute=false;
int moved;

};

#endif // VIDEOPLAYER_H

videoplayer.cpp代碼以下:ui

#include “videoplayer.h”
#include “ui_videoplayer.h”
#include
#include
#include

VideoPlayer::VideoPlayer(QWidget *parent) :
QDialog(parent),
ui(new Ui::VideoPlayer)
{
ui->setupUi(this);
qDebug()<<“執(zhí)行到此處”;
connect(ui->Buttonstart,&QPushButton::clicked,this,&VideoPlayer::changestartbutton);
connect(ui->Buttonmute,&QPushButton::clicked,this,&VideoPlayer::mute);
init();
connect(ui->Buttonstart,&QPushButton::clicked,this,&VideoPlayer::slotButtonStart);
connect(ui->voiceSlider, SIGNAL(sliderMoved(int)), this, SLOT(volumChange(int)));
connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(positionChange(qint64)));
connect(ui->timeSlider,SIGNAL(sliderMoved(int)),this,SLOT(seekChange(int)));
connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(videoTime()));
}

VideoPlayer::~VideoPlayer()
{
slotstop();
delete ui;
}

void VideoPlayer::init(){
//widget=new QWidget;
button_style();
player= new QMediaPlayer;
videoWidget=new QVideoWidget;
playlist=new QMediaPlaylist;
playlist->clear();
playlist->addMedia(QUrl::fromLocalFile(“C:\Users\44637\Music\MV\陳奕迅-咱們MV.mp4”));
player->setPlaylist(playlist);

QFile file("C:\\Users\\44637\\Music\\MV\\陳奕迅-咱們MV.mp4"); if(!file.open(QIODevice::ReadOnly))qDebug() << "Could not open file";player->setVideoOutput(videoWidget); player->setPlaylist(playlist); videoWidget->setAutoFillBackground(true); QPalette qplte; qplte.setColor(QPalette::Window, QColor(0,0,0)); videoWidget->setPalette(qplte); ui->verticalLayout->addWidget(videoWidget); player->play(); isPlay_wm=true;

}

void VideoPlayer::slotButtonStart(){

if(!isPlay_wm){isPlay_wm=true;//Player->setVolume(100);player->play();//musicTime();//qApp->quit();} else{isPlay_wm=false;player->pause();//musicTime(); }

}

void VideoPlayer::slotstop(){
player->stop();
playlist->clear();
//player->
}

void VideoPlayer::closeEvent(QCloseEvent *event){
slotstop();
event->accept();
}

void VideoPlayer::volumChange(int vol)
{
player -> setVolume(vol);
}

void VideoPlayer::positionChange(qint64 position)
{
ui->timeSlider->setMaximum(player->duration() / 1000);//設置滑塊的長度范圍為音樂長.00度
ui->timeSlider->setValue(position / 1000);//若是音樂進度改變,則改變滑塊顯示位置
moved = position;//讓播放時間等于音樂進度(毫秒)
QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//設置時間
ui->currenttime ->setText(moveTime.toString(“mm:ss”));//顯示時間
QString t=moveTime.toString(“mm:ss”);
QString mm = t.mid(0,2);
QString ss = t.mid(3, 2);
int m = mm.toInt();
int s = ss.toInt();
int time = m601000 + s*1000;
qDebug()<<“int”<<time;
}

void VideoPlayer::seekChange(int position)
{
player -> setPosition(position * 1000);//若是滑塊改變位置,則改變音樂進度
moved = position * 1000;//讓播放時間等于音樂進度(毫秒)
QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//設置時間
}

void VideoPlayer::videoTime(){

qint64 time = player->duration();QTime Time(0,(time % (1000 * 60 * 60)) / (1000 * 60),(time % (1000 * 60)) / 1000);ui->videotime->setText(Time.toString("mm:ss"));qDebug()<<"time:"<<Time;

}

void VideoPlayer::changestartbutton(){
if(!isPlay_wm)
ui->Buttonstart->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\pause.jpg”));
else
ui->Buttonstart->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\start.jpg”));
}

void VideoPlayer::button_style(){
ui->Buttonstart->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\pause.jpg”));
ui->Buttonmute->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\volume.jpg”));
}

void VideoPlayer::mute(){
if(!ismute){
player -> setVolume(0);
ui->Buttonmute->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\mute.png”));
ismute=true;
}
else{
player -> setVolume(100);
ui->Buttonmute->setIcon(QIcon(“E:\QT\QTcode\MusicPlayer\icon\volume.jpg”));
ismute=false;
}
}

整體運行界面以下:
在這里插入圖片描述
在這里插入圖片描述
一些關(guān)鍵方法和思路:
(1)導入歌曲:
從本地文件將歌曲名和歌曲的歌詞導入,獲取文件路徑下全部的音樂文件和歌詞文件,生成兩個QStringList類型的列表。同時將歌名添加到顯示歌名的組件上。同時實例化播放器和播放列表,將列表逐項加載到播放列表上,并將播放列表加載到播放器上。
(2)音樂、視頻進度條:
設置滑塊的長度范圍為音樂長0.001倍,若是音樂進度發(fā)生改變,則同時改變滑塊位置,若是滑塊改變位置,則改變音樂進度。同時設置時間,讓播放時間等于音樂進度(毫秒)并用Qlabel組件顯示。
(3)顯示歌詞:(我的以為這是個最難的點,參考了大神的思路,加上本身的思考,搞了很久才搞出來😂)
mp3歌詞文件是以lrc為擴展名的文件,屬于純文本格式文件,經(jīng)過解析mp3純文本格式的歌詞文件(“XXX.lrc”),實現(xiàn)歌詞的同步顯示。
LRC歌詞是一種包含著“[:]”形式的“標簽(tag)”、基于純文本的歌詞專用格式。
標簽分為“標識標簽”和“時間標簽”兩種,下面①~⑤為“標識標簽”,⑥為“時間標簽”。
①[ti:曲名]
②[ar:藝人名]
③[al:專輯名]
④[by:編者(指編輯LRC歌詞的人)]
⑤[offset:時間補償值] 其單位是毫秒,正值表示總體提早,負值相反。用于整體調(diào)整顯示的快慢。
⑥[分:秒.厘秒]歌詞內(nèi)容
中括號里邊是歌曲內(nèi)容顯示時的開始時間,“:”前面為分鐘,“:”后面為秒,其中“.”前面為秒,“.”后面為厘秒(一秒的百分之一);中括號外邊是歌詞內(nèi)容。
讀取對應音樂名字的歌詞文件,逐行讀取歌詞,用QMap格式儲存,不一樣標簽開頭用不一樣的key值儲存。
獲取每一個標簽中的時間,將時間和相對應的歌詞以鍵值對的形式儲存到QMap中。
顯示歌詞將當前時間以參數(shù)的形式傳入,將時間對應的值讀出。

總結(jié)

以上是生活随笔為你收集整理的基于QT实现简单的音乐播放器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日日夜夜精品视频免费 | 成人激情视频在线观看 | 亚洲图片自拍偷拍区 | 男女视频久久 | 欧美人妖老妇 | av中文字幕观看 | 伊伊成人 | 亚洲高清免费 | 美日韩av在线| 91久久色| 国模小丫大尺度啪啪人体 | 婷婷国产在线 | 在线国产一区 | 国产美女喷水 | 青青草视频在线观看 | 亚洲成人免费av | 久久丫精品久久丫 | www成人网 | 成人免费看片在线观看 | 久久香蕉影院 | 三日本三级少妇三级99 | 在线观看www | 无码精品国产一区二区三区免费 | 99ri国产| 超碰免费成人 | 国产永久精品大片wwwapp | 黄色一级在线 | 天天摸天天操天天射 | 男女黄色网 | 亚洲国产精品视频在线观看 | 日韩精品导航 | 精品自拍一区 | 狠狠艹| 亚洲欧美一区二区三区不卡 | 96av在线视频 | 91av色 | 国产女人高潮的av毛片 | 强乱中文字幕av一区乱码 | 久久资源365 | 久久久久国产精品视频 | 精品国产污污免费网站入口 | 国产女人与zoxxxx另类 | 李华月全部毛片 | 黄色小视频在线看 | www.污网站 | 精品国产一区在线 | 69影院少妇在线观看 | 欧美日本韩国在线 | www.欧美精品 | 精品自拍av| 福利视频在线导航 | 久久亚洲美女 | 中文字幕免费在线观看视频 | 中文字幕日韩亚洲 | 男人把女人捅爽 | 久久国产网 | 97超碰在线播放 | 国产chinese男男网站大全 | 国产精品色在线网站 | 荷兰女人裸体性做爰 | 无码精品视频一区二区三区 | 国产做受麻豆动漫 | 免费国产视频在线观看 | 羞视频在线观看 | 秋霞国产午夜精品免费视频 | 亚洲综合在线网 | 天天干夜夜看 | 悟空影视大全免费高清观看在线 | 午夜av中文字幕 | 91免费高清在线观看 | 男人天堂网站 | 麻豆伦理片 | 蜜桃视频久久一区免费观看入口 | 国产成人 综合 亚洲 | 日韩夫妻性生活 | 欧美精品在线观看 | 国产精品一级二级三级 | 182tv午夜 | 18禁免费无码无遮挡不卡网站 | 蛇女欲潮性三级 | 暗呦丨小u女国产精品 | 欧美日韩成人一区二区 | 青草精品视频 | 免费极品av一视觉盛宴 | 黄色三级免费观看 | 色图18p| 久久精品7 | 经典毛片| www.com毛片 | 成人性视频网站 | 一区二区精品区 | 大吊av| 欧美视频精品 | 国产超碰人人 | 免费的黄色的网站 | 男人操女人的视频 | 日韩一片 | 亚洲国产精品久久久久爰色欲 | 国产特级片 |