午夜性刺激在线观看免费,全免费A级毛片免费看无码,国产精品亚洲一区二区三区久久,亚洲精品无码久久久久,国产三区在线成人AV,亚洲乱码一区二区三区在线欧美,国产一区二区视频在线播放,久久亚洲精品无码观看不卡,精品九九人人做人人爱,少妇人妻无码精品视频app

廣告

一文看懂怎么接入華為分布式生態(tài),跨終端開發(fā)并不難

“萬物互聯(lián)”似乎是這些年被提的最多的一個概念,在我們的理解中萬物互聯(lián)似乎就是將生活中的每個實物都接入到網(wǎng)絡中。不過因為“萬物互聯(lián)”概念中,“造物”的廠商千千萬,各自接入網(wǎng)絡的方式又五花八門。所以在絕大部分情況下,即便萬物真能接入網(wǎng)絡,體驗也是割裂的。

axpesmc

華為的“萬物互聯(lián)”實現(xiàn)方式有些另辟蹊徑的意思:分布式技術通過“分布式軟總線”,將硬件資源融合為硬件池,不僅實現(xiàn)硬件互聯(lián),而且讓硬件資源可以相互利用。典型比如WPS與華為終端分布式技術聯(lián)手打造的分布式文件,可以手機中的文檔,可以在PC上直接查看、編輯、保存,提升跨終端工作效率。axpesmc

5月27日,華為在線上舉辦了一場HDD華為終端分布式生態(tài)技術交流會,除了華為自己針對這種分布式生態(tài)的技術講解和發(fā)展現(xiàn)狀,也拉來了不少第三方開發(fā)者講述接入生態(tài)的價值和過程。我們也期望通過這篇文章,面向開發(fā)者談談華為生態(tài)究竟是怎么回事,以及要加入生態(tài),會不會特別麻煩。axpesmc

axpesmc

分布式技術能做到什么?

我們借用一個具體的例子來看看,分布式技術究竟有哪些能力。科大訊飛的辦公本應該是比較早接入到華為分布式生態(tài)中的一類產(chǎn)品。主要解決的問題是跨設備傳輸文件,就是在手機和辦公本之間做筆記、網(wǎng)文、圖書等的分享。axpesmc

而科大訊飛在智能辦公本中,期望解決的問題是:axpesmc

  • 辦公本不能拍照(受限于電子墨水屏的刷新率),那么利用手機的攝像頭,就能直接將筆記、教案拍攝存儲在辦公本里;
  • 在手機上看到的各種網(wǎng)文、圖書可以方便地在辦公本上觀看;
  • 當然,其中還有一些數(shù)據(jù)安全的考量,比如說用戶不希望把重要的筆記同步到互聯(lián)網(wǎng)上。

axpesmc

而在雙方合作后,華為終端分布式技術Share Kit便能夠解決這些問題,其采用華為私有傳輸協(xié)議,實現(xiàn)一鍵分享和更多的數(shù)據(jù)互通。在科大訊飛的辦公本上,其特性至少包括了快速發(fā)現(xiàn)設備;PAKE密鑰交換做到數(shù)據(jù)安全交換;快速信道能力協(xié)商,根據(jù)業(yè)務調整物理通路來實現(xiàn)高速傳輸。axpesmc

在具體開發(fā)的Share Kit集成過程里,科大訊飛辦公本涉及到集成發(fā)送和接收功能,除了最上層Launcher集成Share Kit 接口,還需要在HAL(硬件抽象層)和Framework層做一些適配。科大訊飛方面則表示,針對Framework和HAL層,華為有提供代碼修改流程圖,可以非常輕松地搞定;而且即便集成階段遇到問題,華為也提供服務支持,可以共同解決問題。axpesmc

對于很多硬件廠商來說,如果只需實現(xiàn)發(fā)送功能,那么整個開發(fā)過程會更簡單,只需上層Launcher集成Share Kit 接口即可。axpesmc

