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

首頁 > 系統 > iOS > 正文

iOS中視頻播放的基本方法總結

2019-10-21 18:40:15
字體:
來源:轉載
供稿:網友

前言

本文總結了iOS中最常見的視頻播放方法,不同的方法都各具特點,我希望能夠總結它們的不同,方便在開發中選擇合適的技術方案。

Apple為我們提供了多種方法來實現視頻播放,包括MPMoviePlayerController,MPMoviePlayerViewController,AVPlayer,AVPlayerViewController等。而值得注意的是,上述的MPMoviePlayerController與MPMoviePlayerViewController在iOS9.0之后被棄用。雖說如此,這還是將它們的用法總結了一下,下面我們簡單來了解一下四種播放方式的區別:

iOS,視頻播放

iOS播放視頻.png

溫馨提示:代碼更直觀,首先附上本文Demo

一、MPMoviePlayerController

1.播放視頻

MPMoviewPlayerController繼承于NSObject,使用它播放視頻需要將其自帶的視頻View添加到視圖控制器的View上才能顯示視頻,使用步驟如下:

第一步:引用MediaPlayer框架,聲明視圖控制器屬性PlayerController#import <mediaplayer mediaplayer.h>@property(nonatomic,strong)MPMoviePlayerController *playerController;
//第二步:獲取視頻路徑,創建播放器//本地視頻路徑NSString* localFilePath=[[NSBundle mainBundle]pathForResource:@"不能說的秘密" ofType:@"mp4"];NSURL *localVideoUrl = [NSURL fileURLWithPath:localFilePath];//網絡視頻路徑NSString *webVideoPath = @"http://api.junqingguanchashi.net/yunpan/bd/c.php?vid=/junqing/1115.mp4";NSURL *webVideoUrl = [NSURL URLWithString:webVideoPath];self.playerController =[[MPMoviePlayerController alloc]initWithContentURL:webVideoUrl];
//第三步:設置Frame將播放器View添加到視圖控制器View上self.playerController.view.frame = CGRectMake(0, 10, kDeviceWidth, 300);[self.view addSubview: self.playerController.view];
//第四步:設置播放器屬性//設置控制面板風格:無,嵌入,全屏,默認self.playerController.controlStyle = MPMovieControlStyleDefault;//設置是否自動播放(默認為YES)self.playerController.shouldAutoplay = NO;//設置播放器顯示模式,類似于圖片的處理,設置Fill有可能造成部分區域被裁剪self.playerController.scalingMode = MPMovieScalingModeAspectFit;//設置重復模式self.playerController.repeatMode = MPMovieRepeatModeOne;
//第五步:播放視頻//播放前的準備,會中斷當前正在活躍的音頻會話[ self.playerController prepareToPlay];//播放視頻,設置了自動播放之后可以不調用此方法//[ self.playerController play];
//第六步:在退出界面的時候,關閉播放器,移除通知- (void)dealloc{ //當前視圖控制器pop之后并不會關閉播放,需要手動關閉 [self.playerController stop]; self.playerController = nil; //移除播放器相關的通知 [[NSNotificationCenter defaultCenter] removeObserver:self];}

2.視頻播放相關的通知

MPMoviePlayerController有關視頻播放的很多狀態控制都是通過通知完成的,尤其是播放在線視頻的時候,我們不僅監控視頻加載是否成功,也會監控是視頻緩存進度等。這里演示一些常用的通知如下:

//關于通知的使用(還有很多通知可以監聽,可查看SDK)NSNotificationCenter *notificaionCenter = [NSNotificationCenter defaultCenter];//監聽播放器狀態的變化[notificaionCenter addObserver:self selector:@selector(playerStateChanged:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];//監聽播放完成[notificaionCenter addObserver:self selector:@selector(playerFinished) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];//監聽切換到全屏[notificaionCenter addObserver:self selector:@selector(palyerChangeFullScreen) name:MPMoviePlayerDidEnterFullscreenNotification object:nil];//監聽截屏操作完成[notificaionCenter addObserver:self selector:@selector(playerCaptureFinished:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil];
#pragma mark - 監聽通知的響應方法//播放狀態變化,注意播放完成時的狀態是暫停- (void)playerStateChanged:(NSNotification *)notificaion{ switch (self.playerController.playbackState) { case MPMoviePlaybackStateStopped:{ NSLog(@"播放停止"); break; } case MPMoviePlaybackStatePlaying:{ NSLog(@"播放器正在播放"); break; } case MPMoviePlaybackStatePaused:{ NSLog(@"播放器暫停"); break; } case MPMoviePlaybackStateInterrupted:{ NSLog(@"播放器中斷"); break; } case MPMoviePlaybackStateSeekingForward:{ NSLog(@"播放器快進"); break; } case MPMoviePlaybackStateSeekingBackward:{ NSLog(@"播放器快退"); break; } default: break; }}//視頻播放結束- (void)playerFinished{ NSLog(@"playerFinished:播放結束");}//播放器切換到了全屏- (void)palyerChangeFullScreen{ NSLog(@"palyerChangeFullScreen:播放器進入全屏");}//播放器截屏結束- (void)playerCaptureFinished:(NSNotification *)notification{ //獲取并顯示截圖 UIImage *image=notification.userInfo[MPMoviePlayerThumbnailImageKey]; self.captureImgView.image = image;}

