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

OpenHarmony - 相機(Camera)的調用

系統 OpenHarmony
本文主要介紹在OpenHarmony應用開發中ArkUI開發框架下相機應用的開發。


??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

一、前言

camera使用介紹

相機是一個系統的基礎能力,能夠通過調用相機進行拍照,在很多場景下都會使用到相機的調用,如人臉識別門禁,人臉解鎖等操作。

本文主要介紹在OpenHarmony應用開發中ArkUI開發框架下相機應用的開發。

開發模式:Stage開發模式

SDK版本:3.2.2.5

開發環境:DevEco Studio 3.0 Release 3.0.0.993

效果展示

相機調用成功如下圖:

OpenHarmony - 相機(Camera)的調用 -開源基礎軟件社區

二、實現步驟

1、聲明權限

(1)在module.json5中配置權限

"reqPermissions": [   {
"name": "ohos.permission.LOCATION",
},
{
"name": "ohos.permission.CAMERA"
},
{
"name": "ohos.permission.MICROPHONE"
},
{
"name": "ohos.permission.MEDIA_LOCATION"
},
{
"name": "ohos.permission.WRITE_MEDIA"
},
{
"name": "ohos.permission.READ_MEDIA"
}]

(2)在MainAbility.ts中調用requestPermissionsFromUser方法申請權限

const PERMISSIONS: Array<string> = [
'ohos.permission.CAMERA',
'ohos.permission.MICROPHONE',
'ohos.permission.MEDIA_LOCATION',
'ohos.permission.READ_MEDIA',
'ohos.permission.WRITE_MEDIA',
'ohos.permission.GET_WIFI_INFO ',
'ohos.permission.GET_WIFI_PEERS_MAC ',
]

globalThis.abilityWant = want;
globalThis.context = this.context
globalThis.abilityContext = this.context;

globalThis.context.requestPermissionsFromUser(PERMISSIONS).then((message)=>{
console.log(JSON.stringify(message))
})

注意:權限需要在頁面加載前提前申請,所以需要在調用相機的頁面前添加一個過渡的頁面。

2、準備工作

(1)導包

import camera from '@ohos.multimedia.camera';
import image from '@ohos.multimedia.image';
import fileio from '@ohos.fileio';
import mediaLibrary from '@ohos.multimedia.mediaLibrary'
const CameraSize = {
WIDTH: 640,
HEIGHT: 480
}

(2)定義變量

private mXComponentController = new XComponentController()
private cameraManager: camera.CameraManager = undefined
private cameras: Array<camera.Camera> = undefined
private cameraId: string = undefined
private mReceiver: image.ImageReceiver = undefined
private cameraInput: camera.CameraInput = undefined
private previewOutput: camera.PreviewOutput = undefined
private mSurfaceId: string = undefined
private photoOutput: camera.PhotoOutput = undefined
private captureSession: camera.CaptureSession = undefined
private mediaUtil: MediaUtil = undefined
@State desStr: string = ""
private fileAsset: mediaLibrary.FileAsset
private surfaceId: number
@State photoUriMedia: string = ""
private photoFlag: boolean = true
@State imgUrl: string = ""
@State isMediaUrl:boolean=true //判斷保存路徑為是沙箱路徑或者媒體路徑,默認媒體路徑
aboutToAppear(){
this.mediaTest = mediaLibrary.getMediaLibrary(globalThis.context)
}

(3)工具方法