分布式生態(tài)能力還在擴充

除了Share Kit外, CaaS Kit是另外一個典型的分布式Kit,比如接入了CaaS Kit的無人機產(chǎn)品,可以直接在無人機APP應用內(nèi)撥打暢連視頻通話,無人機鏡頭拍攝的畫面可直接作為視頻來源顯示在對方的屏幕上;Drift運動相機利用DeviceVirtualization Kit能力,可以在運動的時候發(fā)起暢連通話并將鏡頭一鍵轉移到Drift鏡頭,讓對方體驗第一運動視角帶來的緊張刺激;極米投影儀在集成Cast+ Kit后,為用戶帶來流暢、高清的家庭娛樂投屏體驗。axpesmc

在理解了華為的分布式生態(tài)究竟是什么,以及能做什么以后。接下來我們以其中的DeviceVirtualization Kit和Cast+ Kit為例,簡單談談要將這些能力接入到自己的應用或設備中,具體過程和易用性如何,畢竟易用性是吸引開發(fā)者的一大重點。axpesmc

從0 開始接入終端分布式

在前期準備階段,開發(fā)者需要在線提交申請,華為會把相應的SDK提供給開發(fā)者。開發(fā)可以選擇華為的DevEco Studio——這是一個全流程覆蓋的IDE。當前的beta版DevEco Studio需要在開發(fā)者聯(lián)盟做申請;也可以選擇Android Studio。axpesmc

通過DevEco Studio的Kit Manager簡單勾選Kit、添加依賴庫之后,就進入開發(fā)階段了。axpesmc

(1)DeviceVirtualization Kitaxpesmc

DeviceVirtualization Kit(以下簡稱DV Kit)能夠將附近的設備或組件轉換為手機的虛擬組件,將其能力作為手機的能力來使用。比如說外部的攝像頭、音箱、顯示器、話筒,甚至如心率傳感器這類設備組件,令其成為手機的眼睛、嘴巴、耳朵等等。axpesmc

axpesmc

這里從應用開發(fā)者的角度來談一談接入過程。有關前期在開發(fā)者聯(lián)盟的注冊、獲取簽名證書指紋以及向華為方的接口權限申請這里不再贅述。這里著重說接入過程。首先是聲明虛擬外設的使用權限,以及聲明該應用調用DV Kit對應接口需要的權限,比如攝像頭、音頻、身體傳感器的權限等。申請不同的Android權限,在AndroidMenifest.xml文件中添加相應權限,例如:axpesmc

<uses-permission android:name="android.permission.CAMERA"/>axpesmc

<uses-permission android:name="android.permission.RECORD_AUDIO"/>axpesmc

<uses-permission android:name="com.huawei.permission.DISTRIBUTED_VIRTUALDEVICE"/>axpesmc

這里申請的是虛擬攝像頭、虛擬麥克風對應的Android權限;最后一行是在應用需要使用外部的虛擬分布式外設時,所需申請的權限。axpesmc

DV Kit開發(fā)基本方法是,首先創(chuàng)建基礎DV Kit對象,并連接后端服務進行初始化;通過該對象獲取VirtualDeviceManager服務。通過VirtualDeviceManager服務可以發(fā)現(xiàn)當前手機能夠控制的虛擬設備。比如前文中的例子,VirtualDeviceManager服務發(fā)現(xiàn)Drift運動相機,并返回運動相機當前支持的是Camera(攝像頭)、Speaker(揚聲器)能力。axpesmc

axpesmc

按照上圖思路,首先初始化連接DV Kit服務,服務初始化結果通過onConnect回調返回。連接成功后,調用getKitService獲取VirtualDeviceManager服務實例,用于控制虛擬設備:axpesmc

//獲取DvKit對象并連接DvKit服務axpesmc