3.實現截屏

//添加一個按鈕,點擊開始截屏_captureBtn = [[UIButton alloc] initWithFrame:CGRectMake(30, CGRectGetMaxY(self.playerController.view.frame) + 30, kDeviceWidth - 30 * 2, 50)];_captureBtn.backgroundColor = [UIColor purpleColor];[_captureBtn setTitle:@"截圖當前屏幕" forState: UIControlStateNormal];[_captureBtn addTarget:self action:@selector(captureCurrentScreenImg) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:_captureBtn];//添加一個ImgView 顯示截屏后的圖片_captureImgView = [[UIImageView alloc] initWithFrame:CGRectMake((kDeviceWidth - 150)/2, CGRectGetMaxY(_captureBtn.frame) + 20, 150, 150)]; _captureImgView.contentMode = UIViewContentModeScaleAspectFit;_captureImgView.backgroundColor = [UIColor grayColor];[self.view addSubview:_captureImgView];
//截取當前屏幕- (void)captureCurrentScreenImg{ [self.playerController requestThumbnailImagesAtTimes:@[@(self.playerController.currentPlaybackTime)] timeOption:MPMovieTimeOptionNearestKeyFrame];}
//監聽通知:播放器截屏結束,得到圖片并顯示截圖- (void)playerCaptureFinished:(NSNotification *)notification{ UIImage *image=notification.userInfo[MPMoviePlayerThumbnailImageKey]; self.captureImgView.image = image;}

二、MPMoviePlayerViewController

MPMovicePlayerViewControlle只能全屏幕播放視頻,它是一個包含了MPMoviePlayerController類型屬性的特殊視圖控制器,因此它是通過模態視圖彈出的方式顯示視頻的。理解了這個,我們就可以知道在使用MPMovicePlayerViewController的時候我們可以通過它的MPMoviePlayerController屬性設置很多播放器的屬性了,具體用法和MPMoviePlayerController相同,就不過多的解釋了,播放視頻的代碼示例如下;

//第一步:獲取視頻路徑//本地視頻NSString* localFilePath=[[NSBundle mainBundle]pathForResource:@"不能說的秘密" ofType:@"mp4"];NSURL *localVideoUrl = [NSURL fileURLWithPath:localFilePath];//在線視頻//NSString *webVideoPath = @"http://api.junqingguanchashi.net/yunpan/bd/c.php?vid=/junqing/1115.mp4";//NSURL *webVideoUrl = [NSURL URLWithString:webVideoPath];//第二步:創建視頻播放器MPMoviePlayerViewController *playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:localVideoUrl];//第三步:設置播放器屬性//通過moviePlayer屬性設置播放器屬性(與MPMoviePlayerController類似)playerViewController.moviePlayer.scalingMode = MPMovieScalingModeFill;//第四步:跳轉視頻播放界面[self presentViewController:playerViewController animated:YES completion:nil];

三、AVPlayer

AVPlayer相比上述兩種方式,播放視頻功能更加強大,使用也十分靈活,因為它更加接近底層。但是AVPlayer本身是不能直接顯示視頻的,必須創建一個播放層AVPlayerLayer并將其添加到其他的視圖Layer上才能顯示。

