精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HarmonyOS上視頻跨設備協同技術超全詳解

開發 OpenHarmony
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[388995]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

1. 介紹

您將會學到什么

● 如何使用PageSlider、PageSliderIndicator和ListContainer編寫定時滾動及可滑動的頁面。

● 如何使用分布式能力實現跨設備視頻播放。

● 如何使用HarmonyOS IDL跨進程通信實現遠程控制視頻播放。

技能要求

● HarmonyOS Player接口熟練使用

● 基本組件熟練使用

🕮 說明

本篇Codelab所附代碼適合在真機運行。運行時需要至少兩臺手機處于同一個分布式網絡中,可以通過操作如下配置實現:

● 所有手機接入同一網絡

● 所有手機登錄相同華為賬號

● 所有手機上開啟“設置->更多連接->多設備協同 ”

2. 代碼結構

在鴻蒙上實現本地和Internet視頻資源播放已對視頻播放和播放界面代碼結構做了講解,本次Codelab只對視頻列表頁、視頻遷移設備列表、遷移后控制界面及遷移服務核心代碼做講解,對于完整代碼,我們會在參考提供下載方式。代碼結構圖如下:

● provider:該目錄包含CommonProvider、ViewProvider和AdvertisementProvider。CommonProvider是一個ListContainer 多樣式提供者管理類。ViewProvider結合CommonProvider使用,可以把布局文件中需要賦值的控件單獨提取出來進行賦值。AdvertisementProvider實現廣告視頻資源定時滾動的效果。

● ImplVideoMigration.idl:接口中定義了視頻遷入、遷出、根據控制碼對視頻進行遠程控制方法。

● data:該目錄包括滾動視頻廣告對象封裝、即將上映視頻對象封裝以及視頻圖片格式定義。

● VideoMigrateService:供遠端連接的Service Ability。

● manager:該目錄下的文件為ImplVideoMigration.idl在編譯時自行生成,初始生成位置為entry\build\generated\source\idl\com\huawei\codelab。

● MediaUtil:對廣告和視頻列表對象初始化賦值。

● config.json:配置文件,新增權限配置如下圖:

1. ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允許監聽分布式組網內的設備狀態變化。

2. ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允許獲取分布式組網內的設備列表和設備信息。

3. ohos.permission.GET_BUNDLE_INFO:用于查詢其他應用的信息。

4. ohos.permission.DISTRIBUTED_DATASYNC:用于允許不同設備間的數據交換。

5. ohos.permission.INTERNET:用于允許設備訪問網絡。

3. 創建應用程序布局文件

在路徑"resources/base/layout"文件夾下創建video.xml為應用主頁面,展示要播放的視頻列表。

  1. <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"  
  2.                    ohos:width="match_parent"  
  3.                    ohos:height="match_parent"  
  4.                    ohos:orientation="vertical">  
  5.     <DirectionalLayout  
  6.         ohos:height="match_content"  
  7.         ohos:width="match_parent"  
  8.         ohos:orientation="vertical"  
  9.         >  
  10.         <!--滾動的視頻圖片-->  
  11.         <DependentLayout  
  12.             ohos:id="$+id:video_advertisement_container_view"  
  13.             ohos:width="match_parent"  
  14.             ohos:left_margin="20vp"  
  15.             ohos:height="175vp"  
  16.             ohos:top_margin="20vp"  
  17.             ohos:right_margin="12vp"  
  18.             >  
  19.             <PageSlider  
  20.                 ohos:id="$+id:video_advertisement_viewpager"  
  21.                 ohos:width="match_parent"  
  22.                 ohos:height="match_parent"  
  23.                 ohos:orientation="horizontal"/>  
  24.    
  25.             <PageSliderIndicator  
  26.                 ohos:id="$+id:video_advertisement_indicator"  
  27.                 ohos:right_margin="8vp"  
  28.                 ohos:bottom_margin="7vp"  
  29.                 ohos:width="match_content"  
  30.                 ohos:height="match_content"  
  31.                 ohos:align_parent_bottom="true"  
  32.                 ohos:align_parent_right="true" />  
  33.         </DependentLayout>  
  34.         <!--即將上映-->  
  35.         <DirectionalLayout  
  36.             ohos:width="match_parent"  
  37.             ohos:height="22vp"  
  38.             ohos:top_margin="12vp"  
  39.             ohos:left_margin="24vp"  
  40.             ohos:right_margin="12vp"  
  41.             ohos:orientation="horizontal">  
  42.             <Text  
  43.                 ohos:id="$+id:video_play_title"  
  44.                 ohos:text="Coming soon"  
  45.                 ohos:text_size="16fp"  
  46.                 ohos:text_color="#ff000000"  
  47.                 ohos:text_alignment="4"  
  48.                 ohos:layout_alignment="vertical_center"  
  49.                 ohos:width="match_content"  
  50.                 ohos:height="match_content" />  
  51.             <Image  
  52.                 ohos:left_margin="6vp"  
  53.                 ohos:width="13vp"  
  54.                 ohos:height="13vp"  
  55.                 ohos:layout_alignment="vertical_center"  
  56.                 ohos:image_src="$media:ic_next"/>  
  57.    
  58.         </DirectionalLayout>  
  59.         <!--可橫向滑動的視頻圖片-->  
  60.         <DirectionalLayout  
  61.             ohos:width="match_parent"  
  62.             ohos:height="500vp"  
  63.             ohos:orientation="vertical">  
  64.             <ListContainer  
  65.                 ohos:id="$+id:video_list_play_view"  
  66.                 ohos:width="match_parent"  
  67.                 ohos:height="match_content"  
  68.                 ohos:orientation="horizontal"  
  69.                 ohos:left_margin="18vp"  
  70.                 ohos:top_margin="12vp"  
  71.                 >  
  72.             </ListContainer>  
  73.         </DirectionalLayout>  
  74.     </DirectionalLayout>  
  75.    
  76. </DirectionalLayout> 