DvKit.getInstance().connect(getApplicationContext(), new IDvKitConnectCallback() {axpesmc

//服務連接成功后的回調通知axpesmc

@Overrideaxpesmc

public void onConnect(int result) {axpesmc

addLog("msdp service connect");axpesmc

mVirtualDeviceManager = (VirtualDeviceManager) DvKit.getInstance().getKitService(VIRTUAL_DEVICE_CLASS);axpesmc

mVirtualDeviceManager.subscribe(EnumSet.of(VIRTUALDEVICE), observer);axpesmc

}axpesmc

//服務斷開后的回調通知axpesmc

@Overrideaxpesmc

public void onDisconnect() {axpesmc

addLog("msdp service disconnect");axpesmc

}axpesmc

});axpesmc

接下來就是設備發(fā)現(xiàn),如前文所述連接成功,獲取到VirtualDeviceManager服務,應用就能調用VirtualDeviceManager服務的startDiscovery接口用于發(fā)現(xiàn)周圍的可用設備。發(fā)現(xiàn)的設備會通過IDiscoveryCallback回調的onFound接口返回:axpesmc

//開始發(fā)現(xiàn)設備axpesmc

mVirtualDeviceManager.startDiscovery(new IDiscoveryCallback() {axpesmc

//設備發(fā)現(xiàn)時的回調接口axpesmc

@Overrideaxpesmc

public void onFound(VirtualDevice device, int state) {axpesmc

if (device == null) {axpesmc

addLog("onDevice callback but device is null");axpesmc

} else {axpesmc

HwLog.d(TAG, "onDevice Found: " + Util.hideSensitiveInfo(device.getDeviceId()) + " Name: "axpesmc

+ device.getDeviceName() + " Type:" + device.getDeviceType());axpesmc

if (!mVirtualDeviceMap.containsKey(device.getDeviceId())) {axpesmc

addLog("onDevice Found: " + device.getDeviceId() + " Name: " + device.getDeviceName() + " Type:"axpesmc

+ device.getDeviceType());axpesmc

mVirtualDeviceMap.put(device.getDeviceId(), device);axpesmc

handler.sendMessage(handler.obtainMessage(DEVICE_ADD, device));axpesmc

}axpesmc

}axpesmc

}axpesmc

//發(fā)現(xiàn)狀態(tài)變更的回調通知axpesmc

@Overrideaxpesmc

public void onState(int state) {axpesmc

}axpesmc

});axpesmc

在發(fā)現(xiàn)虛擬設備之后,應用就可以調用虛擬設備的getDeviceCapability()接口獲取設備支持能力,按需選擇具體的能力。具體是調用enableVirtualDevice來使能所需使能的設備和能力,支持同時傳入多個能力。應用使能的結果可以通過subscribe接口傳入的回調對象來獲得:axpesmc

mVirtualDeviceManager.enableVirtualDevice(deviceId, EnumSet.of(CAMARA), null);axpesmc

//調用subscribe時傳入的observer對象axpesmc

private IVirtualDeviceObserver observer = new IVirtualDeviceObserver() {axpesmc

//虛擬設備狀態(tài)變化時的回調通知axpesmc

@Overrideaxpesmc

public void onDeviceStateChange(VirtualDevice virtualDevice, int returncode) {axpesmc

}axpesmc

//虛擬設備能力狀態(tài)變化時的回調通知axpesmc

@Overrideaxpesmc

public void onDeviceCapabilityStateChange(VirtualDevice virtualDevice, Capability capability, int returncode) {axpesmc

if (returncode == EventType.EVENT_DEVICE_CAPABILITY_ENABLE) {axpesmc

//當設備能力使能成功時,應用處理使能成功流程axpesmc

onEnable(virtualDevice, capability);axpesmc

} else if (returncode == EventType.EVENT_DEVICE_CAPABILITY_DISABLE) {axpesmc

//當設備能力去使能成功時,應用處理去使能成功流程axpesmc

onDisable(virtualDevice, capability);axpesmc

} else {axpesmc

//當虛擬設備能力狀態(tài)異常時,應用應處理異常流程axpesmc

one rror(virtualDevice, capability, returncode);axpesmc

}axpesmc

}axpesmc

};axpesmc