1. 使用AVPlayer需要了解的常用類

  • AVAsset:一個用于獲取多媒體信息的抽象類,但不能直接使用
  • AVURLAsset:AVAsset的子類,可以根據一個URL路徑創建一個包含媒體信息的AVURLAsset對象
  • AVPlayerItem:一個媒體資源管理對象,用于管理視頻的基本信息和狀態,一個AVPlayerItem對應一個視頻資源
  • AVPlayer:負責視頻播放、暫停、時間控制等操作
  • AVPlayerLayer:負責顯示視頻的圖層,如果不設置此屬性,視頻就只有聲音沒有圖像

2. AVPlayer的使用步驟

//第一步:引用AVFoundation框架,添加播放器屬性#import <AVFoundation/AVFoundation.h>@property (nonatomic,strong)AVPlayer *player;//播放器對象@property (nonatomic,strong)AVPlayerItem *currentPlayerItem;
//第二步:獲取播放地址URL//本地視頻路徑NSString* localFilePath=[[NSBundle mainBundle]pathForResource:@"不能說的秘密" ofType:@"mp4"];NSURL *localVideoUrl = [NSURL fileURLWithPath:localFilePath];//網絡視頻路徑NSString *webVideoPath = @"http://api.junqingguanchashi.net/yunpan/bd/c.php?vid=/junqing/1129.mp4";NSURL *webVideoUrl = [NSURL URLWithString:webVideoPath];
//第三步:創建播放器(四種方法)//如果使用URL創建的方式會默認為AVPlayer創建一個AVPlayerItem//self.player = [AVPlayer playerWithURL:localVideoUrl];//self.player = [[AVPlayer alloc] initWithURL:localVideoUrl];//self.player = [AVPlayer playerWithPlayerItem:playerItem];AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:webVideoUrl];self.currentPlayerItem = playerItem;self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
//第四步:創建顯示視頻的AVPlayerLayer,設置視頻顯示屬性,并添加視頻圖層//contentView是一個普通View,用于放置視頻視圖/* AVLayerVideoGravityResizeAspectFill等比例鋪滿,寬或高有可能出屏幕 AVLayerVideoGravityResizeAspect 等比例 默認 AVLayerVideoGravityResize 完全適應寬高*/AVPlayerLayer *avLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];avLayer.videoGravity = AVLayerVideoGravityResizeAspect;avLayer.frame = _containerView.bounds;[_containerView.layer addSublayer:avLayer];
//第六步:執行play方法,開始播放//本地視頻可以直接播放//網絡視頻需要監測AVPlayerItem的status屬性為AVPlayerStatusReadyToPlay時方法才會生效[self.player play];

3. 添加屬性觀察

一個AVPlayerItem對象對應著一個視頻,我們需要通過AVPlayerItem來獲取視頻屬性。但是AVPlayerItem必須是在視頻資源加載到可以播放的時候才能使用,這是受限于網絡的原因。解決這一問題,我們需要使用KVO監測AVPlayerItem的status屬性,當其為AVPlayerItemStatusReadyToPlay的時候我們才能獲取視頻相關屬性。相關的代碼示例如下:

//1.注冊觀察者,監測播放器屬性//觀察Status屬性,可以在加載成功之后得到視頻的長度[self.player.currentItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];//觀察loadedTimeRanges,可以獲取緩存進度,實現緩沖進度條[self.player.currentItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];
//2.添加屬性觀察- (void)observeValueForKeyPath:(NSString *)keyPath  ofObject:(id)object  change:(NSDictionary *)change  context:(void *)context { AVPlayerItem *playerItem = (AVPlayerItem *)object; if ([keyPath isEqualToString:@"status"]) { //獲取playerItem的status屬性最新的狀態 AVPlayerStatus status = [[change objectForKey:@"new"] intValue]; switch (status) { case AVPlayerStatusReadyToPlay:{ //獲取視頻長度 CMTime duration = playerItem.duration;  //更新顯示:視頻總時長(自定義方法顯示時間的格式) self.totalNeedPlayTimeLabel.text = [self formatTimeWithTimeInterVal:CMTimeGetSeconds(duration)]; //開啟滑塊的滑動功能 self.sliderView.enabled = YES; //關閉加載Loading提示 [self showaAtivityInDicatorView:NO]; //開始播放視頻 [self.player play]; break; } case AVPlayerStatusFailed:{//視頻加載失敗,點擊重新加載 [self showaAtivityInDicatorView:NO];//關閉Loading視圖 self.playerInfoButton.hidden = NO; //顯示錯誤提示按鈕,點擊后重新加載視頻 [self.playerInfoButton setTitle:@"資源加載失敗,點擊繼續嘗試加載" forState: UIControlStateNormal]; break; } case AVPlayerStatusUnknown:{ NSLog(@"加載遇到未知問題:AVPlayerStatusUnknown"); break; } default: break; } } else if ([keyPath isEqualToString:@"loadedTimeRanges"]) { //獲取視頻緩沖進度數組,這些緩沖的數組可能不是連續的 NSArray *loadedTimeRanges = playerItem.loadedTimeRanges; //獲取最新的緩沖區間 CMTimeRange timeRange = [loadedTimeRanges.firstObject CMTimeRangeValue]; //緩沖區間的開始的時間 NSTimeInterval loadStartSeconds = CMTimeGetSeconds(timeRange.start); //緩沖區間的時長 NSTimeInterval loadDurationSeconds = CMTimeGetSeconds(timeRange.duration); //當前視頻緩沖時間總長度 NSTimeInterval currentLoadTotalTime = loadStartSeconds + loadDurationSeconds; //NSLog(@"開始緩沖:%f,緩沖時長:%f,總時間:%f", loadStartSeconds, loadDurationSeconds, currentLoadTotalTime); //更新顯示:當前緩沖總時長 _currentLoadTimeLabel.text = [self formatTimeWithTimeInterVal:currentLoadTotalTime]; //更新顯示:視頻的總時長 _totalNeedLoadTimeLabel.text = [self formatTimeWithTimeInterVal:CMTimeGetSeconds(self.player.currentItem.duration)]; //更新顯示:緩沖進度條的值 _progressView.progress = currentLoadTotalTime/CMTimeGetSeconds(self.player.currentItem.duration); }}
//轉換時間格式的方法- (NSString *)formatTimeWithTimeInterVal:(NSTimeInterval)timeInterVal{ int minute = 0, hour = 0, secend = timeInterVal; minute = (secend % 3600)/60; hour = secend / 3600; secend = secend % 60; return [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, secend];}

4. 獲取當前播放時間與總時間