async createAndGetUri(mediaType: number) {
let info = this.getInfoFromType(mediaType)
let dateTimeUtil = new DateTimeUtil()
let name = `${dateTimeUtil.getDate()}_${dateTimeUtil.getTime()}`
let displayName = `${info.prefix}${name}${info.suffix}`
let publicPath = await this.mediaTest.getPublicDirectory(info.directory)
let dataUri = await this.mediaTest.createAsset(mediaType, displayName, publicPath)
return dataUri
}
async getFdPath(fileAsset: any) {
let fd = await fileAsset.open('Rw')
return fd
}
getInfoFromType(mediaType: number) {
let result = {
prefix: '', suffix: '', directory: 0
}
switch (mediaType) {
case mediaLibrary.MediaType.FILE:
result.prefix = 'FILE_'
result.suffix = '.txt'
result.directory = mediaLibrary.DirectoryType.DIR_DOCUMENTS
break
case mediaLibrary.MediaType.IMAGE:
result.prefix = 'IMG_'
result.suffix = '.jpg'
result.directory = mediaLibrary.DirectoryType.DIR_IMAGE
break
case mediaLibrary.MediaType.VIDEO:
result.prefix = 'VID_'
result.suffix = '.mp4'
result.directory = mediaLibrary.DirectoryType.DIR_VIDEO
break
case mediaLibrary.MediaType.AUDIO:
result.prefix = 'AUD_'
result.suffix = '.wav'
result.directory = mediaLibrary.DirectoryType.DIR_AUDIO
break
}
return result
}

(4)工具類

/**
* @file 日期工具
*/
export default class DateTimeUtil {

/**
* 時分秒
*/
getTime() {
const DATETIME = new Date()
return this.concatTime(DATETIME.getHours(), DATETIME.getMinutes(), DATETIME.getSeconds())
}

/**
* 年月日
*/
getDate() {
const DATETIME = new Date()
return this.concatDate(DATETIME.getFullYear(), DATETIME.getMonth() + 1, DATETIME.getDate())
}

/**
* 日期不足兩位補充0
* @param value-數據值
*/
fill(value: number) {
return (value > 9 ? '' : '0') + value
}

/**
* 年月日格式修飾
* @param year
* @param month
* @param date
*/
concatDate(year: number, month: number, date: number) {
return `${year}${this.fill(month)}${this.fill(date)}`
}

/**
* 時分秒格式修飾
* @param hours
* @param minutes
* @param seconds
*/
concatTime(hours: number, minutes: number, seconds: number) {
return `${this.fill(hours)}${this.fill(minutes)}${this.fill(seconds)}`
}
}

這個工具類主要是用來進行獲取時間對相片進行命名的工具類。

3、構建UI組件

頁面主要分為2塊,左邊為相機的XComponent組件,右邊為圖片顯示區域。拍完的照片能夠顯示在右邊。XComponent組件作用于EGL/OpenGLES和媒體數據寫入,并顯示在XComponent組件。相關資料https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-basic-components-xcomponent-0000001333800561。

hml代碼如下:

build() {
Flex() {
Flex() {
Stack() {
Flex() {
//相機顯示的組件
XComponent({
id: 'componentId',
type: 'surface',
controller: this.mXComponentController
}).onLoad(() => {
this.mXComponentController.setXComponentSurfaceSize({ surfaceWidth: 640, surfaceHeight: 480 })
this.surfaceId = this.mXComponentController.getXComponentSurfaceId()
this.initCamera(this.surfaceId)
})
}.width(800).height(800)
//顯示在相機上面的組件:拍照和攝像的圖標,攝像的時間
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.End, alignItems: ItemAlign.Center }) {
if (this.photoFlag) { //拍照
Image($r("app.media.take_photo_normal")).width(50).height(50).onClick(() => {
this.desStr = "拍照完成"
this.takePicture()
})
}
Text(this.desStr).fontColor("red").height(30).fontSize(20)
}.width(480).height(480)
}.border({ width: 1, style: BorderStyle.Solid, color: "#000000" })
//右邊的控制button和圖片顯示區域
Flex({
direction: FlexDirection.Column,
justifyContent: FlexAlign.SpaceBetween,
alignItems: ItemAlign.Center,
}) {
Button("選擇沙箱路徑存儲").onClick(()=>{
this.isMediaUrl=false
}) .stateStyles({
normal: { // 設置默認情況下的顯示樣式
.backgroundColor(Color.Blue)
},
pressed: { // 設置手指摁下時的顯示樣式
.backgroundColor(Color.Pink)
}
})
Image(decodeURI("file://"+this.imgUrl)).width(480).height(350)//顯示沙箱圖片
Button("選擇媒體路徑存儲").onClick(()=>{
this.isMediaUrl=true
}) .stateStyles({
normal: { // 設置默認情況下的顯示樣式
.backgroundColor(Color.Blue)
},
pressed: { // 設置手指摁下時的顯示樣式
.backgroundColor(Color.Pink)
}
})
Image(decodeURI(this.imgUrl)).width(480).height(350) //顯示媒體圖片
}.width(480).height("100%").border({ width: 1, style: BorderStyle.Solid, color: "#000000" })

}.border({ width: 1, style: BorderStyle.Solid, color: "red" })
.width("100%").height("100%")
}
.height('100%').width("100%")
}