video.xml采用垂直方向的線性布局方式。整個頁面分為三部分的內容。從上至下依次是PageSlider滾動廣告布局,即將上映視頻圖標布局,可左右滑動的listContainer布局。

PageSlider是一個描述滾動頁面的組件,PageSliderIndicator是一個將滾動頁面組件和其它組件比如圖標、按鈕等組合管理的管理器。本應用程序展示的滾動廣告頁面采取的是三組廣告圖片和圖片title組成的PageSlider,廣告圖片和圖片title組合樣式由AdvertisementProvider定義。AdvertisementMo初始化代碼如下:

  1. public AdvertisementMo(int sourceId, String description) {  
  2.     this.sourceId = sourceId;  
  3.     this.description = description;  
  4. }  
  5. videoAdvertisementMos.add(new AdvertisementMo(ResourceTable.Media_video_advertisement0, "玩心釋放 盡情創想"));  
  6. videoAdvertisementMos.add(new AdvertisementMo(ResourceTable.Media_video_advertisement1, "玩心釋放 盡情創想"));  
  7. videoAdvertisementMos.add(new AdvertisementMo(ResourceTable.Media_video_advertisement2, "一起創造 煥新假期")); 

AdvertisementProvider對滾動視頻廣告組件以list形式進行封裝。

  1. public class AdvertisementProvider<T extends Component> extends PageSliderProvider {  
  2.     private List<T> componentList;  
  3.     public AdvertisementProvider(List<T> componentList) {  
  4.         this.componentList = componentList;  
  5.     }  

通過PageSlider對象的setProvider(CommProvider)方法即可達到對圖片列表地滾動顯示效果。

  1. advertisementProvider = new AdvertisementProvider<Component>(getAdvertisementComponents());  
  2. Component advViewPager = findComponentById(ResourceTable.Id_video_advertisement_viewpager);  
  3. if (advViewPager instanceof PageSlider) {  
  4.     advPageSlider = (PageSlider) advViewPager;  
  5.     advPageSlider.setProvider(advertisementProvider);  

getAdertisementCompoents方法將滾動視頻廣告添加到list。

  1. private List<Component> getAdvertisementComponents() {  
  2.     List<AdvertisementMo> advertisementMos = MediaUtil.getVideoAdvertisementInfo();  
  3.     List<Component> componentList = new ArrayList<>(advertisementMos.size());  
  4.     Font.Builder fb = new Font.Builder(VideoTabStyle.BOLD_FONT_NAME);  
  5.     fb.setWeight(Font.BOLD);  
  6.     Font newFont = fb.build();  
  7.     for (AdvertisementMo advertisementMo : advertisementMos) {  
  8.         Component advRootView = LayoutScatter.getInstance(getContext()).parse(  
  9.                 ResourceTable.Layout_video_advertisement_item, nullfalse);  
  10.         Image imgTemp = null;  
  11.         if (advRootView.findComponentById(ResourceTable.Id_video_advertisement_poster) instanceof Image) {  
  12.             imgTemp = (Image) advRootView.findComponentById(ResourceTable.Id_video_advertisement_poster);  
  13.         }  
  14.         imgTemp.setPixelMap(advertisementMo.getSourceId());  
  15.         Text titleTmp = null;  
  16.         if (advRootView.findComponentById(ResourceTable.Id_video_advertisement_title) instanceof Text) {  
  17.             titleTmp = (Text) advRootView.findComponentById(ResourceTable.Id_video_advertisement_title);  
  18.         }  
  19.         titleTmp.setText(advertisementMo.getDescription());  
  20.         titleTmp.setFont(newFont);  
  21.         componentList.add(advRootView);  
  22.     }  
  23.    
  24.     return componentList;  

想要實現滾動到某一特定圖片時呈現標志,在圖片上方加上一組空心圓,當滾動到第一張圖片時,第一個圓變為實心,此聯動實現效果可通過PageSliderIndicator實現。

  1. PageSliderIndicator advIndicator = null;  
  2. if (findComponentById(ResourceTable.Id_video_advertisement_indicator) instanceof PageSliderIndicator) {  
  3.     advIndicator = (PageSliderIndicator) findComponentById(  
  4.             ResourceTable.Id_video_advertisement_indicator);  
  5. }  
  6. advIndicator.setItemOffset(VideoTabStyle.INDICATOR_OFFSET); 

實心圓效果:

  1. ShapeElement normalDrawable = new ShapeElement();  
  2. normalDrawable.setRgbColor(RgbColor.fromRgbaInt(Color.WHITE.getValue()));  
  3. normalDrawable.setAlpha(VideoTabStyle.INDICATOR_NORMA_ALPHA);  
  4. normalDrawable.setShape(ShapeElement.OVAL);  
  5. normalDrawable.setBounds(0, 0, VideoTabStyle.INDICATOR_BONDS, VideoTabStyle.INDICATOR_BONDS); 

空心圓效果:

  1. ShapeElement selectedDrawable = new ShapeElement();  
  2. selectedDrawable.setRgbColor(RgbColor.fromRgbaInt(Color.WHITE.getValue()));  
  3. selectedDrawable.setShape(ShapeElement.OVAL);  
  4. selectedDrawable.setBounds(0, 0, VideoTabStyle.INDICATOR_BONDS, VideoTabStyle.INDICATOR_BONDS); 

實心圓、空心圓效果如下圖:

PageSliderIndicator通過設置可選類型將會實現圖片被選中時,將會顯示實心圓。

  1. advIndicator.setItemElement(normalDrawable, selectedDrawable);  
  2. advIndicator.setViewPager((PageSlider) advViewPager); 

本節任務完成的效果如下圖:

視頻播放業務本次Codelab不再描述,下面直接進入視頻流轉環節。

4. 視頻跨設備協同

HarmonyOS提供了分布式跨設備能力,本小節可以實現將視頻遷移到分布式環境中的其它設備上,被遷移設備可以實現對遷移設備的視頻操作控制。

首先對視頻播放界面中遷移按鈕增加監聽事件,在點擊時,從窗口底部滑出分布式設備列表界面可供選擇遷移。

  1. tv = (Image) simplePlayerController.findComponentById(ResourceTable.Id_tv);  
  2. tv.setClickedListener(new Component.ClickedListener() {  
  3.     @Override  
  4.     public void onClick(Component component) {  
  5.         initDevices();  
  6.         showDeviceList();  
  7.     }  
  8. }); 

通過分布式設備管理器DeviceManager獲取到當前分布式網絡中可發現的所有設備并全部添加到設備列表。如果設備列表初始不為空,先將列表清空,再添加,以達到刷新設備列表效果。

  1. private void initDevices() {  
  2.     if (devices.size() > 0) {  
  3.         devices.clear();  
  4.     }  
  5.     // 通過FLAG_GET_ONLINE_DEVICE標記獲得在線設備列表  
  6.     List<DeviceInfo> deviceInfos = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);  
  7.     devices.addAll(deviceInfos);  

顯示設備列表使用單樣式的內容提供器CommonProvider,設置設備名字樣式。

  1. private void showDeviceList() {  
  2.     CommonProvider commonProvider = new CommonProvider<DeviceInfo>(devices,getContext(), ResourceTable.Layout_device_list_item) {  
  3.         @Override  
  4.         protected void convert(ViewProvider viewProvider, DeviceInfo item, int position) {  
  5.             viewProvider.setText(ResourceTable.Id_device_text, item.getDeviceName());  
  6.         }  
  7.     };  
  8.     // 對deviceListContainer注入commonProvider,完成設備列表資源樣式設置  
  9.     deviceListContainer.setItemProvider(commonProvider);  
  10.     // 通知列表數據發生變化更新設備列表  
  11.     commonProvider.notifyDataChanged();  
  12.     transWindow.show();  

創建設備列表顯示組件SlidePopupWindow。設備列表是一個從底部滑出的一個窗口,屬于自定義組件。核心功能是設備列表的顯示與隱藏。

  1. public void show() {  
  2.     if (!isShow) {  
  3.         isShow = true;  
  4.         animatorProperty  
  5.                 .moveFromX(startX)  
  6.                 .moveToX(endX)  
  7.                 .moveFromY(startY)  
  8.                 .moveToY(endY)  
  9.                 .setCurveType(Animator.CurveType.LINEAR)  
  10.                 .setDuration(ANIM_DURATION)  
  11.                 .start();  
  12.     }  
  13. }  
  14.    
  15. public void hide() {  
  16.     if (isShow) {  
  17.         isShow = false;  
  18.         animatorProperty  
  19.                 .moveFromX(endX)  
  20.                 .moveToX(startX)  
  21.                 .moveFromY(endY)  
  22.                 .moveToY(startY)  
  23.                 .setCurveType(Animator.CurveType.LINEAR)  
  24.                 .setDuration(ANIM_DURATION)  
  25.                 .start();  
  26.     }  

設備列表效果如下圖:

點擊列表中某一個設備,將在已選設備端拉起該視頻應用。

  1. deviceListContainer.setItemClickedListener(new ListContainer.ItemClickedListener() {  
  2.     @Override  
  3.     public void onItemClicked(ListContainer listContainer, Component component, int num, long l) {  
  4.         // 列表窗口隱藏  
  5.         transWindow.hide();  
  6.         startAbilityFa(devices.get(num).getDeviceId());  
  7.     }  
  8. }); 

通過startAbilityFa()跨設備拉起視頻FA,再調用connectAbility()異步對遠端服務連接,成功連接后,在回調onAbilityConnectDone中服務端恢復視頻數據。

  1. private void startAbilityFa(String devicesId) {  
  2.     Intent intent = new Intent();  
  3.     Operation operation =  
  4.             new Intent.OperationBuilder()  
  5.                     .withDeviceId(devicesId)  
  6.                     .withBundleName(getBundleName())  
  7.                     .withAbilityName(VideoMigrateService.class.getName())  
  8.                     .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)  
  9.                     .build();// 開發者需要在Intent中設置支持分布式的標記FLAG_ABILITYSLICE_MULTI_DEVICE,否則無法獲得分布式能力  
  10.     intent.setOperation(operation);  
  11.     boolean connectFlag = connectAbility(intent,  
  12.                     new IAbilityConnection() {  
  13.                         @Override  
  14.                         public void onAbilityConnectDone(  
  15.                                 ElementName elementName, IRemoteObject remoteObject, int i) {  
  16.                             // asInterface的作用是根據調用的服務是否屬于同進程而返回不同的實例對象  
  17.                             implVideoMigration = VideoMigrationStub.asInterface(remoteObject);  
  18.                             try {  
  19.                                 implVideoMigration.flyIn(startMillisecond);  
  20.                             } catch (RemoteException e) {  
  21.                                 LogUtil.error(TAG, "connect successful,but have remote exception");  
  22.                             }  
  23.                         }  
  24.    
  25.                         @Override  
  26.                         public void onAbilityDisconnectDone(ElementName elementName, int i) {  
  27.                             disconnectAbility(this);  
  28.                         }  
  29.                     });  
  30.     if (connectFlag) {  
  31.         Toast.toast(this, "migrate successful!", TOAST_DURATION);  
  32.         remoteController.show();  
  33.         startMillisecond = implPlayer.getAudioCurrentPosition();// 獲取視頻當前播放進度  
  34.         implPlayer.release();// 釋放資源  
  35.     } else {  
  36.         Toast.toast(this, "migrate failed!Please try again later.", TOAST_DURATION);  
  37.     }  

通過指定abilityName為VideoMigrateService,執行VideoMigrateService中onConnect(intent)方法,返回binder對象,回調onAbilityConnectDone拿到具體的binder對象。VideoMigrationStub.asInterface(remoteObject)根據調用是否屬于同進程而返回不同的實例對象, 由于返回的binder不是本進程的,所以返回的是VideoMigrationProxy對象。

接下來我們分別把本端設備稱為設備A,跨設備協同端稱為設備B。 implVideoMigration.flyIn(startMillisecond)由設備A即VideoMigrationProxy執行,通過sendRequest發送到設備B。

  1. remote.sendRequest(COMMAND_FLY_IN, data, reply, option); 

設備B通過接收到的code類型為COMMAND_FLY_IN在服務端執行視頻數據恢復。

  1. @Override  
  2. public void flyIn(int startTimemiles) throws RemoteException {  
  3.     Intent intent = new Intent();  
  4.     Operation operation =  
  5.             new Intent.OperationBuilder()  
  6.                     .withBundleName(getBundleName())  
  7.                     .withAbilityName(MainAbility.class.getName())  
  8.                     .withAction("action.video.play")  
  9.                     .build();  
  10.     intent.setOperation(operation);  
  11.     intent.setParam(Constants.INTENT_STARTTIME_PARAM, startTimemiles);  
  12.     startAbility(intent);  

設備B呈現播放界面并跳轉到Intent中攜帶的播放位置。在設備A的視頻應用跨設備協同到設備B時,設備A會釋放掉視頻資源并展示RemoteController。

  1. if (connectFlag) {  
  2.     Toast.toast(this, "migrate successful!", TOAST_DURATION);  
  3.     remoteController.show();// 控制界面出現  
  4.     startMillisecond = implPlayer.getAudioCurrentPosition();  
  5.     implPlayer.release();  

設備A的RemoteController在創建時初始化界面布局。通過操作界面控件來控制設備B視頻播放。例如點擊前進按鈕,RemoteController發送FORWARD 控制碼。SimplePlayerAbilitySlice通過添加RemoteController.RemoteControllerListener來執行回調方法sendControl,再通過implVideoMigration代理對象與對端進行通信。

  1. remoteController.setRemoteControllerCallback(new RemoteController.RemoteControllerListener() {  
  2. @Override  
  3.     public void sendControl(int code, int extra) {  
  4.     try {  
  5.         if (implVideoMigration != null) {  
  6.             // 調用設備A服務代理對象的playControl方法通過binder對象調用設備B服務端的playControl方法  
  7.             implVideoMigration.playControl(code, extra);  
  8.         }  
  9.     } catch (RemoteException e) {  
  10.         LogUtil.error(TAG, "RemoteException occurs ");  
  11.     }  
  12.   }  
  13. }); 

設備A效果如下圖:

設備B效果如下圖:

當設備A在RemoteController界面執行返回操作時,會隱藏RemoteController,同時設備A繼續播放。

  1. public void hide() {  
  2.     if (isShown) {  
  3.         isShown = false;  
  4.         setVisibility(INVISIBLE);  
  5.         if (remoteControllerListener != null) {  
  6.             remoteControllerListener.controllerDismiss();  
  7.         }  
  8.     }  
  9. }  
  10. remoteController.setRemoteControllerCallback(new RemoteController.RemoteControllerListener() {  
  11. @Override  
  12. public void controllerDismiss() {  
  13.     int progress = 0;  
  14.     try {  
  15.         if (implVideoMigration!= null) {  
  16.             // 遷回視頻時獲取進度條進度  
  17.             progress = implVideoMigration.flyOut();  
  18.         }  
  19.     } catch (RemoteException e) {  
  20.         LogUtil.e(TAG, "RemoteException occurs");  
  21.     }  
  22.     // 設備A視頻按照遷回的視頻進度繼續播放  
  23.     implPlayer.reload(url, progress);  
  24. }  
  25. }); 

🕮 說明

以上代碼僅demo演示參考使用,產品化的代碼需要使用國際化。

5. 恭喜你

● 通過使用PageSlider、PageSliderIndicator結合ListContainer編寫定時滾動及可滑動的頁面。

● HarmonyOS通過DeviceManger獲取分布式網絡中設備列表,選中設備ID之后,再通過IDL跨進程通信方式將FA或PA攜帶數據跨設備拉起。

● 整體運行效果圖如下:

設備A視頻跨設備協同后效果圖如下:

至此,您已經完成HarmonyOS上視頻跨設備協同的體驗!

6. 參考

gitee源碼

github源碼

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-01-14 05:16:09

MyBatis動態代理

2022-07-25 17:57:43

技術跨平臺

2022-06-09 14:08:34

多設備協同鴻蒙

2025-09-18 12:28:22

2020-11-05 10:05:25

App

2010-06-24 09:54:50

HTML 5Video標簽

2011-03-07 17:24:33

ProFTPD安裝

2011-03-07 17:15:52

ProFTPD配置

2011-03-07 17:25:33

ProFTPD啟動

2021-01-06 10:59:14

鴻蒙HarmonyOSPage Abilit

2021-06-16 15:18:03

鴻蒙HarmonyOS應用

2021-06-23 15:48:08

鴻蒙HarmonyOS應用

2021-07-08 09:42:04

鴻蒙HarmonyOS應用

2021-01-06 11:21:56

鴻蒙HarmonyOS應用開發

2024-11-07 16:39:42

SpringBoo常用注解Bean

2020-12-28 09:41:40

MySQL數據庫函數

2018-01-23 07:07:54

2015-07-20 17:12:57

點贊
收藏

51CTO技術棧公眾號

国产精品久久久久99| 日韩精品久久久久久久玫瑰园 | www.色视频| 亚洲精品专区| 日韩视频在线免费| 呦呦视频在线观看| 999色成人| 欧美日韩亚洲视频一区| 中文字幕欧美人与畜| 熟妇高潮一区二区三区| 免费观看成人av| 国语自产偷拍精品视频偷| 久操视频在线观看免费| 999国产精品一区| 欧美午夜电影一区| 国产深夜男女无套内射| 成人短视频在线观看| 国产日韩欧美激情| 国产精品制服诱惑| 懂色av蜜臀av粉嫩av喷吹| 亚洲视频高清| 久久综合伊人77777| 精品国产av无码| 伊人久久大香线蕉av超碰| 欧美亚洲国产一卡| 国产日产欧美视频| 欧美寡妇性猛交xxx免费| 中文字幕国产一区| 日韩av电影免费播放| 欧性猛交ⅹxxx乱大交| 韩国一区二区在线观看| 国产精品国产三级国产aⅴ浪潮| 国产一级做a爰片在线看免费| 国产精品成人av| 在线观看不卡av| 精品成人av一区二区三区| 国产一级成人av| 精品福利二区三区| 国产伦精品一区二区三区88av| 精品一区二区三区中文字幕在线| 欧美日韩中文另类| 国产精品天天av精麻传媒| 日韩伦理在线| 欧美性xxxxxx| 国产在线青青草| 亚洲精品永久免费视频| 五月天丁香久久| 人人妻人人添人人爽欧美一区| heyzo在线欧美播放| 亚洲一区二区三区四区五区黄 | 欧美精品久久99久久在免费线 | 国产另类xxxxhd高清| 狠狠躁夜夜躁人人爽超碰91| 国产在线青青草| 国模套图日韩精品一区二区| 一本大道综合伊人精品热热| 女人另类性混交zo| 欧美国产日韩电影| 欧美视频完全免费看| 免费涩涩18网站入口| 四虎国产精品永久在线国在线| 精品污污网站免费看| 亚洲一区二区福利视频| 国产精品视频一区二区三区| 日韩免费在线观看| 成年人小视频在线观看| 婷婷精品在线观看| 中文一区二区视频| 最新一区二区三区| 亚洲二区精品| 日韩女优人人人人射在线视频| 无码人妻丰满熟妇区bbbbxxxx| 日韩国产精品久久久久久亚洲| 国产精品亚洲激情| 精品二区在线观看| av一二三不卡影片| 午夜精品一区二区在线观看| 成人日韩欧美| 午夜av一区二区三区| 老司机午夜av| 玖玖玖电影综合影院| 精品国产麻豆免费人成网站| 国产中年熟女高潮大集合| 色777狠狠狠综合伊人| 欧美乱妇40p| 一区二区三区福利视频| 久久精品久久99精品久久| 亚洲综合在线做性| 亚洲日本中文字幕在线| 国产精品美女一区二区在线观看| 国产激情片在线观看| 天堂√8在线中文| 欧美精品一二三| 免费无码一区二区三区| 国产一区99| 久久福利视频导航| 激情视频网站在线观看| 国产一区二区精品在线观看| 九九九九九九精品| 精品176二区| 欧美午夜影院在线视频| 古装做爰无遮挡三级聊斋艳谭| 欧美久久香蕉| 欧美精品在线看| 亚洲中文字幕无码爆乳av | 成人xxxx视频| 欧美精品a∨在线观看不卡 | 91精品国产乱码在线观看| 男女视频一区二区| 久久av免费观看| 在线黄色网页| 欧美日本韩国一区二区三区视频 | 国产精品一线天粉嫩av| 久久久免费高清电视剧观看| 樱花视频在线免费观看| 成人av电影在线网| 成人在线观看www| 欧美精品资源| 亚洲美女在线观看| 国产精品成人aaaa在线| 国产一区二区三区四区五区入口 | lutube成人福利在线观看| 亚洲午夜电影在线观看| 久久综合在线观看| 日韩一区欧美| 国产精品盗摄久久久| 亚洲日本国产精品| 精品国产乱码久久久久久婷婷| 少妇愉情理伦片bd| 忘忧草精品久久久久久久高清| 国产成人a亚洲精品| 偷拍25位美女撒尿视频在线观看| 日韩理论在线观看| 午夜免费福利视频在线观看| 精品高清在线| 国产a∨精品一区二区三区不卡| 五月色婷婷综合| 婷婷综合久久一区二区三区| www.黄色网| 欧美日韩天堂| 国产精品二区二区三区| 超碰97免费在线| 欧美精品一区二区三| 亚洲国产综合久久| 99久久精品免费看国产免费软件| 国产精品久久久久久久乖乖| 伊人久久噜噜噜躁狠狠躁| 欧美激情精品久久久久久蜜臀| 国产高清在线免费| 亚洲一区二区三区四区不卡| 亚洲日本久久久| 国产精品久久久久久模特| 久久这里精品国产99丫e6| 二区三区不卡| 在线视频欧美日韩| 97精品人妻一区二区三区香蕉| ●精品国产综合乱码久久久久| 亚洲精品免费一区亚洲精品免费精品一区| 色婷婷热久久| 成人免费看片网址| 日韩理论视频| 丝袜亚洲另类欧美重口| 国产美女无遮挡永久免费| 亚洲少妇30p| 亚洲av无码专区在线播放中文| 在线电影一区| 日本成人黄色| 高清精品久久| 97久久超碰福利国产精品…| 你懂的在线看| 这里只有精品视频在线观看| 精品少妇久久久| 2020日本不卡一区二区视频| 中文字幕精品一区二区三区在线| 欧美99久久| 久久精品ww人人做人人爽| 精品乱码一区二区三区四区| 久青草国产97香蕉在线视频| 无码精品在线观看| 欧美日韩大陆一区二区| 国产无遮挡又黄又爽在线观看| 久久久久久99久久久精品网站| 中文字幕成人免费视频| 精品动漫3d一区二区三区免费版| 日韩精品在在线一区二区中文| 国产一区二区久久久久| 91av视频导航| 国产原创视频在线观看| 日韩毛片中文字幕| 国产精品玖玖玖| 精品国产乱码久久久久久天美 | 日本a级在线| 亚洲电影成人av99爱色| 中文字幕乱码人妻二区三区| 亚洲精品成a人| 亚洲国产日韩一区无码精品久久久| 国产资源在线一区| 日本在线观看a| 一级欧洲+日本+国产| 久久久久久久久久码影片| av在线亚洲一区| 国产suv精品一区二区三区88区| 在线中文字幕视频观看| 亚洲欧美另类在线观看| 亚洲黄色精品视频| 欧美色综合影院| 日韩av在线电影| 亚洲欧美怡红院| 九色porny自拍视频| 国产成人鲁色资源国产91色综| 色悠悠久久综合网| 欧美亚洲三级| 国产日本在线播放| 中文视频一区| 一区二区三区国产福利| 精品大片一区二区| 欧美动漫一区二区| 国产精品极品| 97欧洲一区二区精品免费| 日韩国产91| 国产精品露脸自拍| 国产精品亚洲一区二区三区在线观看| 欧美精品久久久久久久久| 国产在线观看91| 精品国产区一区二区三区在线观看| 精品美女视频在线观看免费软件 | 精品久久久久久亚洲| 麻豆一二三区精品蜜桃| 国产日韩欧美在线观看| 成人国产激情| 国产精品第1页| 日韩一区精品| 国产精品日韩欧美大师| 怡红院成人在线| 日av在线播放中文不卡| 午夜伦理福利在线| 热门国产精品亚洲第一区在线| 日本在线影院| 奇米一区二区三区四区久久| 亚洲妇女成熟| 欧洲日韩成人av| 成人看片在线观看| 国产精品99久久久久久人| 色尼玛亚洲综合影院| 青青草99啪国产免费| 日韩中文影院| 国产在线98福利播放视频| 久久99久久久精品欧美| 成人av在线天堂| 国产精品一区二区三区www| 成人黄色免费网站在线观看| 国产精品亚洲综合在线观看| 91aaaa| 视频一区国产| 国产精品午夜av在线| 精品国产乱子伦一区二区| 精品综合久久| 国产亚洲电影| 国产精品夜夜夜爽张柏芝| 欧美国产另类| 国产二级片在线观看| 日韩不卡在线观看日韩不卡视频| wwww.国产| 国产一区二区三区香蕉| 国产成人av无码精品| 久久精品男人的天堂| 貂蝉被到爽流白浆在线观看| 亚洲欧美视频在线观看| 久久久久黄色片| 欧美日韩另类字幕中文| 五月天中文字幕| 日韩亚洲欧美中文三级| 婷婷av一区二区三区| 亚洲亚裔videos黑人hd| 精品视频在线一区二区| 97视频在线观看免费| xxxxx.日韩| 国产精品视频在线免费观看| jvid福利在线一区二区| 操bbb操bbb| 母乳一区在线观看| 亚洲欧美视频二区| 成人黄色网址在线观看| xxx在线播放| 一区二区高清在线| 久久久久久无码午夜精品直播| 欧美顶级少妇做爰| 神马久久高清| 久久综合免费视频| 亚洲1234区| 99在线高清视频在线播放| 精品一区亚洲| 激情五月六月婷婷| 免费欧美在线视频| 国产a级黄色片| 亚洲欧洲国产日韩| 无码人妻丰满熟妇精品区| 日韩一区二区麻豆国产| 国产毛片av在线| 久久人人爽人人| 国产一区二区三区亚洲综合| 免费精品视频一区二区三区| 欧美另类综合| 亚洲精品综合在线观看| 久久综合精品国产一区二区三区| 国产大片免费看| 欧美怡红院视频| 国产精品国产高清国产| 久久99久久99精品免观看粉嫩| 精品欧美日韩精品| 精品麻豆av| 欧美日韩精品免费观看视频完整| 视色视频在线观看| 久久人人爽爽爽人久久久| 久热这里只有精品在线| 欧美肥胖老妇做爰| www.成人.com| 国产精品高清在线观看| 校花撩起jk露出白色内裤国产精品| 伊人再见免费在线观看高清版 | 日皮视频在线观看| 国产原创欧美精品| 精品视频99| 国产女女做受ⅹxx高潮| 97se亚洲国产综合在线| 国产性猛交普通话对白| 日韩精品一区二区三区老鸭窝 | av一区二区在线观看| 97国产在线播放| 成人激情小说乱人伦| 久久香蕉精品视频| 精品日韩在线观看| 青草在线视频| av蓝导航精品导航| 欧美激情1区2区| 中文字幕一二三区| 尤物av一区二区| 国产成人麻豆精品午夜在线| 久久亚洲一区二区三区四区五区高| 丁香婷婷久久| 少妇高潮流白浆| 国产主播一区二区三区| 欧美精品久久久久久久久46p| 欧美精品xxxxbbbb| a毛片在线观看| 懂色av一区二区三区在线播放| 欧美性色综合| 亚洲最大免费视频| 欧美日韩裸体免费视频| 日本私人网站在线观看| 国产精品成人一区二区三区吃奶| 欧美亚洲国产激情| 国产无遮挡猛进猛出免费软件| 中文字幕亚洲精品在线观看| 精品国产伦一区二区三区| 色在人av网站天堂精品| 你懂的在线观看一区二区| 成人黄色片视频| 国产欧美精品国产国产专区| 国产一区二区自拍视频| 欧美精品在线视频观看| 国产厕拍一区| 粉嫩虎白女毛片人体| 中文欧美字幕免费| 国产精品久久久久久久久久久久久久久久久久 | 亚洲国产精久久久久久| 性欧美xxx69hd高清| 亚洲看片网站| 成熟亚洲日本毛茸茸凸凹| 西西44rtwww国产精品| 国产午夜精品视频| 国产精品视频一区二区三区| 日韩av在线播放不卡| 国产亚洲欧美日韩在线一区| 91麻豆一区二区| 午夜精品在线观看| 成人6969www免费视频| 四虎1515hh.com| 欧美日韩一区二区三区| 在线a人片免费观看视频| 国产v亚洲v天堂无码| 久久美女性网| 青娱乐国产精品| 国产亚洲成av人片在线观看桃| 国产精品99久久免费| 一区二区传媒有限公司| 国产精品国产三级国产a| 国产小视频免费观看| 国产精品视频播放| 亚洲黄色三级| 青花影视在线观看免费高清| 亚洲欧美日本另类| 欧一区二区三区| 亚洲三级视频网站| 五月天激情综合| 成人免费网址| 日韩精品欧美一区二区三区| 成人av先锋影音| 国产av无码专区亚洲av麻豆| 国产精品扒开腿做爽爽爽的视频|