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

技術(shù)干貨 | Electron 插件開發(fā)實(shí)踐

開發(fā)
Electron 是以 Nodejs 和 Chromiu m 為內(nèi)核的跨平臺開發(fā)框架。 本文結(jié)合網(wǎng)易云信的實(shí)踐經(jīng)驗(yàn),對 js 和 C++ 混合編程在 Electron 桌面程序中的應(yīng)用進(jìn)行介紹。

01 前言

早期跨平臺桌面應(yīng)用開發(fā)大多采用 Qt 和 C++,受語言學(xué)習(xí)成本開發(fā)效率影響,越來越多的人將目光轉(zhuǎn)向了 Electron。Electron 是以 Nodejs 和 Chromium 為內(nèi)核的跨平臺開發(fā)框架。

Electron 基于 Web 技術(shù)開發(fā)桌面應(yīng)用,Web 技術(shù)在軟件開發(fā)領(lǐng)域應(yīng)用非常廣泛,生態(tài)較為成熟,學(xué)習(xí)成本較低、開發(fā)效率高。但是 Web 在處理多線程、并發(fā)場景時(shí)顯得捉襟見肘,Electron 底層有 Nodejs 支持,Nodejs 的插件模塊具有調(diào)用 C++ 的能力,C++ 非常適合處理高并發(fā)、音視頻等復(fù)雜業(yè)務(wù),彌補(bǔ)了 Web 的性能問題。本文就 js 和 C++ 混合編程在 Electron 桌面程序中的應(yīng)用進(jìn)行介紹。

Nodejs 中使用 C++,有以下幾種方式:

  • 將 C++ 程序作為獨(dú)立子進(jìn)程使用。
  • 通過 node-ffi 方式調(diào)用。
  • Nodejs 擴(kuò)展,將 C++ 代碼編譯為 Nodejs 模塊,本文主要針對這種方式進(jìn)行介紹。

02 C++ 擴(kuò)展

C++ 擴(kuò)展簡介 

Nodejs 本身采用 C++ 編寫,所以我們可以使用 C++ 編寫的自己的 Nodejs 模塊,可以像 Nodejs 原生模塊一樣使用。C++ 擴(kuò)展格式為 .node,其本質(zhì)為動態(tài)鏈接庫,相當(dāng)于 Windows 下 .dll。C++ 擴(kuò)展作為動態(tài)鏈接庫,通過 dlopen 在 Nodejs 中加載。

C++ 擴(kuò)展架構(gòu)圖:

C++ 擴(kuò)展實(shí)現(xiàn)的幾種方式 

實(shí)現(xiàn) C++  擴(kuò)展有3種方式:原生模式、nan、Node-API。

  • 原生模式直接使用 Nodejs API 及 Chrome V8 API 進(jìn)行開發(fā),這種方式早已被遺棄。特點(diǎn): Nodejs API 和 Chrome V8 API 接口一旦變化,依賴這些 API 的 C++ 擴(kuò)展便無法使用,特定版本的 C++ 擴(kuò)展只能在對應(yīng)版本 Nodejs 環(huán)境中使用。
  • nan(N ative Abstractions for Nodejs)nan 是 N odejs 抽象接口集,nan 根據(jù)當(dāng)前 Nodejs 版本,使用宏判斷執(zhí)行對應(yīng)版本的 AP I。特點(diǎn): C++ 擴(kuò)展在不同版  Nodejs 中運(yùn)行,需重新編譯,Nodejs 升級到較高版本后出現(xiàn)接口不兼容問題。
  • Node-APINode-API 使用 Nodejs 二進(jìn)制接口,相比 nan 方式這些二進(jìn)制接口更為穩(wěn)定。特點(diǎn): 不同版本 Nodejs 只要 abi 版本號一致,C++ 擴(kuò)展可以直接使用無需重新編譯,消除了 Nodejs 版本差異。