UI實現了對存儲路徑的選擇,需要存儲到沙箱路徑還是媒體路徑。

注意:沙箱路徑需要加上"file://",查看對應的存儲路徑步驟:

  1. 打開hdc命令窗口。
  2. cd /data/app/el2/100/base/com.chinasoft.photo/haps/entry/files進入。
  3. ls查看全部文件。

4、拍照流程

(1)初始化相機

這一步需要在拍照前就進行,一般是在XComponent組件的onLoad()中進行的。

//初始化相機和會話管理
async initCamera(surfaceId: number) {
this.cameraManager = await camera.getCameraManager(globalThis.context)//需要在Ability中定義globalThis.context=this.context
this.cameras = await this.cameraManager.getCameras()
this.cameraId = this.cameras[1].cameraId
await this.photoReceiver() //創建圖片接收器并進行訂閱
this.mSurfaceId = await this.mReceiver.getReceivingSurfaceId()
this.cameraInput = await this.cameraManager.createCameraInput(this.cameraId)
this.previewOutput = await camera.createPreviewOutput(surfaceId.toString())
this.photoOutput = await camera.createPhotoOutput(this.mSurfaceId)

this.captureSession = await camera.createCaptureSession(globalThis.context)
await this.captureSession.beginConfig()
await this.captureSession.addInput(this.cameraInput)
await this.captureSession.addOutput(this.previewOutput)
await this.captureSession.addOutput(this.photoOutput)
await this.captureSession.commitConfig()
await this.captureSession.start().then(() => {
console.log('zmw1--Promise returned to indicate the session start success.');
})
}
//創建圖片接收器并進行訂閱
async photoReceiver() {
this.mReceiver = image.createImageReceiver(CameraSize.WIDTH, CameraSize.HEIGHT, 4, 8)
let buffer = new ArrayBuffer(4096)
this.mReceiver.on('imageArrival', () => {
console.log("zmw -service-imageArrival")
this.mReceiver.readNextImage((err, image) => {
if (err || image === undefined) {
return
}
image.getComponent(4, (errMsg, img) => {
if (errMsg || img === undefined) {
return
}
if (img.byteBuffer) {
buffer = img.byteBuffer
}
if(this.isMediaUrl){
this.savePictureMedia(buffer, image)
}else{
this.savePictureSand(buffer, image)
}
})
})
return buffer
})
}
  1. 根據camera的getCameraManager方法獲取CameraManager。
  2. 通過CameraManager獲取所有的相機數組,找到可用的相機,并獲取相機的cameraid。
  3. 創建圖片接收器并進行訂閱,獲取receiver的surfaceId。
  4. 通過CameraManager的createCameraInput(cameraid)創建相機輸入流。
  5. 通過camera的createPreviewOutput(sufaceId)創建相機預覽輸出流.這里sufaceId為XComponent的id。
  6. 通過camera的createPhotoOutput(sufaceId)創建相機拍照輸出流.這里sufaceId為圖片接收器的surfaceId。
  7. 會話管理:創建會話,并且配置會話的相機輸入流,相機拍照輸出流與相機預覽流,提交配置,開始會話。

至此,相機就能正常的顯示出圖像了。

(2)用拍照方法拍攝照片

//拍攝照片
async takePicture() {
let photoSettings = {
rotation: camera.ImageRotation.ROTATION_0,
quality: camera.QualityLevel.QUALITY_LEVEL_LOW,
mirror: false
}
await this.photoOutput.capture(photoSettings)
}

調用相機的輸出流的capture方法進行拍照操作,會觸發圖片接收器的監聽,進行對字節流的寫入操作,保存到沙箱或者媒體。