這里是以虛擬Camera能力為例,在虛擬Camera能力接入后,應用可以通過getData接口來獲取虛擬設備(比如Drift運動相機)的虛擬Camera id。應用隨后就能和傳統(tǒng)獲取手機的本地前后置攝像頭一樣,來獲取虛擬Camera的屬性信息(getCameraCharacteristics),以及打開虛擬Camera(openCamera),示例如下:axpesmc

//通過虛擬設備的getData接口獲取設備虛擬Camera的IDaxpesmc

String cameraId = device.getData(Constants.ANDROID_CAMERAID_FRONT);axpesmc

//使用CameraManager的getCameraCharacteristics接口獲取虛擬Camera的屬性信息axpesmc

CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);axpesmc

CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);axpesmc

//使用CameraManager的openCamera接口打開虛擬Cameraaxpesmc

manager.openCamera(cameraId, mStateCallback, null)axpesmc

“去使能”是通過調用disableVirtualDevice接口來實現(xiàn)的,比如去使能攝像頭能力:axpesmc

mVirtualDeviceManager.disableVirtualDevice(deviceId, EnumSet.of(CAMERA));axpesmc

整體DV Kit提供服務的斷連,釋放底層資源:axpesmc

DvKit.getInstance().disConnect();axpesmc

另外各種應用的具體實現(xiàn)也各有不同,例如有些可能需要使用虛擬Display,有些則需要虛擬Sensor(如Drift Life應用),或者使用本地消息通知等。這在華為開發(fā)者文檔中都有比較詳細的介紹,這里不再一一列舉。axpesmc

整個過程還是比較清晰和便捷的,對于一般開發(fā)者而言,代碼難度也不高;其流程對于App開發(fā)的整體業(yè)務存在的影響實際上都是比較小的,這是融入分布式生態(tài)比較便利的體現(xiàn)。axpesmc

(2)Cast+ Kitaxpesmc

在日常生活中,我們經(jīng)常需要投屏玩游戲、看電影等方式實現(xiàn)跨屏幕協(xié)同。而一些第三方廠商,如極米就有多款投影儀集成了華為終端分布式技術Cast+ Kit。從現(xiàn)場演示來看,令人印象比較深刻的就是低延遲,這對于投屏玩游戲還是相對重要的。axpesmc

Cast+ Kit在設備側需要與華為進行合作協(xié)議簽署后獲取。對于設備側而言,開發(fā)過程首先也是申請權限,包括允許訪問網(wǎng)絡連接、獲取當前WiFi接入狀態(tài)和熱點信息、獲取設備當前WiFi頻率信息等。axpesmc

axpesmc

上面這張圖給出了簡略的調用流程。其大步驟分成了:首先做變量聲明和實例獲?。?span style="display:none">axpesmc

private PlayerClient mPlayerClient;axpesmc

private ProjectionDevice mProjectionDevice;axpesmc

//獲取PlayerClient實例axpesmc

mPlayerClient = PlayerClient.getInstance();axpesmc

啟動服務并注冊監(jiān)聽:實現(xiàn)IEventListener.Stub()axpesmc

private IEventListener mCallback = new IEventListener.Stub() {axpesmc

//上報連接狀態(tài)。axpesmc

public boolean onEvent(int eventId, String type) {axpesmc

//根據(jù)連接狀態(tài)進行對應的配置及邏輯處理。axpesmc

axpesmc

return true;axpesmc

}axpesmc

//上報顯示相關事件。axpesmc

public boolean onDisplayEvent(int eventId, DisplayInfo displayInfo) {axpesmc

//根據(jù)連接狀態(tài)進行對應的配置及邏輯處理。axpesmc

axpesmc

return true;axpesmc

}axpesmc

};axpesmc