構(gòu)建工具 

  • node-gypnode-gyp  對 gyp(Chromium 編寫的構(gòu)建工具)進(jìn)行了封裝,binding.gyp 為其配置文件。node-gyp 工作分為兩個(gè)過程:a.  結(jié)合 binding.gyp 生成對應(yīng)平臺下的工程配置,比如:Windwos 下生成 .sln 項(xiàng)目文件。b.  項(xiàng)目文件編譯,生成 C++ 擴(kuò)展。binding.gyp 配置文件,以 Windows 為例:
{
"targets": [
{
"target_name": "addon_name",
"type": "static_library"
'defines': [
'DEFINE_FOO',
'DEFINE_A_VALUE=value',
],
'include_dirs': [
'./src/include',
'<!(node -e "require(\'nan\')")' // include NAN in your project
],
'sources': [
'file1.cc',
'file2.cc',
],
'conditions': [
[
'OS=="win"',
{
'copies': [{
'destination': '<(PRODUCT_DIR)',
'files': [
'./dll/*'
]
}],
'defines': [
'WINDOWS_SPECIFIC_DEFINE',
],
'library_dirs': [
'./lib/'
],
'link_settings': {
'libraries': [
'-lyou_sdk.lib'
]
},
'msvs_settings': {
'VCCLCompilerTool': {
'AdditionalOptions': [
'/utf-8'
]
}
},
}
]
],
},
]
}

字段說明:

  • target_name: 目標(biāo)的名稱,此名稱將用作生成的 Visual Studio 解決方案中的項(xiàng)目名稱。
  • type: 可選項(xiàng):static_library 靜態(tài)庫、executable 可執(zhí)行文件、shared_library 共享庫。
  • defines: 將在編譯命令行中傳入的 C 預(yù)處理器定義(使用 -D 或 /D 選項(xiàng))。
  • include_dirs: C++ 頭文件所在的目錄。
  • sources: C++ 源文件。
  • conditions: 適配不同環(huán)境配置條件塊。
  • copies: 拷貝 dll 動態(tài)庫到生成目錄。
  • library_dirs: 配置 lib 庫目錄到 vs 項(xiàng)目中。
  • libraries: 項(xiàng)目依賴的庫。
  • msvs_settings: Visual Studio 中屬性設(shè)置。

node-gyp 編譯指令:

node-gyp clean //清空上一次構(gòu)建目錄
node-gyp configure //配置項(xiàng)目
node-gyp build //項(xiàng)目編譯,生成C++擴(kuò)展
node-gyp rebuild //重新生成C++擴(kuò)展,相當(dāng)于clean configure build的結(jié)合
  • cmake-jscmake-js 與 node-gyp 工作原理類似。 cmake-js 是基于 CMake 的構(gòu)建系統(tǒng),而 node-gyp 是基于  Goole 的 gyp 工具,這里不在進(jìn)行詳細(xì)介紹。

回調(diào)事件處理 

Nodejs 運(yùn)行在單線程中,但它能夠支持高并發(fā),就是依賴事件循環(huán)實(shí)現(xiàn)。簡單來說 Nodejs 主線程維護(hù)一個(gè)事件隊(duì)列,收到一個(gè)耗時(shí)任務(wù)將任務(wù)放入隊(duì)列,繼續(xù)向下執(zhí)行其他任務(wù)。主線程空閑時(shí),遍歷事件隊(duì)列,非 I/O 任務(wù)親自處理,通過回調(diào)函數(shù)返回給上層調(diào)用。I/O 任務(wù)放入線程池執(zhí)行,并指定回調(diào)函數(shù),然后繼續(xù)執(zhí)行其他任務(wù)。

C++ 擴(kuò)展調(diào)用 js 回調(diào)函數(shù)時(shí),會在 Nodejs 掛在一個(gè) libuv 線程池,用于處理回調(diào)函數(shù),當(dāng) Nodejs 主線程空閑時(shí),去遍歷線程池,處理任務(wù)。libuv 具體細(xì)節(jié)參考 nertc-electron-sdk:

https://github.com/netease-im/node-nertc-sdk/blob/main/nertc_sdk_node/nertc_node_engine_event_handler.cpp

03 混合編程實(shí)踐

示例1 

結(jié)合 node-addon-api 進(jìn)行演示,node-addon-api 對 Node-API 接口進(jìn)行了封裝開發(fā)簡單。該實(shí)例完成 js 調(diào)用 C++ 函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)字相加。

  • 項(xiàng)目結(jié)構(gòu)

  • package.json 配置文件
//package.json
{
"name": "addon-sdk",
"version": "0.1.0",
"description": "test nodejs addon sample",
"main": "./api/index.js",
"private": true,
"gypfile": true,
"dependencies": {
"bindings": "~1.2.1",
"node-addon-api": "^3.0.0"
},
"devDependencies": {
"node-gyp": "^8.2.0"
},
"scripts": {
"test": "node ./api/index.js"
},
"license": "ISC",
"author": "liyongqiang"
}
  • binding.gyp 配置文件
//binding.gyp
{
"targets": [
{
"target_name": "addon",
"sources": [
"./src/addon.cc",
"./src/engine.h" ,
"./src/engine.cpp"
],
"include_dirs": [
"<!@(node -p \"require('node-addon-api').include\")"
],
'defines': [
'NAPI_DISABLE_CPP_EXCEPTIONS'
]
}
]
}
  • C++ 擴(kuò)展
//addon.cc
#include <napi.h>
#include "engine.h"


Napi::Object InitAll(Napi::Env env, Napi::Object exports) {
return nertc::Engine::Init(env, exports);
}


NODE_API_MODULE(addon, InitAll)


//engine.h
#pragma once
#include <napi.h>
namespace nertc {
class Engine : public Napi::ObjectWrap<Engine> {
public:
static Napi::Object Init(Napi::Env env, Napi::Object exports);
Engine(const Napi::CallbackInfo& info);
private:
Napi::Value add(const Napi::CallbackInfo& info);
};
}


//engine.cpp
#include "engine.h"
namespace nertc {
Napi::Object Engine::Init(Napi::Env env, Napi::Object exports)
{
Napi::Function func =
DefineClass(env, "Engine",
{InstanceMethod("add", &Engine::add)});
Napi::FunctionReference* constructor = new Napi::FunctionReference();
*constructor = Napi::Persistent(func);
env.SetInstanceData(constructor);
exports.Set("Engine", func);
return exports;
}


Engine::Engine(const Napi::CallbackInfo& info): Napi::ObjectWrap<Engine>(info) {}


Napi::Value Engine::add(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();//獲取環(huán)境變量
int ret = 0;
int length = info.Length();//獲取參數(shù)個(gè)數(shù)
if (length != 2 || !info[0].IsNumber() || !info[1].IsNumber())
{
Napi::TypeError::New(env, "Number expected").ThrowAsJavaScriptException();
ret = -1;
return Napi::Number::New(env, ret);
}
int num1 = info[0].As<Napi::Number>().Int32Value();//獲取第一個(gè)參數(shù)
int num2 = info[1].As<Napi::Number>().Int32Value();////獲取第二個(gè)參數(shù)
int sum = num1 + num2;
return Napi::Number::New(env, sum);//返回結(jié)果到j(luò)s層
}
}
  • js 調(diào)用 C++ 擴(kuò)展
var addon = require('bindings')('addon');//調(diào)用C++擴(kuò)展
var engine = new addon.Engine();
console.log( `num1 + num2 = ${engine.add(1,2)}`);//輸出3

在 package.json 目錄下,執(zhí)行 npm install、npm run test,可以看到 js 調(diào)用 C++ 接口成功,輸出兩個(gè)數(shù)字相加結(jié)果。

示例2 