(3)保存圖片

分為沙箱路徑與媒體路徑:

//保存沙箱路徑
async savePictureSand(buffer: ArrayBuffer, img: image.Image) {
let info = this.mediaUtil.getInfoFromType(mediaLibrary.MediaType.IMAGE)
let dateTimeUtil = new DateTimeUtil()
let name = `${dateTimeUtil.getDate()}_${dateTimeUtil.getTime()}`
let displayName = `${info.prefix}${name}${info.suffix}`
let sandboxDirPath = globalThis.context.filesDir;
let path = sandboxDirPath + '/' + displayName
this.imgUrl=path
let fdSand = await fileio.open(path, 0o2 | 0o100, 0o666);
await fileio.write(fdSand, buffer)
await fileio.close(fdSand).then(()=>{
this.desStr=""
});
await img.release()
}
//保存媒體路徑
async savePictureMedia(buffer: ArrayBuffer, img: image.Image) {
this.fileAsset = await this.mediaUtil.createAndGetUri(mediaLibrary.MediaType.IMAGE)
this.imgUrl = this.fileAsset.uri
let fd = await this.mediaUtil.getFdPath(this.fileAsset)
await fileio.write(fd, buffer)
await this.fileAsset.close(fd).then(()=>{
this.desStr=""
})
await img.release()
}

(4)釋放相機

//結束釋放相機資源
async releaseCamera() {
if (this.captureSession) {
await this.captureSession.stop().then(() => {
})
}
if (this.cameraInput) {
await this.cameraInput.release().then(() => {
})
}
if (this.previewOutput) {
await this.previewOutput.release().then(() => {
})
}
if (this.photoOutput) {
await this.photoOutput.release().then(() => {
})
}
// 釋放會話
if (this.captureSession) {
await this.captureSession.release((err) => {
if (err) {
console.error('zmw Failed to release the CaptureSession instance ${err.message}');
return;
}
});
}
}

在完成了相機的調用后,需要對相機的資源進行釋放,否則再次調用的時候會一直被占用而導致黑屏。

三、總結

openHarmony對于相機的官方使用文檔不太清晰,有許多的坑,需要去趟,在這個過程中我遇到的問題:

  1. 在相機的使用時,由于開發板上的相機獲取到了兩個,一個是外接USB的相機,一個應該是系統的,在獲取相機的id的時候需要注意。
  2. 在保存相機拍照的圖片的時候,保存到沙箱路徑時顯示不到頁面上,需要在保存的路徑前加上"file://"。

需要擴展研究的是進行相機的攝像操作,以及相機拍照與攝像的切換操作。

參考資料:

https://gitee.com/openharmony/app_samples/tree/master/media/Scan。

https://gitee.com/openharmony/applications_camera。

https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta3/zh-cn/application-dev/media/camera.md。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-01-06 16:16:21

鴻蒙HarmonyOS應用

2022-04-21 11:26:31

鴻蒙操作系統

2023-02-21 16:41:41

分布式相機鴻蒙

2023-02-20 15:38:38

2023-02-20 15:29:14

分布式相機鴻蒙

2023-11-27 08:21:49

Camera2API,

2021-09-13 15:15:18

鴻蒙HarmonyOS應用

2021-11-01 17:31:21

Camera2 相機開發

2022-06-07 10:33:29

Camera組件鴻蒙

2015-12-04 10:25:50

VR拍照谷歌

2022-02-24 16:00:59

Ability鴻蒙JS

2013-06-13 17:30:16

Camera360拍照軟件

2013-01-09 17:22:38

Android開發Camera

2022-03-14 15:11:01

harmony鴻蒙操作系統

2022-05-20 10:56:54

AbilityeTS FA調用

2022-12-15 17:35:37

2022-06-22 09:14:23

事件打點HiSysEvent

2022-02-14 13:52:04

OpenHarmor系統鴻蒙

2022-02-08 15:07:45

OpenHarmor鴻蒙操作系統

2021-06-06 16:05:31

OpenHarmony
點贊
收藏

51CTO技術棧公眾號