啟動服務:axpesmc

mPlayerClient.init(context);axpesmc

注冊回調接口:axpesmc

mPlayerClient.registerCallback(mCallback);axpesmc

隨后進行投屏業(yè)務相關設置,設置鑒權模式信息:axpesmc

AuthInfo authInfo = null;axpesmc

if (needPassword) {axpesmc

//密碼模式,設置6位密碼(需要支持混合密碼的能力)axpesmc

authInfo = new AuthInfo(AuthInfo.AUTH_MODE_PWD);axpesmc

authInfo.setAuthCode(password);axpesmc

} else {axpesmc

//PIN碼模式axpesmc

authInfo = new AuthInfo(AuthInfo.AUTH_MODE_GENERIC);axpesmc

}axpesmc

boolean isAuthModeSuccessfullySet = mPlayerClient.setAuthMode(authInfo);axpesmc

If (isAuthModeSuccessfullySet) {axpesmc

//更新本地密碼 or 更新UIaxpesmc

}axpesmc

設置大屏端設備的投屏能力,首先構造HiSightCapability對象:axpesmc

HiSightCapability capability = new HiSightCapability(1920, 1080, 1920, 1080);axpesmc

設置投屏顯示幀率,默認為30fps:axpesmc

capability.setVideoFps(30);axpesmc

根據(jù)平臺配置低時延策略:axpesmc

capability.setMediaCodecConfigureFlag(2)axpesmc

設置投屏能力:axpesmc

mPlayerClient.setCapability(capability);axpesmc

根據(jù)選用芯片的不同,可選用HiSightCapability提供的不同方法,設定平臺的解碼優(yōu)化參數(shù):axpesmc

HiSightCapability.setMediaCodecConfigureFlag(int flag)axpesmc

HiSightCapability. setMediaFormatInteger(String name, int value)axpesmc

HiSightCapability. setMediaFormatFloat(String name, float value)axpesmc

HiSightCapability. setMediaFormatLong(String name, long value)axpesmc

HiSightCapability. setMediaFormatString(String name, String value)axpesmc

配置大屏端設備信息,包括大屏端設備名稱、設備類型:axpesmc

private DeviceInfo mDeviceInfo = new DeviceInfo(mTvDeviceName, DeviceInfo. TYPE_TV);axpesmc

并設置設備可被周圍的設備發(fā)現(xiàn):axpesmc

mPlayerClient.setDiscoverable(true, mDeviceInfo);axpesmc

在大屏設備首次收到移動端連接請求后,會上報EVENT_ID_PIN_CODE_SHOW信息,并提供對端設備信息。在首次連接成功后,再次通過PIN碼模式發(fā)起連接請求時,會跳出PIN碼鑒權步驟:axpesmc

if (displayInfo != null) {axpesmc

//設備連接需要的PIN碼axpesmc

String pinCode = displayInfo.getPinCode();axpesmc

//按照UX規(guī)范開發(fā)PIN碼界面以展示PIN碼axpesmc

showPinCode(pinCode, mProjectionDevice.getDeviceName());axpesmc

//設置允許手機連接(用于不彈框讓用戶選擇的場景)axpesmc

mPlayerClient.setConnectRequestChooseResult(new ConnectRequestChoice(axpesmc

Constant.CONNECT_REQ_CHOICE_ALWAYS, mProjectionDevice));axpesmc

}axpesmc

在手機正確輸入PIN碼鑒權通過后,大屏端應用會上報EVENT_ID_CONNECT_REQ信息,另外也包含移動端設備信息:axpesmc

if (displayInfo != null) {axpesmc

//獲取請求連接的移動端設備信息axpesmc

mProjectionDevice = displayInfo.getProjectionDevice();axpesmc

}axpesmc