網(wǎng)易云信音視頻通話 nertc-electron-sdk,采 Node-API 方式進(jìn)行開發(fā),將 C++ 原生 sdk 封裝成 Nodejs 模塊(nertc-electron-sdk.node),結(jié)合 Electron 可以快速實(shí)現(xiàn)音視頻通話。github demo 體驗(yàn)地址:

https://github.com/netease-im/Basic-Video-Call/tree/master/Group-Video/NERtcSample-GroupVideoCall-Electron

04  常見問題

  • Electron 應(yīng)用中 js 調(diào)用 C++ 擴(kuò)展時(shí),提示 Error: The specified module could not be found。
    答:該錯誤表示能找到 C++ 擴(kuò)展模塊(.node)但是加載失敗,因?yàn)?.node 會依賴其他 .dll 和 C++ 運(yùn)行庫,缺少這些庫時(shí)就會報(bào)上面的錯誤,使用 depends 查看缺少哪種庫,配置即可。
  • 運(yùn)行使用 C++ 擴(kuò)展的 Electron 應(yīng)用,提示 The specifield module could not be found。
    答:該錯誤表示找不到 C++ 擴(kuò)展模塊。在項(xiàng)目 package.json 文件中配置 extraFiles 字段,將擴(kuò)展拷貝到 Electron 可加載目錄即可。
  • Electron 加載 C++ 擴(kuò)展時(shí)提示:Module parse failed: Unexpected character '?'。
    答:webpack 只能識別 js 和 json 文件無法識別 C++ 擴(kuò)展模式,在 Electron 打包時(shí)需要在 vue.config.js 中配置 C++ 擴(kuò)展的 loader。
  • 更多常見問題匯總:
    ?https://doc.yunxin.163.com/docs/jcyOTA0ODM/jU4NTEwNzg?platformId=50456#9


責(zé)任編輯:張燕妮 來源: 網(wǎng)易智企技術(shù)+
相關(guān)推薦

2022-08-04 10:12:49

桌面技術(shù)

2023-02-01 18:33:44

得物商家客服

2021-06-02 09:27:56

ElectronPepper Flas插件

2020-10-27 13:19:33

架構(gòu)APICloud多端

2024-12-03 11:59:53

2021-09-13 14:19:03

HudiLakehouse阿里云

2022-01-24 12:38:58

Vite插件開發(fā)

2018-01-11 17:22:20

PHP大數(shù)據(jù)開發(fā)

2023-12-26 10:04:29

Electron應(yīng)用開發(fā)框架

2019-01-15 09:10:17

邊緣計(jì)算數(shù)據(jù)中心IT

2024-04-28 14:22:25

鯤鵬

2021-06-29 18:26:34

數(shù)字媒體騰訊云數(shù)據(jù)庫

2009-06-04 20:26:45

2020-11-05 10:40:18

ActiveMQ

2017-06-13 09:17:17

手機(jī)QQQzone

2018-01-08 14:31:09

Electron桌面APP前端

2019-10-29 09:48:20

ElectronGithub開源庫

2018-09-03 09:22:25

監(jiān)控服務(wù)器性能

2009-06-03 16:06:28