92国产精品观看| 欧美大黑bbbbbbbbb在线| 亚洲午夜精品在线| 欧美日韩在线精品| 国产精品毛片一区视频播| 欧美1区3d| 亚洲欧美国产高清va在线播| 国产精品久久a| av3级在线| 日本一区二区高清| 高清视频一区二区三区| 国产乡下妇女做爰毛片| 欧美亚洲国产激情| 欧美大片一区二区| 校园春色 亚洲色图| 欧美aaaxxxx做受视频| 国产精品午夜久久| 激情小说网站亚洲综合网| 亚洲一区二区人妻| 亚洲欧美日韩专区| 欧美另类暴力丝袜| 久久久精品成人| 另类图片第一页| 337p亚洲精品色噜噜狠狠| 免费毛片小视频| 在线不卡日本v二区707| 国产精品午夜在线观看| 精品欧美日韩在线| a在线观看视频| 人禽交欧美网站| 秋霞av国产精品一区| 久久精品视频9| 国产精品麻豆久久| 国产午夜精品免费一区二区三区| 国产精品无码自拍| 亚洲一区二区小说| 欧美视频一区二区三区在线观看| 国产精品国产亚洲精品看不卡| 成人福利片网站| 国产精品卡一卡二| 日韩在线电影一区| 你懂的在线看| 91在线播放网址| 国产精品久久久久久免费观看| 国产精品乱码一区二区| 美女网站视频久久| 国产精品成人国产乱一区| 国产三级精品三级在线观看| 亚洲裸体俱乐部裸体舞表演av| 久久国产精品久久久久| 外国一级黄色片| 亚洲成av人电影| 社区色欧美激情 | 婷婷丁香综合网| 日韩精品网站| 久久久极品av| www.超碰在线观看| 你懂的网址国产 欧美| 久久成人亚洲精品| 强行糟蹋人妻hd中文| 欧美精品97| 欧美精品videos性欧美| 日韩网红少妇无码视频香港| 夜夜爽av福利精品导航| 欧美中文字幕在线视频| 樱花视频在线免费观看| 免费成人性网站| 国产在线久久久| 国产国语亲子伦亲子| 国产成人精品影视| 国产欧美一区二区视频 | 日韩精品中文字幕在线不卡尤物 | 久久亚洲一级片| 日韩wuma| 老司机精品影院| 一区二区视频在线看| 国产精品www在线观看| 老司机深夜福利在线观看| 一本大道久久a久久综合| 日韩一级理论片| 韩国三级成人在线| 亚洲福利视频久久| 1024手机在线观看你懂的| 999久久久精品国产| 欧美激情第三页| 日韩人妻精品中文字幕| 麻豆久久一区二区| 超碰国产精品久久国产精品99| 亚洲欧美日韩精品永久在线| 亚洲国产成人私人影院tom| 日本高清xxxx| 亚洲欧美小说色综合小说一区| 欧洲一区二区三区免费视频| 下面一进一出好爽视频| 日本一道高清一区二区三区| 一区二区三区四区精品| 美女视频黄免费| 三级不卡在线观看| 97中文在线| 大胆av不用播放器在线播放| 一二三四社区欧美黄| 国产a级片免费观看| 久久伊人久久| 国产亚洲美女久久| 久久精品视频久久| 久久爱www久久做| 久久久久久久久久久久久久久久av | 亚洲欧美韩国| 欧美变态凌虐bdsm| 男人天堂资源网| 国产精品色网| 成人激情av| 日本成人在线播放| 一本色道久久综合狠狠躁的推荐| 久久久九九九热| 欧美老女人另类| 97视频在线观看播放| 国产免费的av| 亚洲国产精品成人久久综合一区| 成年女人18级毛片毛片免费| 亚洲日本免费电影| 亚洲新声在线观看| 国产精品一区二区6| 国产剧情一区二区| 亚洲精品二区| 日韩a**中文字幕| 亚洲精品丝袜日韩| 日本少妇性高潮| 国产a级毛片一区| 桥本有菜av在线| 日本精品在线中文字幕| 日韩精品在线免费播放| 国产系列精品av| 懂色av一区二区三区蜜臀| ijzzijzzij亚洲大全| 精品裸体bbb| 亚洲深夜福利在线| 一级黄色免费网站| 99国产欧美久久久精品| 黄色国产一级视频| 欧美91在线| 亚洲91精品在线| 女人18毛片一区二区三区| 樱桃国产成人精品视频| 中文字幕剧情在线观看| 久久国产成人午夜av影院宅| 国产精品久久久| 亚洲图片88| 欧美年轻男男videosbes| 五月天婷婷丁香网| 久久精品国产99国产精品| 亚洲巨乳在线观看| 日本欧美在线| 久久影院中文字幕| 亚洲AV无码成人片在线观看| 一区二区欧美国产| 97中文字幕在线观看| 亚洲视频高清| 久久免费看av| 欧美aaa视频| 在线观看欧美日韩| 亚洲一级视频在线观看| 亚洲精品国产第一综合99久久 | 伊人网av在线| **性色生活片久久毛片| 成年人网站av| 亚洲人成免费| 欧美大陆一区二区| 日韩不卡视频在线观看| 精品国产一区二区三区久久| 国产情侣自拍小视频| 亚洲一区二区在线免费观看视频| 中文字幕 日本| 丝袜美腿一区二区三区| 亚洲一区二区三区免费看| 高清一区二区三区av| 久久久久久91香蕉国产| 日韩国产福利| 欧美日韩免费观看一区二区三区| 欧产日产国产v| 久久综合九色综合欧美98| 久久婷婷综合色| 亚洲夜间福利| 日韩和欧美的一区二区| 国产剧情一区二区在线观看| 7m精品福利视频导航| 国产69精品久久app免费版| 91精品国产欧美一区二区成人| 国产无精乱码一区二区三区| 国产三级一区二区| 欧美性猛交乱大交| 亚洲专区一区| 神马午夜伦理影院| 一道本一区二区三区 | 91嫩草精品| 国产精品99久久99久久久二8| 黄色在线免费| 亚洲色图第三页| 亚洲精品无码久久久| 色呦呦日韩精品| 欧美国产日韩综合| 欧美经典三级视频一区二区三区| 国内av免费观看| 视频一区二区中文字幕| 国产精品视频网站在线观看| 最近国产精品视频| 福利视频一区二区三区| 日本久久免费| 久久久人成影片一区二区三区| av在线中文| 日韩精品免费观看| 国产黄频在线观看| 欧美三区在线视频| www.国产com| 亚洲一级二级三级| 日日碰狠狠添天天爽| 久久亚洲欧美国产精品乐播 | 久久99视频免费| 91在线品视觉盛宴免费| 日韩精品视频在线观看网址| www.国产麻豆| 91精品国产综合久久精品app| 在线观看污污网站| 精品福利在线观看| 久艹视频在线观看| 亚洲女子a中天字幕| 五月天精品在线| 久久女同性恋中文字幕| a天堂视频在线观看| 国产乱一区二区| 久久久久久久久久一区| 日本视频一区二区| 国产精品无码专区av在线播放| 精品91视频| 国产av熟女一区二区三区| 婷婷久久一区| 最新欧美日韩亚洲| 久久中文字幕av| 亚洲欧美成人一区| 精品久久精品| 视频在线99| 精品色999| 午夜精品福利一区二区| 精品精品99| 亚洲人成影视在线观看| 久久中文字幕二区| 亚洲最新免费视频| 99精品视频精品精品视频| 日韩欧美视频一区二区三区四区| 欧美激情在线免费| 日本视频一区二区在线观看| 欧美极品中文字幕| 亚洲国产精品一区二区第四页av| 欧美艳星介绍134位艳星| 欧美一进一出视频| 成人在线免费观看视频| 四虎永久国产精品| 93在线视频精品免费观看| 一区二区三区四区视频在线观看 | 国产视频911| 99在线视频免费| 成人欧美一区二区三区| 中文字幕影音先锋| 午夜精品免费在线观看| av大全在线观看| 欧美在线免费观看亚洲| 亚洲视频一区二区三区四区| 91麻豆精品91久久久久久清纯 | 黄色片免费在线观看视频| 欧美日韩mv| 久久精品.com| 久久精品国内一区二区三区| 国产成人强伦免费视频网站| bt7086福利一区国产| 四虎国产精品成人免费入口| 中文字幕在线不卡一区二区三区| 欧美日韩一级大片| 欧美日韩国产一区二区| 中文字幕 国产| 欧美成人乱码一区二区三区| 人操人视频在线观看| 日韩在线视频观看| 久久国产精品黑丝| 日韩av观看网址| 国产精品毛片aⅴ一区二区三区| 国产chinese精品一区二区| 婷婷亚洲成人| 路边理发店露脸熟妇泻火| 91久久综合| 中文字幕资源在线观看| proumb性欧美在线观看| 国产无遮挡在线观看| 亚洲综合成人在线视频| 无码人妻精品一区二区蜜桃色欲 | 欧美日韩综合视频| 一级全黄少妇性色生活片| 亚洲国产高潮在线观看| 午夜视频在线看| 2019中文字幕免费视频| 精品一区二区三区免费看| 蜜桃免费一区二区三区| 91超碰成人| 日本熟妇人妻中出| 成人午夜视频在线观看| 美国一级黄色录像| 欧美视频在线观看免费网址| 国产视频第一页| 国产一区二区三区高清在线观看| 青草在线视频| 成人免费淫片视频软件| 久久99国内| 极品美女扒开粉嫩小泬| 韩国毛片一区二区三区| 中国毛片在线观看| 午夜精品久久久久久久99樱桃 | 高清久久久久久| 懂色av蜜臀av粉嫩av永久| 欧美午夜激情在线| 亚洲国产精品国自产拍久久| 日韩在线视频免费观看| 最新日韩三级| 九色视频成人porny| 欧美日韩视频一区二区三区| 午夜免费福利视频在线观看| 久久久久久**毛片大全| 亚欧洲精品在线视频| 日韩三级中文字幕| 麻豆视频在线观看免费| 国产精品久久久久久久美男| 国产成人调教视频在线观看 | 亚洲午夜在线观看| 天堂午夜影视日韩欧美一区二区| 欧美肉大捧一进一出免费视频| 一区二区三区免费在线观看| 国产乱子伦精品无码码专区| 综合激情国产一区| 国产亚洲欧美日韩精品一区二区三区| 鲁丝一区二区三区免费| 一级成人国产| 亚洲久久久久久| 婷婷国产在线综合| 色婷婷av一区二区三| 性金发美女69hd大尺寸| 好吊妞视频这里有精品| www.avtt| av电影天堂一区二区在线| 懂色av.com| 日韩成人在线观看| 在线黄色的网站| 欧美不卡福利| 日韩电影在线一区| 国产黄色录像视频| 欧美精品乱码久久久久久| 日本在线免费| 亚洲伊人一本大道中文字幕| 欧美一区高清| 国产激情第一页| 色妞www精品视频| yjizz视频网站在线播放| 国产精品视频自在线| 91日韩欧美| 超碰人人cao| 黄色精品一区二区| 日本在线一二三| 国产精品免费久久久久影院| 91一区在线| 国产xxxx视频| 91久久精品网| 黄网站在线免费| 国产精品视频免费一区二区三区| 亚洲理论在线| 久久久免费看片| 欧美变态凌虐bdsm| 蜜臀国产一区| 手机福利在线视频| 成人av电影免费在线播放| 69亚洲精品久久久蜜桃小说| 日韩在线观看视频免费| 成人在线tv视频| www黄色在线| 亚洲视频一区二区在线| 欧美在线精品一区二区三区| 国产成人啪精品视频免费网| 天天做天天爱综合| 亚洲天堂网一区二区| 欧美日韩午夜在线| 国产丝袜视频在线播放| 欧美日韩在线观看一区| 国产精品一区在线观看乱码| 天堂网一区二区三区| www.xxxx欧美| 首页亚洲中字| 亚洲精品永久视频| 天天综合天天综合色| 日本在线观看视频| 久久久久无码国产精品一区| 精品一区二区在线视频| 久久亚洲精品国产| 久久香蕉国产线看观看网| 日韩电影不卡一区|