在EVENT_ID_CONNECT_REQ之后,會順序上報EVENT_ID_DEVICE_CONNECTED和EVENT_ID_PAUSED消息。PAUSED消息下,大屏端可以設置Surface并開始播放投屏視頻流,為加快起播速度,也可提前(如EVENT_ID_CONNECT_REQ消息下)啟動投屏Acitivity和Surface的創(chuàng)建。axpesmc

mProjectionDevice為Event_ID_CONNECT_REQ消息中從DisplayInfo中獲取的對端設備信息,可通過其獲取DeviceId,再通過DeviceID構造TrackControl對象做投屏使用。投屏成功,大屏端將上報EVENT_ID_CASTING消息,標識當前正在投屏。axpesmc

具體實現(xiàn)上,首先設計應用投屏界面XML布局:axpesmc

<com.huawei.castpluskit.HiSightSurfaceViewaxpesmc

android:id="@+id/HiSightSurfaceView"axpesmc

android:layout_width="match_parent"axpesmc

android:layout_height="match_parent"axpesmc

android:layout_centerInParent="true" />axpesmc

另外應用層面,要求保證投屏過程中不能錄屏、截屏、錄音:axpesmc

mHiView.setSecure(true);axpesmc

再添加SurfaceHolder的回調,在surfaceCreated監(jiān)聽中設置投屏控件axpesmc

SurfaceHolder surfaceHolder = mHiView.getHolder();axpesmc

surfaceHolder.addCallback(mSurfaceHolderCallback);axpesmc

private SurfaceHolder.Callback mSurfaceHolderCallback = new SurfaceHolder.Callback() {axpesmc

@Overrideaxpesmc

public void surfaceCreated(SurfaceHolder holder) {axpesmc

isSurfaceReady = true;axpesmc

if(isReceivePaused) {axpesmc

mPlayerClient.setHiSightSurface(mHiView.getHolder().getSurface());axpesmc

}axpesmc

}axpesmc

}axpesmc

最后開始投屏:axpesmc

mPlayerClient.play(new TrackControl(mProjectionDevice.getDeviceId()));axpesmc

斷開連接:axpesmc

mPlayerClient.disconnectDevice(mProjectionDevice);axpesmc

對絕大部分開發(fā)者而言,這都是一個相當簡單快速的集成過程。從這些開發(fā)者的代碼不難發(fā)現(xiàn),華為在Kit以及系統(tǒng)層面,為簡化開發(fā)難度,還是花了不少心思的。而對用戶來說,投屏質量和效率都是能夠得到保證的,用戶不需要安裝app,也沒有復雜操作;而且延遲各方面的體驗也都在同類的無線投屏方案中顯得比較靠譜——這些也是開發(fā)者不需要關心的。axpesmc

從DevEco Studio看華為的開發(fā)生態(tài)

針對開發(fā)流程,最后再談談目前仍處在beta階段的DevEco Studio工具。如前文所述這就是個來自華為的IDE,整體是為華為的全場景智慧化戰(zhàn)略設想所做的。面向的當然包括了應用開發(fā)和設備開發(fā),內(nèi)部集成了華為的分布式能力。axpesmc

axpesmc

完整的DevEco Studio是基于Intellij開源代碼,加上華為的開放能力支持。另外華為也基于Android Studio做了DevEco Toolkit插件,作為另一種形態(tài)提供給開發(fā)者使用。axpesmc

DevEco Studio的某些特性,本身也是在為分布式生態(tài)構建提供便利,這是在分布式能力接入本身就比較簡單的情況下,所做的一些加分項。比如說:axpesmc

axpesmc

前文就提到的,DevEco Studio針對這些分布式能力有集中管理和呈現(xiàn)的方案,開發(fā)者可以直接查看、管理這些Kit,并且在有需要時通過勾選就將某個Kit融入到開發(fā)中;甚至還能進行Kit的一鍵升級操作。這很大程度上提供了開發(fā)的便利性。axpesmc