Eclipse插件開發(fā)Eclipse
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产一区二区三区站长工具| 亚洲精品日产| 高清国产一区二区| 91国产一区在线| 人人爽人人爽人人片| 97精品资源在线观看| 亚洲一级电影视频| 日韩精品久久久免费观看| 国产日韩免费视频| 亚洲国内欧美| 波霸ol色综合久久| 国产精品第七页| 2020国产精品小视频| 亚洲成av人片在www色猫咪| 日韩中文一区| 人妻精品无码一区二区| 久久99精品久久久久久国产越南| 欧美大片免费看 | 国产三级一区二区| 成人av中文| 曰批又黄又爽免费视频| 国产精品美女| 精品中文字幕在线观看| 中文字幕免费高清| 大型av综合网站| 欧美精品xxxxbbbb| 黄色高清无遮挡| 久久亚洲资源| 亚洲欧洲精品一区二区精品久久久| 精品久久久久久乱码天堂| 91久久精品无码一区二区| 久久久蜜桃一区二区人| 欧美精品电影在线| 日本一级二级视频| 日韩一区欧美| 一区二区三区视频观看| 人妻少妇精品视频一区二区三区| 国产美女亚洲精品7777| 欧美视频在线一区| www日韩视频| 天堂av在线网| 精品动漫一区二区三区| 欧美中日韩在线| 超碰最新在线| 亚洲视频中文字幕| 伊人久久99| 天堂地址在线www| 国产午夜精品福利| 欧洲精品久久| 欧美挠脚心网站| 久久久美女毛片| 欧洲精品一区色| 国产精品ⅴa有声小说| 91在线视频免费观看| 国产日韩欧美一区二区三区四区| 黄色www视频| www.久久精品| 久久国产精品一区二区三区四区 | 欧洲成人一区| 欧美综合在线视频| 污片在线免费看| 精品美女一区| 欧美久久一二三四区| 成人免费黄色av| 日本在线视频一区二区三区| 欧美mv日韩mv| 波多野结衣加勒比| 免费视频国产一区| 自拍偷拍亚洲欧美| 最新av电影网站| 欧美 日韩 国产精品免费观看| 欧美成年人网站| 国产精品a成v人在线播放| 99国产精品视频免费观看一公开 | 99久久精品99国产精品| 美脚丝袜一区二区三区在线观看| 黄色视屏网站在线免费观看| 中文字幕va一区二区三区| 一区二区三区视频| 免费在线看污片| 一道本成人在线| 校园春色 亚洲色图| 豆花视频一区| 亚洲国产精品一区二区三区| 国产免费看av| 99免费精品| 国内免费精品永久在线视频| 无码人妻丰满熟妇奶水区码| 精品一区二区三区在线观看国产 | 黄色小视频在线观看| 中文字幕中文字幕在线一区 | 亚洲小说区图片| 精品人伦一区二区三区蜜桃网站 | 精品一区二区三区四区五区| 亚洲福利在线看| 国产免费嫩草影院| 日韩一级在线| 成人精品一区二区三区| 无码国产伦一区二区三区视频| 国产欧美一区二区三区网站| www.av91| 日本久久久久| 精品视频一区在线视频| 91久久国产综合| 久久精品官网| 97netav| 国产精品影院在线| 亚洲一二三区在线观看| 蜜臀av免费观看| 神马香蕉久久| 欧美另类第一页| 久草视频在线免费| 成人免费av资源| 国产精品av免费| 奇米777日韩| 亚洲成人精品视频在线观看| 成人18视频免费69| 性高湖久久久久久久久| 99中文视频在线| 日本视频在线播放| 色播五月激情综合网| 深田咏美中文字幕| 你懂的成人av| 91精品视频在线播放| 国产小视频在线| 亚洲va韩国va欧美va精品| 亚洲精品免费一区亚洲精品免费精品一区| 亚洲丁香日韩| 91精品国产九九九久久久亚洲| 国产日韩一级片| 中文字幕在线一区二区三区| 国产日韩成人内射视频| 久操国产精品| 欧美资源在线观看| 无码精品视频一区二区三区| 亚洲一卡二卡三卡四卡| 伊人免费视频二| 久久国产小视频| 国产精品久久久久高潮| 黄色片在线看| 一本一道波多野结衣一区二区| 强迫凌虐淫辱の牝奴在线观看| 欧美日韩亚洲一区在线观看| 91青青草免费观看| 午夜伦理在线视频| 日韩视频在线永久播放| 中文字幕亚洲欧美日韩| 国产精品一区二区在线观看不卡| 熟女熟妇伦久久影院毛片一区二区| 国产亚洲精彩久久| 在线精品国产成人综合| 糖心vlog精品一区二区| 国产区在线观看成人精品| 五月天婷婷激情视频| 精品久久视频| 国产日韩欧美电影在线观看| 欧美被日视频| 91精品国产91综合久久蜜臀| 免费中文字幕在线观看| 成人妖精视频yjsp地址| 和岳每晚弄的高潮嗷嗷叫视频| 哺乳挤奶一区二区三区免费看| 欧美激情亚洲视频| 日本精品一区二区在线观看| 五月综合激情网| 亚洲成人网在线播放| 日本欧美韩国一区三区| 一区精品在线| 9l亚洲国产成人精品一区二三| 欧美激情极品视频| 亚洲欧美一区二区三| 91精品1区2区| fc2ppv在线播放| 高潮精品一区videoshd| 国产一区二区在线视频播放| 自拍自偷一区二区三区| 国产精品视频精品| 免费网站在线观看人| 亚洲女人天堂色在线7777| 中文字幕福利视频| 亚洲精品欧美在线| 久久国产精品无码一级毛片| 蜜桃av噜噜一区| av在线播放天堂| 欧美男男gaytwinkfreevideos| 国产日产久久高清欧美一区| 成人影音在线| 视频在线观看一区二区| 亚洲av无码专区在线| 欧美性猛交xxxx黑人猛交| 一二三四在线观看视频| 成人成人成人在线视频| 国产又黄又猛又粗又爽的视频| 欧美xxx在线观看| 欧美亚洲另类久久综合| 久久国产精品免费一区二区三区| 51ⅴ精品国产91久久久久久| 嫩草在线视频| 日韩精品视频三区| 99精品久久久久久中文字幕| 欧美三级xxx| 欧美国产日韩在线观看成人| 国产无人区一区二区三区| 欧美日韩一区二区区别是什么 | 清纯唯美亚洲激情| 在线中文字幕电影| 在线成人激情黄色| 香蕉视频成人在线| 717成人午夜免费福利电影| 日韩福利片在线观看| 亚洲色图.com| 美国美女黄色片| 91麻豆高清视频| 国内自拍偷拍视频| 韩国精品在线观看| 亚洲第一狼人区| 免费日韩av片| 97超碰在线人人| 亚洲欧美综合| 一本久道久久综合| 第一会所亚洲原创| 六十路精品视频| 国产精品网在线观看| 91黄在线观看| 亚洲国产天堂| 国产精品爽黄69天堂a| 伊人久久综合一区二区| 久久久久久久久久av| 在线中文字幕第一页| www日韩欧美| yw视频在线观看| 一个色综合导航| 国产区av在线| 亚洲视频在线免费观看| 日本中文字幕电影在线观看| 亚洲成人激情在线观看| 免费观看a视频| 亚洲精品一区二区三区福利| 亚洲国产欧美另类| 精品国产sm最大网站| 亚洲第一天堂网| 欧美大片顶级少妇| 亚洲国产一二三区| 欧美r级电影在线观看| 男人天堂综合网| 精品国产乱子伦一区| 日本黄色三级视频| 亚洲精品电影网站| 日本不卡免费播放| 亚洲天堂网站在线观看视频| 黄色毛片在线看| 国产亚洲美女久久| 1024国产在线| 国产不卡在线观看视频| 影院欧美亚洲| 91动漫在线看| 性欧美xxxx大乳国产app| 黄色免费观看视频网站 | 农村妇女精品一二区| 亚洲免费网址| 青青青在线播放| 日本视频一区二区三区| 99re精彩视频| 国内精品国产三级国产a久久| 午夜免费视频网站| 粉嫩av一区二区三区| 亚洲制服丝袜在线播放| 久久精品这里都是精品| 刘亦菲国产毛片bd| 亚洲综合一区二区三区| 中文字幕一区二区三区精品| 日本精品视频一区二区三区| 一级久久久久久久| 欧美mv日韩mv国产网站| 欧美偷拍视频| 视频直播国产精品| 欧美aaa免费| 日韩暖暖在线视频| 精品一区91| 久久亚洲免费| 图片小说视频色综合| 69sex久久精品国产麻豆| 乱人伦精品视频在线观看| 污网站免费在线| 粉嫩绯色av一区二区在线观看| 亚洲永久精品ww.7491进入| 一区在线观看视频| 日韩黄色精品视频| 欧美日高清视频| 日韩中文字幕免费观看| 中文字幕亚洲情99在线| sm在线观看| 成人免费福利视频| 日韩人体视频| 国产人妻互换一区二区| 久久不射2019中文字幕| 在线成人免费av| 国产校园另类小说区| 久久精品一级片| 欧美在线免费播放| 视频一区 中文字幕| 综合av色偷偷网| 亚洲人体影院| 97免费资源站| 日韩一区电影| 国产真实乱子伦| 国产成人aaa| 欧美性生给视频| 色八戒一区二区三区| 少妇喷水在线观看| 久久国产精品久久久久| 欧美亚洲大片| 精品一区二区三区免费毛片| 一本到12不卡视频在线dvd| 一区二区三区视频在线观看免费| 成人黄色在线看| 国产97免费视频| 欧美日韩免费高清一区色橹橹| 亚洲欧洲视频在线观看| 美女撒尿一区二区三区| 四虎永久精品在线| 色综合视频二区偷拍在线| 男人天堂欧美日韩| 成人免费无码大片a毛片| 亚洲制服丝袜av| 国产成人精品免费看视频| 中文综合在线观看| 欧洲av一区二区| 欧美日韩精品免费在线观看视频| 伊人成年综合电影网| 四虎永久免费观看| 亚洲私人影院在线观看| 国产一区二区自拍视频| 中文字幕亚洲综合久久筱田步美 | 色综合一区二区| 污视频软件在线观看| 欧美精品福利在线| 51精品国产| 国产手机免费视频| 成人动漫一区二区三区| 国产精品99精品无码视| 亚洲国产成人在线视频| 成人bbav| 久久精品综合一区| 午夜在线精品| 精品无人区无码乱码毛片国产 | 国产露脸国语对白在线| 久久精品电影一区二区| 精品国产伦一区二区三区观看说明 | 自拍偷在线精品自拍偷无码专区| 在线免费看av片| 国产成人免费av在线| 国产另类第一区| 亚洲性视频h| 日本少妇色视频| 欧美日韩国产页| 国产免费a∨片在线观看不卡| 国产精品wwwwww| 欧美第一精品| 日日夜夜精品视频免费观看| 亚洲一区二区三区四区在线免费观看| av天堂一区二区三区| 欧美黄色三级网站| 开心激情综合| 免费国产成人av| 综合久久久久综合| 人妻偷人精品一区二区三区| 欧美在线国产精品| 成人动漫免费在线观看| 九九热精品国产| 亚洲综合一区二区| 男人天堂网在线观看| 国产免费一区二区三区在线观看| 欧美不卡在线| 国产人妻人伦精品1国产丝袜| 欧美性大战久久| 18+激情视频在线| 欧美激情专区| 国内精品不卡在线| 国产又黄又猛又粗又爽| 色噜噜国产精品视频一区二区 | 日本猛少妇色xxxxx免费网站| 欧美精品自拍偷拍| av影视在线| 四虎永久在线精品免费一区二区| 国产高清亚洲一区| 成人公开免费视频| 久久这里只有精品视频首页| 美日韩黄色大片| 五月天开心婷婷| 狠狠做深爱婷婷久久综合一区 | 在线观看日本www| 欧美色播在线播放| 天使と恶魔の榨精在线播放| 欧美日韩在线不卡一区| 国产一级精品在线| 成人午夜精品视频| 久久久久久欧美| 天天综合网91| 黄色aaa视频|