在此之前我們需要首先了解一個數據類型,也就是上述操作中的CMTime, 在AVPlayer的使用中我們會經常用到它,其實CMTime是一個結構體如下:

 typedef struct{ CMTimeValue value; // 幀數 CMTimeScale timescale; // 幀率(影片每秒有幾幀) CMTimeFlags flags; CMTimeEpoch epoch; } CMTi

在上面的操作中我們看到AVPlayerItem的Duration屬性就是一個CMTime類型的數據。所以獲取視頻的總時長(秒)需要duration.value/duration.timeScale。當然系統也為我們提供了CMTimeGetSeconds函數更加方便計算:

總時長: duration.value == CMTimeGetSeconds(duration) 。

在快進視頻到某一個位置的時候我們也需要創建CMTime作為參數,那么CMTime的創建方法有兩種:

//方法1:CMTimeMakeWithSeconds(Flout64 seconds, int32_t scale)//方法2:CMTimeMake(int64_t value, int32_t scale)//注:兩者的區別在于方法一的第一個參數可以是float

至于獲取視頻的總時間在上述代碼中已有體現,是在檢測播放狀態變為AVPlayerStatusReadyToPlay的時候獲取的

//視頻總時長,在AVPlayerItem狀態為AVPlayerStatusReadyToPlay時獲取CMTime duration = self.player.currentItem.duration;CGFloat totalTime = CMTimeGetSeconds(duration);//當前AVPlayer的播放時長CMTime cmTime = self.player.currentTime;CGFloat currentTime = CMTimeGetSeconds(cmTime);

5. 播放進度與狀態的刷新

實時更新當前播放時間,這時候我們不必使用定時器,因為AVPlayer已經提供了方法:
addPeriodicTimeObserverForInterval: queue: usingBlock。當播放進度改變的時候方法中的回調會被執行。我們可以在這里做刷新時間的操作,代碼示例如下:

__weak __typeof(self) weakSelf = self;[self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) { //當前播放的時間 NSTimeInterval currentTime = CMTimeGetSeconds(time); //視頻的總時間 NSTimeInterval totalTime = CMTimeGetSeconds(weakSelf.player.currentItem.duration); //設置滑塊的當前進度 weakSelf.sliderView.value = currentTime/totalTime; //設置顯示的時間:以00:00:00的格式 weakSelf.currentTimeLabel.text = [weakSelf formatTimeWithTimeInterVal:currentTime]; }];

6. 滑塊拖拽修改視頻播放進度

//UISlider的響應方法:拖動滑塊,改變播放進度- (IBAction)sliderViewChange:(id)sender { if(self.player.status == AVPlayerStatusReadyToPlay){ NSTimeInterval playTime = self.sliderView.value * CMTimeGetSeconds(self.player.currentItem.duration); CMTime seekTime = CMTimeMake(playTime, 1); [self.player seekToTime:seekTime completionHandler:^(BOOL finished) { }]; }}

四、AVPlayerViewController

AVPlayerViewController是iOS8新增視頻框架AVKit中的一個播放器類。由于iOS9棄用前兩種播放器類的原因,AVPlayerViewController也將變得更加常用。AVPlayerViewController適合開發播放界面要求不是很高的應用。其相比AVPlayer的使用更加方便,但是原理上還是AVPlayerViewController包含了一個AVPlayer對象。
AVPlayerViewController有兩種播放視頻的方式:

第一種:直接彈出模態視圖控制器播放

//步驟1:獲取視頻路徑NSString *webVideoPath = @"http://api.junqingguanchashi.net/yunpan/bd/c.php?vid=/junqing/1213.mp4";NSURL *webVideoUrl = [NSURL URLWithString:webVideoPath];//步驟2:創建AVPlayerAVPlayer *avPlayer = [[AVPlayer alloc] initWithURL:webVideoUrl];//步驟3:使用AVPlayer創建AVPlayerViewController,并跳轉播放界面AVPlayerViewController *avPlayerVC =[[AVPlayerViewController alloc] init];avPlayerVC.player = avPlayer;[self presentViewController:avPlayerVC animated:YES completion:nil];

第二種:添加AVPlayerViewController的View到父視圖上播放。

使用這種方式播放的優點在于可以指定播放界面的原始尺寸大小,但是值得注意的是AVPlayerViewController必須被當前視圖控制器所持有,以防止被當做局部變量被釋放。為了滿足這一條件,我們可以將AVPlayerViewController作為屬性,也可以使用addChildViewController方法將其作為當前視圖控制器的子視圖控制器,示例代碼如下:

//步驟1:獲取視頻路徑NSString *webVideoPath = @"http://api.junqingguanchashi.net/yunpan/bd/c.php?vid=/junqing/1213.mp4";NSURL *webVideoUrl = [NSURL URLWithString:webVideoPath];//步驟2:創建AVPlayerAVPlayer *avPlayer = [[AVPlayer alloc] initWithURL:webVideoUrl];//步驟3:使用AVPlayer創建AVPlayerViewController,并跳轉播放界面AVPlayerViewController *avPlayerVC =[[AVPlayerViewController alloc] init];avPlayerVC.player = avPlayer;//步驟4:設置播放器視圖大小avPlayerVC.view.frame = CGRectMake(25, 0, 320, 300);//特別注意:AVPlayerViewController不能作為局部變量被釋放,否則無法播放成功//解決1.AVPlayerViewController作為屬性//解決2:使用addChildViewController,AVPlayerViewController作為子視圖控制器[self addChildViewController:avPlayerVC];[self.view addSubview:avPlayerVC.view];

最后總結:

以上就是iOS視頻播放的基本方法,但這里也僅限一些基礎的播放需求。若要實現更為復雜的播放功能,仍然有很多東西需要我們繼續深入研究,加油!

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩经典一区二区三区| 亚洲精品美女免费| 亚洲国产精品va在线观看黑人| 亚洲国产成人在线播放| 日韩在线资源网| 亚洲亚裔videos黑人hd| 亚洲女同性videos| 日韩欧美在线观看| 91网站在线免费观看| 色婷婷综合久久久久中文字幕1| 日韩欧美成人免费视频| 欧美最猛性xxxx| 7777免费精品视频| 色噜噜狠狠狠综合曰曰曰| 久久精品国产清自在天天线| 国产成人精品免费视频| 亚洲国产欧美精品| 日韩黄色在线免费观看| 91精品国产综合久久久久久蜜臀| 亚洲高清av在线| 91在线视频九色| 久久国产精品久久久久| 精品人伦一区二区三区蜜桃网站| 欧美成人合集magnet| 日产精品99久久久久久| 欧美激情在线有限公司| 午夜美女久久久久爽久久| 国产91久久婷婷一区二区| 久久精品成人欧美大片| 欧美午夜久久久| 国产精品久久久久久久美男| 中文字幕在线亚洲| 欧美成人激情视频| 97av在线视频| 亚洲一二在线观看| **欧美日韩vr在线| 亚洲一区二区三| 91亚洲精品久久久| 日韩综合视频在线观看| 欧美精品电影免费在线观看| 欧美日韩国产在线播放| 欧美疯狂做受xxxx高潮| 国内精品久久久久久久久| 91免费高清视频| 久久免费高清视频| 美女999久久久精品视频| 中文字幕亚洲一区在线观看| 在线播放国产一区中文字幕剧情欧美| 国产精品夜色7777狼人| 91精品视频在线免费观看| 国产日本欧美一区二区三区在线| 日韩成人激情视频| 九九热精品视频在线播放| 97视频免费看| 国产一区二区在线免费视频| 久久久免费精品| 国产精品第七影院| 亚洲精品国产精品国自产在线| 伊人激情综合网| 亚洲va国产va天堂va久久| 国产区精品视频| 亚洲综合精品伊人久久| 精品久久久精品| 91亚洲精品在线| 日产日韩在线亚洲欧美| 在线看片第一页欧美| 亚洲一区二区久久| 欧美成人精品一区| 欧美在线视频观看免费网站| 91成品人片a无限观看| 中文字幕国产亚洲| 2023亚洲男人天堂| 日韩av中文字幕在线| 91精品在线一区| 国内精品视频一区| 成人亚洲欧美一区二区三区| 欧美性受xxx| 欧美亚洲视频一区二区| 色视频www在线播放国产成人| 琪琪亚洲精品午夜在线| 国产欧美精品一区二区三区-老狼| 精品久久久久久久久久| 97精品国产97久久久久久春色| 国内精品一区二区三区四区| 日韩在线视频观看| 久久国内精品一国内精品| 97视频国产在线| 久久久999精品免费| 亚洲欧美另类中文字幕| 亚洲男人天堂久| 国产原创欧美精品| 美女国内精品自产拍在线播放| 国产亚洲激情视频在线| 久久精品影视伊人网| 欧美www视频在线观看| 国产精品专区h在线观看| 欧美黄色性视频| 亚洲一级一级97网| 国产欧美精品一区二区三区介绍| 一区二区三区精品99久久| 亚洲人成网站999久久久综合| 欧洲中文字幕国产精品| 欧美日韩精品在线视频| 久久不射热爱视频精品| 日本一区二区三区四区视频| 精品视频久久久久久久| 亚洲品质视频自拍网| 精品国内产的精品视频在线观看| 国产精品老牛影院在线观看| 久久久久久久国产精品视频| 久久人人看视频| 久久国产精品首页| 日韩av在线免播放器| 久久影视电视剧免费网站清宫辞电视| 日韩欧美国产一区二区| 亚洲国产精品女人久久久| 欧美性受xxx| 亚洲夜晚福利在线观看| 2019中文字幕免费视频| 日韩69视频在线观看| 国产精品精品视频| 欧美在线观看视频| 九色91av视频| 久久久综合免费视频| 成人网在线观看| 91产国在线观看动作片喷水| 国产精品18久久久久久麻辣| 欧美激情视频网址| 日韩中文娱乐网| 国产精品久久久久久久久久新婚| 亚洲国产精品热久久| 国产精品流白浆视频| 国产欧美日韩最新| 这里只有精品丝袜| 欧美在线日韩在线| 国产精品久久久久久av下载红粉| 欧美精品一二区| 国产免费成人av| 欧美激情精品久久久久久大尺度| 国产99久久精品一区二区永久免费| 精品一区二区三区三区| 久久影视电视剧免费网站清宫辞电视| 久久久久久久97| 久久久www成人免费精品| 欧美与欧洲交xxxx免费观看| 亚洲肉体裸体xxxx137| 国产中文字幕91| 97精品国产97久久久久久免费| 黑人精品xxx一区一二区| 国产精品xxxxx| 成人激情在线观看| 国产一区二区欧美日韩| 精品亚洲一区二区三区四区五区| 亚洲国产日韩一区| 91福利视频在线观看| 亚洲国产精品99久久| 亚洲人成毛片在线播放| 日韩69视频在线观看| 欧美精品电影免费在线观看| 中文字幕亚洲欧美日韩2019| 国产日产久久高清欧美一区| 日韩欧美在线免费| 国产一区二区三区18| 一区国产精品视频|