axpesmc

另外,所謂的“拖拽式生成API代碼”,即調用API功能的代碼樣例可以直接拖動到代碼編輯區(qū)。若樣例代碼依賴某些特殊的包,則在拖動操作后,會自動引入依賴包、自動生成頭部import。這些都還是頗具特色的。axpesmc

在開發(fā)周期的調測方面,華為提供了遠程真機,大概有5000多個華為機型,不同的系統(tǒng)版本、屏幕分辨率等可做調測。與此同時,華為另外還提供了云測和DFX診斷服務 、“非侵入式”的數(shù)據(jù)分析。axpesmc

不言而喻,降低開發(fā)難度——不管是完善IDE的體驗,還是降低接入Kit的技術難度——本質上都是為了吸引更多的開發(fā)者加入到這個生態(tài)中來?,F(xiàn)階段是華為1+8+N生態(tài)的擴展期,華為期望構建起的是以智能手機為中心,將所有周邊智能設備通過分布式能力串聯(lián)起來的生態(tài)。這是華為在萬物互聯(lián)方面的龐大視野,也是華為對萬物互聯(lián)樣貌的理解。axpesmc

這樣的布局,顯然打破了智能手機自身生態(tài)的局限,也并不局限在單純的智能家居或者某種具體使用場景,描繪的是一幅令IoT真正構成統(tǒng)一生態(tài)的圖景?,F(xiàn)如今華為側打造了這一生態(tài)的基礎或平臺,并正逐步補足和完善;而要讓生態(tài)真正活躍、豐富起來,仍然要靠三方開發(fā)者的共同努力,這是值得期待的。axpesmc

本文為國際電子商情原創(chuàng)文章,未經(jīng)授權禁止轉載。請尊重知識產(chǎn)權,違者本司保留追究責任的權利。
  • 搜華為開發(fā)者聯(lián)盟
  • 怎么進入華為生態(tài)?找不到門道啊
  • 支持華為
黃燁鋒
歐陽洋蔥,編輯、上海記者,專注成像、移動與半導體,熱愛理論技術研究。
  • 微信掃一掃,一鍵轉發(fā)

  • 關注“國際電子商情” 微信公眾號

近期熱點

廣告
廣告

EE直播間

更多>>

在線研討會

更多>>
老司国产精品免费视频 | 久久久久久久久精品免费看片| 亚洲欧美日韩综合网站色aa| 欧美天天综合色影久久精品| 99久久精品自在自看国产| 国产成人拍精品视频午夜网站| 国内丰满少妇一级毛片| 国产熟女高潮一区二区三区| YYY6080韩国三级理论久久| 久久久无码国产精品免费不卡| 玖玖成人无码大片一区二区| 国产成人午夜精品一区二区三区| 国产女人高潮好舒服在线观看| 国产精品观看在线亚洲人成网| 亚洲综合色在线观看一区二区三区| 一极a做片性视频无码鲁鲁网| 91校花国产大学生| 亞洲人成網站999久久久綜合| 日韩另类一区二区三区| 久久中文精品无码中文字幕| JK浴室自慰到不停喷水尿失禁| 日韩精品无码一区二区| 成人免费毛片在线观看| 无码人妻精品一区二区| 国产最爽的乱婬视频国语对白| 久久不见久久见免费影院www日本| 国产精品原创AV片国产日韩| 久久国产成人午夜AV影院无码| 一级做a爰片久久毛片潮喷| 亚洲精品97久久中文字幕无码| 日本狂喷奶水在线播放212| 国产精品无码素人福利免费| AV精品一区二区三区| 精品久久久久久9蜜桃| 无码一区二区视频| 精品国产人成在线| 秋霞2016午夜限制电影在线| 亚洲人成网址在线播放狼友| 97视频人人看人人做首页一97碰| 国产一二三区在线播放| 国产精品99久久99久久久动漫|