日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

基于C++的视频点播系统

發布時間:2023/12/14 c/c++ 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于C++的视频点播系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

視頻點播系統

  • 項目描述
  • 概要設計
    • 技術調研
  • 詳細設計
    • 數據管理模塊
      • 1.數據存儲
      • 2.封裝實現數據庫訪問類
        • 1.了解mysql的c語言庫接口
        • jsoncpp的基本使用:
      • 3.數據管理模塊代碼
    • 前端界面模塊
      • 1.完成前端html界面的編寫
    • 業務處理模塊
      • 1.http服務器的搭建:
      • 2.請求與響應的網絡通信接口設計
        • 1.靜態頁面請求(首頁,播放)
        • 2.動態數據請求
          • 上傳的視頻文件重名如何處理?
          • 上傳的文件冗余重復(名字不同,數據實際相同)
  • 總結


項目描述

一個用戶可以通過瀏覽器上傳視頻,且對自己上傳的視頻進行管理,而其他用戶可以通過瀏覽器觀看視頻。


概要設計

采用不太嚴謹的MVC框架。此項目分模塊進行設計——數據管理模塊:對數據進行統一管理,外界只能通過此模塊訪問;用戶界面/前端界面模塊:實現用戶交互,提供前端界面;業務處理模塊:接收前端請求進行處理完成用戶的需求。


技術調研

socket、http、tcp、json、mysql、前端三劍客(html、css、js)


詳細設計

數據管理模塊

1.數據存儲

采用MySQL數據庫——免費,采用c/s架構,可以遠程訪問以及有統一接口,安全便于擴展。

數據庫表的設計
視頻信息表:視頻id、視頻名稱、視頻描述、上傳時間、視頻文件路徑、封面圖路徑。

create database if not exists vod_system; use vod_system;create table if not exists tb_video(id int primary key auto_increment,name varchar(32),vdesc text,video_url varchar(255),image_url varchar(255),ctime datetime); insert tb_video values(null,"飛機大戰","這是一部爛片", "/video/plane.mp4","/image/plane.jpg",now());

2.封裝實現數據庫訪問類

該類提供視頻信息的增刪改查(所有視頻/單個視頻);
數據庫表的訪問類的實現

1.了解mysql的c語言庫接口

1.定義mysql句柄
2.初始化mysql句柄
3.連接mysql服務器
4.設置客戶端字符編碼集
5.切換選擇數據庫
6.執行語句(庫,表,數據操作—sql語句的執行)增,刪,改–只要語句執行成功,就表示完成了查-需要執行語句成功后對數據進行操作
①.將查詢結果保存到本地
②.獲取保存的結果集中的數據條數和列數3.遍歷逐條取出結果集中的每一條數據4.釋放結果集
7.關閉句柄,釋放資源
8.獲取某個接口執行失敗原因的接口

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <mysql/mysql.h>int main() {MYSQL *mysql = NULL;//定義,ysql句柄mysql = mysql_init(NULL);//初始化mysql句柄if(mysql == NULL){printf("mysql init error!\n");return -1;}//連接服務器mysql_real_connect(句柄,服務器IP,用戶名,密碼,庫名稱,//端口,套接字文件,客戶端標志)if(mysql_real_connect(mysql,"127.0.0.1","root","ljl12138","vod_system",0,NULL,0)==NULL){printf("connect mysql failed:%s\n", mysql_error(mysql));return -1;}//設置客戶端字符集int ret;ret = mysql_set_character_set(mysql,"utf8");if(ret != 0){printf("set character failed:%s\n",mysql_error(mysql));return -1;}//選擇數據庫 mysql_select_db(mysql,"vod_system");//char * insert = "insert tb_video values(null,'變形金剛','婆媳戰爭',//'video/popo.mp4', '/image/xifu.jpg',now())";//執行語句 mysql_query(句柄,語句)//char *update = "update tb_video set vdesc = '大型家庭瘋整篇' where id=2;";//char *delete = "delete from tb_video where id=2;";char *select = "select * from tb_video;";ret = mysql_query(mysql,select);if(ret != 0){printf("query sql failed:%s\n", mysql_error(mysql));return -1;}//保存結果集到本地MYSQL_RES *res = mysql_store_result(mysql);if(res == NULL){printf("store result failed:%s\n",mysql_error(mysql));return -1;}//獲取結果集條數和列數int row_num = mysql_num_rows(res);int col_num = mysql_num_fields(res);int i = 0;for(i = 0;i<row_num;++i){//逐條遍歷獲取結果集mysql_fetch_row(結果集)MYSQL_ROW row = mysql_fetch_row(res);int j = 0;for(j = 0; j<col_num; ++j){printf("%s\t",row[j]);}printf("\n");}//釋放結果集mysql_free_result(res);mysql_close(mysql);return 0; }

jsoncpp的基本使用:

實現json格式的序列化與反序列化功能

json數據類型:對象 {} ,字符串,整數,布爾,數組[]。

{“學生”:1001,“姓名”:“張三”,“年齡”:18,“婚否”:false,“成績”:[88,77,66]},

Json::Value 中間數據對象;
val[“學號”] = 1001;

Json::Writer 序列化對象,將Json::Value中的各個數據序列化為字符串;
Json::Writer 是基類一般使用它的子類:StyledWrite/FastWriter,后者為整行形式,會去掉空行,空格;前者為會添加換行,空格之類的。
接口:
std::string StyledWriter::write(val),將val按照json序列化格式序列化為字符串將其返回。

Json::Reader 反序列化對象,將一個json格式字符轉換為Json::Value;
Reader::parse(const std::string &str,Json::Value &val)
將str進行反序列化,將其反序列化之后的結果放入val中,通過val形式獲取值。

在安裝使用json時需要先進行gcc的升級:gcc升級及jsoncpp安裝

3.數據管理模塊代碼

因為表中字段有多個,所以使用json序列化將多個字段整合成一個參數傳遞起來會方便很多。


//數據管理模塊 #include <iostream> #include <mysql/mysql.h> #include <jsoncpp/json/json.h> #include <mutex>namespace vod_system { #define MYSQL_HOST "127.0.0.1" #define MYSQL_USER "root" #define MYSQL_PASS "ljl12138" #define MYSQL_NAME "vod_system"static MYSQL *MysqlInit()//初始化接口{MYSQL *mysql = mysql_init(NULL);//句柄初始化if(mysql == NULL){std::cout<<"mysql init failed!\n";return NULL;}if(mysql_real_connect(mysql,MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_NAME,0,NULL,0)==NULL)//連接服務器{std::cout<<mysql_error(mysql)<<std::endl;mysql_close(mysql);return NULL;}if(mysql_set_character_set(mysql,"utf8")!=0){//設置字符集std::cout<<mysql_error(mysql)<<std::endl;mysql_close(mysql);return NULL;}return mysql;}static void MysqlRelease(MYSQL *mysql)//數據庫釋放接口{if(mysql != NULL){mysql_close(mysql);}return;}static bool MysqlQuery(MYSQL *mysql, const std::string sql)//執行語句操作接口{//執行接口封裝int ret = mysql_query(mysql,sql.c_str());if(ret != 0)//執行失敗{std::cout<<sql<<std::endl;//要執行的語句std::cout<<mysql_error(mysql)<<std::endl;return false;}return true;}///數據庫訪問類class TableVod{private:MYSQL *_mysql;std::mutex _mutex;public:TableVod()//數據庫句柄初始化連接服務器{_mysql = MysqlInit();if(_mysql == NULL){exit(0);}}~TableVod()//數據庫句柄銷毀{MysqlRelease(_mysql);}//增bool Insert(const Json::Value &video){const char* name = video["name"].asCString();const char* vdesc = video["vdesc"].asCString();const char *video_url = video["video_url"].asCString();const char* image_url = video["image_url"].asCString();char sql[8192] = {0}; #define VIDEO_INSERT "insert tb_video values(null,'%s','%s','%s','%s',now());"sprintf(sql,VIDEO_INSERT, name,vdesc,video_url,image_url);return MysqlQuery(_mysql,sql);}//刪bool Delete(int video_id){ #define VIDEO_DELETE "delete from tb_video where id=%d;"char sql[8192] = {0};sprintf(sql,VIDEO_DELETE,video_id);return MysqlQuery(_mysql,sql);}//改bool Update(int video_id,const Json::Value &video){ #define VIDEO_UPDATE "update tb_video set name='%s',vdesc='%s' where id=%d;"char sql[8192] = {0};sprintf(sql,VIDEO_UPDATE,video["name"].asCString(),video["vdesc"].asCString(),video_id);return MysqlQuery(_mysql,sql);}//查bool GetAll(Json::Value *video){ #define VIDEO_GETALL "select * from tb_video;"_mutex.lock();bool ret = MysqlQuery(_mysql,VIDEO_GETALL);//查詢結果集if(ret ==false){_mutex.unlock();return false;}MYSQL_RES * res = mysql_store_result(_mysql);//保存結果集_mutex.unlock();if(res ==NULL){std::cout<<"store result failed!\n";return false;}int num = mysql_num_rows(res);//獲取結果集條數for(int i = 0;i<num;++i){MYSQL_ROW row = mysql_fetch_row(res);//遍歷結果集Json::Value val;val["id"] = std::stoi(row[0]);val["name"] = row[1];val["vdesc"] = row[2];val["video_url"] = row[3];val["image_url"] = row[4];val["ctime"] = row[5];video->append(val);//添加數組元素,每一條都是一個數組元素}mysql_free_result(res);//釋放結果集return true;}bool GetOne(int video_id,Json::Value *video){ #define VIDEO_GETONE "select * from tb_video where id=%d;"char sql_str[4096] = {0};sprintf(sql_str,VIDEO_GETONE,video_id);_mutex.lock();bool ret = MysqlQuery(_mysql,sql_str);if(ret == false){_mutex.unlock();return false;}MYSQL_RES *res = mysql_store_result(_mysql);_mutex.unlock();if(res == NULL){std::cout<<mysql_error(_mysql)<<std::endl;return false;}int num_row = mysql_num_rows(res);if(num_row != 1){std::cout<<"getone result error\n";mysql_free_result(res);return false;}MYSQL_ROW row = mysql_fetch_row(res);//從結果集獲取一條結果(*video)["id"] = video_id;(*video)["name"] = row[1];(*video)["vdesc"] = row[2];(*video)["video_url"] = row[3];(*video)["image_url"] = row[4];(*video)["ctime"] = row[5];mysql_free_result(res);return true;}}; }

前端界面模塊

實現前端界面能夠與用戶進行交互

1.完成前端html界面的編寫

html+css+js
html:標簽化語言,實現瀏覽器對于最粗糙的界面的渲染;
css:層疊樣式語言,實現對html進行樣式美化;
js:javascript腳本語言,實現讓界面動態渲染,本次我們使用vue.js進行前端頁面的渲染,在使用vue.js前需要本地安裝或者遠程請求服務。

本次項目的界面并非從零開始編寫,在網上找的模板中做些修改即可,在把前端界面初步完成之后,需要使用ajax進行交互

ajax
就像是http客戶端,相當于當前界面分離的一個客戶端與服務器進行數據交互,說白了ajax的作用就是,從后臺獲取到數據。在本次項目中,我們使用jquery ajax,使用前和vue.js一樣需要本地安裝或者遠程請求服務。

前端界面:
負責展示當前服務器上的所有視頻

單個視頻播放界面:
視頻播放界面需要指定到底要播哪個視頻,所以需要回調函數,會用到字符串替換boost庫,使用庫前先安裝。yum -y install boost boost_system


業務處理模塊

接收前端請求進行業務處理最終響應

1.http服務器的搭建:

實現與前端的網絡通信——接受客戶端請求,使用httplib庫完成http服務器的搭建。why不獨立實現http,使用庫項目難度降低,提高開發速度,用庫比自己實現更為穩定。httplib可以幫助我們用更剪短的代碼來搭建http服務器,用戶只需要根據什么樣的服務去做相應的處理就ok,從而不需要放心思至服務器的搭建而是更關注具體的業務。

httplib庫
組成:
Server類:
服務端類;
用于搭建服務器,實現網絡通信,解析http請求,組織http響應;
Server類中就一張map表。當我們實現一個服務端時,就會在里面填充信息,請求與處理函數的映射表。

Request結構體:
將http請求數據解析后就能得到這個類的對象,包含了一次http請求中的所有信息;

Response類:
響應信息類,通常其中的數據需要用戶自己添加。

#include "httplib.h"using namespace httplib;void helloworld(const Request &req, Response &rsp) {rsp.body = "<html><body><h1>Hello</h1></body></html>";rsp.status = 200;rsp.set_header("Content-Type", "text/html"); } int main() {httplib::Server srv;//實例化服務端對象srv.set_base_dir("./wwwroot");srv.Get("/hello",helloworld);srv.listen("0.0.0.0",9000);return 0; }


正則表達式:
用來檢索和替換符合文本規則的文本

2.請求與響應的網絡通信接口設計

1.靜態頁面請求(首頁,播放)

①GET/index.html HTTP/1.1(首頁)
響應:
HTTP/1.1 200 OK
…(正文index.html文件數據)

②GET/video.html?id=1
響應:
HTTP/1.1 200 OK
…(正文video.html文件數據)

2.動態數據請求

視頻數據信息的增刪改查
多個視頻對象的序列化設計——采用restful風格網絡接口設計
1. 基于http,正文數據使用xml或者json格式進行序列化,我們采用json格式序列化;json是一種輕量化的數據交換格式,采用完全獨立于編程語言的文本格式來存儲和表示數據。
Json數值對象:數組、數字、字符串;
eg:表示多個學生信息[{name:“zhangsan”,age:18,score:[77,88,99],marry:false},{name:“zhangsan”,age:18,score:[77,88,99],marry:false}]

2. restful風格里面定義了四種操作類型:新增(POST)、獲取(GET)、修改(PUT)、刪除(DELETE)。

①新增視頻信息:
請求:
POST /video HTTP/1.1
頭部…
正文{name:“變形金剛”…}
響應:
<1>HTTP/1.1 200 OK
頭部…
無正文
<2>HTTP/1.1 500 SEVER ERROR

{result:false,reason:“mysql err”}
(不適宜json格式,因為視頻數據大,存在風險,使用http默認的文件上傳操作html操作)
原生的文件上傳,正文中分為多個表單數據域,每個域表示的是不同的提交的表單項(視頻文件數據,封面圖片數據,視頻名稱,視頻描述)收到請求進行解析。
1.將視頻文件數據,以及圖片數據存儲到對應文件中;
2.將視頻路徑,圖片路徑,視頻名稱,描述存儲到數據庫。

上傳的視頻文件重名如何處理?

當前做法:直接覆蓋式寫入
預想做法:每個用戶上傳的文件名都以一種獨一無二的形式命名(時間戳+用戶名+某種算法)。

上傳的文件冗余重復(名字不同,數據實際相同)

當前做法:不作處理;
預想做法:計算每個文件的md5值存放到視頻信息數據庫中,每個上傳的視頻文件都要計算md5,然后到數據庫中查找有沒有相同md5的文件,如果有,則直接將url路徑拿過來就行,不用存放冗余文件數據。

MD5: 是一種信息摘要算法,常用于文件數據的唯一標識,針對一個文件的數據進行大量用算得到一個md5值;文件內容一有差別得到的MD5值大不相同。Linux中MD5sum命令就是計算文件的MD5值。

②刪除視頻信息:
請求:
DELETE /video?id=1 HTTP/1.1

無正文
響應:
HTTP/1.1 200 OK

正確響應則無正文

③修改視頻信息:
請求
PUT /video/1(或者/video?id=1) HTTP/1.1

{name:"", desc:"", …}
響應:
HTTP/1.1 200 OK

④獲取視頻信息:
獲取所有:
請求:
GET /video HTTP/1.1

無正文
響應:
HTTP/1.1 200 OK

[{視頻1信息},{視頻2信息}…]

獲取單個視頻信息:
請求:
GET /video/1 HTTP/1.1

響應:
HTTP/1.1 200 OK

{視頻信息}

http協議實現
http服務器:實質是tcp服務器,上層使用http協議約定數據格式。

協議格式:
首行:
①請求行:請求方法(GET/HEAD/POST/PUT…),URL(統一資源定位符http://user:pass@ip:port/path?key=val#ch),協議版本(0.9/1.0/1.1/2.0)
②協議行:協議版本,響應狀態碼,狀態碼描述;1××協議切換/2××正確處理/3××重定向/4××客戶端錯誤/5××服務端錯誤

頭部:
鍵值對組成的頭部字段
Content-Type:正文類型
Content-Length:正文長度,解決http拈包問題
Connection:控制長短連接
Location:重定向新鏈接
Cookie、Set-Cookie:維護http通信狀態–保存在客戶端持續傳輸維護狀態
session:保存在服務端,通過cookie傳遞sessionid,包含客戶端隱私信息和狀態信息

空行:
\r\n:間隔頭部與正文,標識頭部結束位置

正文:
提交響應的數據

在基本完成模塊搭建之后,使用postman模擬客戶端對服務端進行請求來交互。

#include <iostream> #include <mysql/mysql.h> #include <jsoncpp/json/json.h> #include <mutex> #include <fstream>//數據管理模塊namespace vod_system { #define MYSQL_HOST "127.0.0.1" #define MYSQL_USER "root" #define MYSQL_PASS "ljl12138" #define MYSQL_NAME "vod_system"static MYSQL *MysqlInit()//初始化接口{MYSQL *mysql = mysql_init(NULL);//句柄初始化if(mysql == NULL){std::cout<<"mysql init failed!\n";return NULL;}if(mysql_real_connect(mysql,MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_NAME,0,NULL,0)==NULL)//連接服務器{std::cout<<mysql_error(mysql)<<std::endl;mysql_close(mysql);return NULL;}if(mysql_set_character_set(mysql,"utf8")!=0){//設置字符集std::cout<<mysql_error(mysql)<<std::endl;mysql_close(mysql);return NULL;}return mysql;}static void MysqlRelease(MYSQL *mysql)//數據庫釋放接口{if(mysql != NULL){mysql_close(mysql);}return;}static bool MysqlQuery(MYSQL *mysql, const std::string sql)//執行語句操作接口{//執行接口封裝int ret = mysql_query(mysql,sql.c_str());if(ret != 0)//執行失敗{std::cout<<sql<<std::endl;//要執行的語句std::cout<<mysql_error(mysql)<<std::endl;return false;}return true;}///數據庫訪問類class TableVod{private:MYSQL *_mysql;std::mutex _mutex;public:TableVod()//數據庫句柄初始化連接服務器{_mysql = MysqlInit();if(_mysql == NULL){exit(0);}}~TableVod()//數據庫句柄銷毀{MysqlRelease(_mysql);}//增bool Insert(const Json::Value &video){const char* name = video["name"].asCString();const char* vdesc = video["vdesc"].asCString();const char *video_url = video["video_url"].asCString();const char* image_url = video["image_url"].asCString();char sql[8192] = {0}; #define VIDEO_INSERT "insert tb_video values(null,'%s','%s','%s','%s',now());"sprintf(sql,VIDEO_INSERT, name,vdesc,video_url,image_url);return MysqlQuery(_mysql,sql);}//刪bool Delete(int video_id){ #define VIDEO_DELETE "delete from tb_video where id=%d;"char sql[8192] = {0};sprintf(sql,VIDEO_DELETE,video_id);return MysqlQuery(_mysql,sql);}//改bool Update(int video_id,const Json::Value &video){ #define VIDEO_UPDATE "update tb_video set name='%s',vdesc='%s' where id=%d;"char sql[8192] = {0};sprintf(sql,VIDEO_UPDATE,video["name"].asCString(),video["vdesc"].asCString(),video_id);return MysqlQuery(_mysql,sql);}//查bool GetAll(Json::Value *video){ #define VIDEO_GETALL "select * from tb_video;"_mutex.lock();bool ret = MysqlQuery(_mysql,VIDEO_GETALL);//查詢結果集if(ret ==false){_mutex.unlock();return false;}MYSQL_RES * res = mysql_store_result(_mysql);//保存結果集_mutex.unlock();if(res ==NULL){std::cout<<"store result failed!\n";return false;}int num = mysql_num_rows(res);//獲取結果集條數for(int i = 0;i<num;++i){MYSQL_ROW row = mysql_fetch_row(res);//遍歷結果集Json::Value val;val["id"] = std::stoi(row[0]);val["name"] = row[1];val["vdesc"] = row[2];val["video_url"] = row[3];val["image_url"] = row[4];val["ctime"] = row[5];video->append(val);//添加數組元素,每一條都是一個數組元素}mysql_free_result(res);//釋放結果集return true;}bool GetOne(int video_id,Json::Value *video){ #define VIDEO_GETONE "select * from tb_video where id=%d;"char sql_str[4096] = {0};sprintf(sql_str,VIDEO_GETONE,video_id);_mutex.lock();bool ret = MysqlQuery(_mysql,sql_str);if(ret == false){_mutex.unlock();return false;}MYSQL_RES *res = mysql_store_result(_mysql);_mutex.unlock();if(res == NULL){std::cout<<mysql_error(_mysql)<<std::endl;return false;}int num_row = mysql_num_rows(res);if(num_row != 1){std::cout<<"getone result error\n";mysql_free_result(res);return false;}MYSQL_ROW row = mysql_fetch_row(res);//從結果集獲取一條結果(*video)["id"] = video_id;(*video)["name"] = row[1];(*video)["vdesc"] = row[2];(*video)["video_url"] = row[3];(*video)["image_url"] = row[4];(*video)["ctime"] = row[5];mysql_free_result(res);return true;}};class Util{public:static bool WriteFile(const std::string &name,const std::string &content){std::ofstream of;of.open(name,std::ios::binary);if(!of.is_open()){std::cout<<"open file failed!\n";return false;}of.write(content.c_str(),content.size());if(!of.good()){std::cout<<"write file failed!\n";return false;}of.close();return true;}}; }

主函數

#include <boost/algorithm/string.hpp> #include "db.hpp" #include "httplib.h" #include <fstream>#define WWWROOT "./wwwroot"///video/**.mp4(數據庫中的存儲的的視頻信息)using namespace httplib;vod_system::TableVod *tb_video;//why全局變量,因為httplib庫是基于多線程void VideoDelete(const Request &req, Response &rsp) {//req.path = /video/1 req.matches存放正則表達式匹配到的內容//1.獲取視頻idint video_id= std::stoi(req.matches[1]);//2.從數據庫中獲取到對應視頻信息Json::Value json_rsp;Json::FastWriter writer;Json::Value video;bool ret = tb_video->GetOne(video_id,&video);if(ret == false){std::cout<< "mysql get video info failed!\n";rsp.status = 500;json_rsp["result"] = false;json_rsp["reason"] = "mysql get video info failed!";rsp.body = writer.write(json_rsp);rsp.set_header("Content-Type","application/json");return;}std::string vpath = WWWROOT + video["video_url"].asString();std::string ipath = WWWROOT + video["image_url"].asString();//3.刪除視頻文件,封面圖文件//unlink刪除指定名字的文件unlink(vpath.c_str());unlink(ipath.c_str());//4.刪除數據庫中的數據ret = tb_video->Delete(video_id);if(ret == false){rsp.status = 500;std::cout<<"mysql delete video failed!\n";return;}return; }void VideoUpdate(const Request &req, Response &rsp) {//1.獲取視頻idint video_id= std::stoi(req.matches[1]);Json::Value video;Json::Reader reader;bool ret = reader.parse(req.body ,video);//提交上來的需要修改的json序列化后的字符串if(ret ==false){std::cout<<"update video : parse video json failed!\n";rsp.status = 400;//表示客戶端錯誤return;}ret = tb_video->Update(video_id, video);if(ret == false){std::cout<<"update video:mysql update failed!\n";rsp.status=5000;//服務器內部錯誤return;}return; }void VideoGetAll(const Request &req, Response &rsp) {Json::Value videos;Json::FastWriter writer;bool ret = tb_video->GetAll(&videos);if(ret == false){std::cout<<"getall video:mysql operation failed!\n";rsp.status = 500;return;}rsp.body = writer.write(videos);rsp.set_header("Content-Type", "application/json");}void VideoGetOne(const Request &req, Response &rsp) {int video_id= std::stoi(req.matches[1]);Json::Value video;Json::FastWriter writer;bool ret = tb_video->GetOne(video_id,&video);if(ret == false){std::cout<<"getone video:mysql operation failed!\n";rsp.status = 500;return;}rsp.body = writer.write(video);rsp.set_header("Content-Type", "application/json"); }#define VIDEO_PATH "/video/" #define IMAGE_PATH "/image/" void VideoUpload(const Request &req, Response &rsp) {//視頻名稱auto ret = req.has_file("video_name");//判斷是否存在該字段if(ret == false){std::cout<<"have no video name!\n";rsp.status = 400;//請求格式問題return;}const auto & file = req.get_file_value("video_name");//獲取該字段對應的信息//視頻描述ret = req.has_file("video_desc");if(ret == false){std::cout<<"have no video desc!\n";rsp.status = 400;//請求格式問題return;}const auto& file1 = req.get_file_value("video_desc");//視頻文件ret = req.has_file("video_file");if(ret == false){std::cout<<"have no video file!\n";rsp.status = 400;//請求格式問題return;}const auto& file2 = req.get_file_value("video_file");//封面文件ret = req.has_file("image_file");if(ret == false){std::cout<<"have no image file!\n";rsp.status = 400;//請求格式問題return;}const auto& file3 = req.get_file_value("image_file");const std::string &videoname = file.content;//視頻名const std::string &videodesc = file1.content;//描述const std::string& videofile = file2.filename;//***.mp4const std::string& videocont = file2.content;//視頻文件數據const std::string &imagefile = file3.filename;//***。jpgconst std::string &imagecont = file3.content;//封面文件數據///組織路徑std::string vurl = VIDEO_PATH + file2.filename;std::string iurl = IMAGE_PATH + file3.filename;std::string wwwroot = WWWROOT;//因為WWWROOT是const char *沒有重載+vod_system::Util::WriteFile(wwwroot + vurl,file2.content);//組織出來的實際路徑并完成文件寫入vod_system::Util::WriteFile(wwwroot + iurl,file3.content);Json::Value video;video["name"] = videoname;video["vdesc"] = videodesc;video["video_url"] = vurl;video["image_url"] = iurl;ret = tb_video->Insert(video);if(ret == false){rsp.status = 500;//服務器內部錯誤std::cout<<"insert video: mysql operation failed!\n";return;}rsp.set_redirect("/");return;}bool ReadFile(const std::string &name, std::string *body) {std::ifstream ifile;ifile.open(name, std::ios::binary);if(!ifile.is_open()){printf("open file failed111:%s\n",name.c_str());ifile.close();return false;}ifile.seekg(0,std::ios::end);uint64_t length = ifile.tellg();ifile.seekg(0,std::ios::beg);body->resize(length);ifile.read(&(*body)[0],length);if(ifile.good() == false){printf("read file failed:%s\n", name.c_str());ifile.close();return false;}ifile.close();return true; }void VideoPlay(const Request &req, Response &rsp) {Json::Value video;int video_id = std::stoi(req.matches[1]);bool ret = tb_video->GetOne(video_id,&video);if(ret == false){std::cout<<"getone video:mysql operation failed!\n";rsp.status = 500;return;}std::string newstr = video["video_url"].asString();std::string oldstr = "{{video_url}}";std::string play_html = "./wwwroot/single-video.html";ReadFile(play_html,&rsp.body);boost::algorithm::replace_all(rsp.body,oldstr,newstr);rsp.set_header("Content-Type", "text/html");return;}int main() {tb_video = new vod_system::TableVod();Server srv;srv.set_base_dir("./wwwroot");///動態數據請求srv.Delete(R"(/video/(\d+))",VideoDelete);//正則表達式,\d表示匹配一個數字字符//+表示匹配字符一次或多次 //R"(string)"去除括號中字符串中每個字符的特殊含義srv.Put(R"(/video/(\d+))",VideoUpdate);srv.Get(R"(/video)",VideoGetAll);srv.Get(R"(/video(\d+))",VideoGetOne);srv.Post(R"(/video)",VideoUpload);srv.Get(R"(/play/(\d+))",VideoPlay);srv.listen("0.0.0.0",9000);//監聽return 0; }/*//插入測試 void test() {vod_system::TableVod tb_vod;Json::Value val;val["name"] = "電鋸驚魂2";val["vdesc"] = "這是個比較凈損的電影";val["video_url"] = "/video/saw2.mp4";val["image_url"] = "/video/saw2.jpg";tb_vod.Insert(val);return; }*//* void test()//查詢測試 {vod_system::TableVod tb_vod;Json::Value val;tb_vod.GetOne(3,&val);Json::StyledWriter writer;std::cout<<writer.write(val)<<std::endl;return;}*//* void test()//刪除測試 {vod_system::TableVod tb_vod;Json::Value val;val["name"] = "電鋸驚魂";val["vdesc"] = "這是個比較凈損的電影";val["video_url"] = "/video/saw.mp4";val["image_url"] = "/video/saw.jpg";tb_vod.Delete(2);return; }*//* void test()//修改測試 {vod_system::TableVod tb_vod;Json::Value val;val["name"] = "電鋸驚魂";val["vdesc"] = "這是個很血腥的電影";val["video_url"] = "/video/saw.mp4";val["image_url"] = "/video/saw.jpg";tb_vod.Update(2,val);return; }*//*void test1() {vod_system::TableVod tb_vod;Json::Value val;val["name"] = "速度與激情9";val["vdesc"] = "這是個非常刺激的電影";val["video_url"] = "/video/speed.mp4";val["image_url"] = "/video/speed.jpg";tb_vod.Insert(val);return; }*/ /* int main() {//局部功能測試test();return 0; }*/

總結

項目源碼

總結

以上是生活随笔為你收集整理的基于C++的视频点播系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久视频在线 | 久久综合成人 | 美女视频a美女大全免费下载蜜臀 | 亚洲精品女人久久久 | 国产伦精品一区二区三区… | 国产1级毛片 | 欧美成人精品欧美一级乱 | 免费日韩视频 | 久久黄视频 | 韩国av免费观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 一区二区三区四区精品 | 99久久网站 | 美女免费黄视频网站 | 精品国产乱码 | 免费成人av电影 | 久久婷婷五月综合色丁香 | 黄色大片免费播放 | 免费电影一区二区三区 | 中文成人字幕 | 国产一级二级在线 | 日韩欧美精品在线观看视频 | 福利一区二区 | 99久久久免费视频 | 精品主播网红福利资源观看 | 国产成人精品不卡 | 午夜久久电影网 | 午夜视频在线观看一区二区三区 | 亚洲国产wwwccc36天堂 | 最新av免费 | 丁香狠狠 | 婷婷五天天在线视频 | 国产在线观看99 | 欧美另类交人妖 | 国产精品久久久久久模特 | 国产精品免费观看国产网曝瓜 | 三级视频国产 | 日韩欧美精品在线观看 | 在线观看av中文字幕 | 国产精品白丝jk白祙 | 久久字幕精品一区 | 中文字幕一区二区在线观看 | 中文字幕av在线播放 | 日韩毛片在线一区二区毛片 | 91精品电影 | 色综合久久精品 | 欧美天天干| 在线v片免费观看视频 | 成人免费亚洲 | 视频成人免费 | 日韩在线视频一区 | 在线观看黄| 日本久久免费视频 | 久草在线官网 | 激情综合国产 | 色婷婷综合五月 | 欧美最新另类人妖 | a'aaa级片在线观看 | www.com黄| 国产视频黄| 国产精品视频线看 | 啪啪av在线 | 久久呀| 免费在线观看成人小视频 | 麻豆视频在线观看免费 | 三级动态视频在线观看 | 日本中文字幕视频 | 在线免费高清一区二区三区 | 97香蕉视频 | 天天天天天天干 | 国产成人精品亚洲日本在线观看 | 久久久污 | 精品99在线观看 | 亚洲国产精品999 | 日韩久久精品一区二区三区 | 91精品久久久久久综合乱菊 | 免费看片网址 | 久热免费 | 香蕉影视在线观看 | 在线中文字幕电影 | 91视频免费播放 | 国产美女精品视频 | 99免费看片| 欧美午夜理伦三级在线观看 | 免费av观看网站 | 亚洲自拍偷拍色图 | 久草在线免费在线观看 | 黄色亚洲大片免费在线观看 | 久久艹综合 | www.看片网站| 久久久国产99久久国产一 | av天天澡天天爽天天av | 91精品在线看 | 91中文视频 | 亚洲尺码电影av久久 | 91在线视频免费 | www178ccom视频在线 | 成人18视频 | 99精品久久久 | 日日操天天射 | 国产精品一区二区免费 | 精品久久久久久久久久久院品网 | 久草视频免费看 | 99精品区 | 久久手机在线视频 | 久久精品理论 | 成人羞羞视频在线观看免费 | 最新动作电影 | 午夜精品久久久久久 | 精品久久久久久久久久岛国gif | 亚洲国产网站 | 在线观看v片| 国产高清在线免费观看 | 天天视频色版 | 国产精品久久久久毛片大屁完整版 | 黄色小视频在线观看免费 | 在线观看自拍 | 91免费版在线 | av在线播放快速免费阴 | 国产人成免费视频 | 欧美精品久久久久久久久久丰满 | 涩涩网站在线看 | 色www精品视频在线观看 | 国产亚州av | 日韩av有码在线 | 国产又粗又长又硬免费视频 | 日韩三级在线 | 91福利影院在线观看 | 在线观看日本韩国电影 | 国产黑丝一区二区 | 中文字幕免费不卡视频 | 狠狠狠色丁香婷婷综合久久88 | 欧美日韩中 | 91在线操| 国产超碰在线观看 | 黄色毛片一级片 | 天天综合日 | 99热在线看 | 日本黄色免费观看 | 久久九九影视 | 日韩视频一区二区三区 | 国产午夜三级一区二区三桃花影视 | 久久精品激情 | 色噜噜在线观看 | av网站在线免费观看 | 久久久久久久久久毛片 | 狠狠色伊人亚洲综合网站野外 | 精品国产自 | 成人黄色在线 | 国产免费成人 | 成人av片在线观看 | 亚洲一区精品二人人爽久久 | 久久a免费视频 | 丁香婷婷深情五月亚洲 | 久久久久久久免费 | 色福利网 | 中文字幕麻豆 | 亚洲成人精品av | 在线你懂 | 亚洲九九影院 | 91精选在线| 狠狠的干 | 欧美亚洲一级片 | av高清不卡 | 九九九九免费视频 | 91资源在线 | 色婷婷九月 | 亚洲精品在线视频播放 | 500部大龄熟乱视频 欧美日本三级 | 91成人国产 | 国产麻豆精品一区 | 亚洲激情婷婷 | 久久不卡日韩美女 | 日韩精品免费在线观看视频 | 免费看在线看www777 | 最近免费中文字幕 | 国产永久免费观看 | 四虎影视精品永久在线观看 | 五月婷婷开心 | 偷拍区另类综合在线 | 国产午夜精品av一区二区 | 黄色成人在线 | 涩涩网站在线观看 | 国产精品正在播放 | 狠狠操综合| 国产精品涩涩屋www在线观看 | 免费看的视频 | 天天综合网入口 | 日日夜夜天天久久 | 视频国产一区二区三区 | 91av短视频 | 欧美成人h版在线观看 | 9在线观看免费高清完整 | 日韩网站中文字幕 | av软件在线观看 | 在线视频成人 | 免费看一级黄色大全 | 国产精品资源在线观看 | 97超碰伊人| 国产精品黄色影片导航在线观看 | 夜夜嗨av色一区二区不卡 | 91亚洲狠狠婷婷综合久久久 | av免费网站观看 | 国产网红在线观看 | 免费黄a大片 | 亚洲最新av在线网站 | 在线中文日韩 | 亚洲精品国产精品国自产 | 99久久爱| 最近中文字幕免费av | 久久艹99| 国产精品国产三级国产不产一地 | 亚洲三级精品 | 免费在线激情电影 | 中文字幕成人在线观看 | 亚洲人成免费网站 | 波多野结衣在线视频一区 | 超碰免费97| 国产精品综合久久久 | 亚洲一区视频在线播放 | 中文字幕免费高清在线观看 | 精品国产精品久久 | 2020天天干夜夜爽 | 国产资源在线免费观看 | 亚洲精品大全 | 97爱| 97成人啪啪网 | 91视频麻豆视频 | 免费欧美精品 | 久久九九久久九九 | 午夜视频一区二区三区 | 久久综合狠狠狠色97 | 久久国产亚洲精品 | 欧美性色综合网 | 成人av在线一区二区 | a在线观看视频 | 五月天色综合 | 中文字幕免费高清av | 国产成人福利在线观看 | 欧美精品被 | 麻花豆传媒mv在线观看 | 中文字幕在线观看一区 | 日韩欧美一区二区在线播放 | 综合久久久久久久 | 国产91国语对白在线 | 久久精品成人热国产成 | av色综合| 成人啪啪18免费游戏链接 | 日韩在线视频精品 | 色婷婷综合久久久久 | 久久精品美女 | www.黄色小说.com | 国产一区欧美一区 | 色婷婷激情网 | 日韩极品视频在线观看 | 中文电影网 | 午夜在线看片 | 五月婷婷丁香综合 | 国产97超碰 | 天天天综合网 | 九色精品免费永久在线 | 成人免费视频免费观看 | 性色在线视频 | 日韩高清无线码2023 | 玖玖视频在线 | 国产色秀视频 | 麻豆视频免费在线 | 亚洲在线视频免费观看 | 黄色三级久久 | 国产精品久久久久久超碰 | 精品久久视频 | 日韩乱色精品一区二区 | 九九热久久免费视频 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 麻豆视频免费看 | 日韩在线观看免费 | 免费在线观看日韩 | 精品一区二区三区电影 | 日韩v在线91成人自拍 | 色噜噜日韩精品一区二区三区视频 | 天天干天天干天天干天天干天天干天天干 | 91在线你懂的| 成人午夜久久 | 日韩视频一区二区三区 | 操操操影院 | 亚洲免费不卡 | 亚洲国产中文字幕在线视频综合 | 亚洲欧美日韩国产精品一区午夜 | 亚洲精品美女在线观看播放 | 国产中文| 欧美精品在线视频 | 成人久久久久 | 99在线高清视频在线播放 | 五月av在线 | 国产亚洲婷婷免费 | 三级在线国产 | 国产精品高清免费在线观看 | 精品国产一区二区三区不卡 | 天堂av在线网址 | 久久精品国产精品亚洲 | 极品久久久 | www.91av在线 | 久久久国产精华液 | 视频一区视频二区在线观看 | 涩涩网站在线观看 | 中文字幕高清视频 | 久久久久久久久久久久久久电影 | 人人射人人澡 | 日韩精品免费一区二区在线观看 | 久久草在线精品 | 国产一区高清在线观看 | 久久欧洲视频 | 色婷婷国产精品 | 国产精品久久久久久一区二区三区 | 久久精品日产第一区二区三区乱码 | 亚洲成 人精品 | 久久色视频 | 麻豆视频一区 | 美女网站视频免费黄 | 毛片网站免费在线观看 | 久久精品综合 | 尤物九九久久国产精品的分类 | 中文电影网 | 超碰国产97 | 欧美aa一级 | 九九激情视频 | 久久久久久久久久久久久久电影 | 国产系列精品av | 国产精品激情偷乱一区二区∴ | 人人爽人人爽人人爽人人爽 | 国产真实精品久久二三区 | 蜜臀av.com| 欧美福利久久 | 亚洲精品视频在线观看免费 | 欧美成人亚洲成人 | 麻豆精品视频在线观看免费 | 久久国色夜色精品国产 | 国产精品欧美日韩 | 国内免费久久久久久久久久久 | 18pao国产成视频永久免费 | 日韩精品不卡在线 | 日韩毛片在线一区二区毛片 | 午夜av不卡 | 人人玩人人添人人 | av网站在线观看播放 | 国内揄拍国产精品 | 成人毛片一区二区三区 | 一区 二区电影免费在线观看 | 欧洲亚洲精品 | 久久久精品久久 | 国产中文字幕一区 | 人人超在线公开视频 | 日韩在线观看免费 | 91精彩视频在线观看 | 午夜在线观看影院 | 国产成人一区二区啪在线观看 | 色诱亚洲精品久久久久久 | 久久九九影视 | 在线观看国产日韩 | 一级黄色片毛片 | 国产九色在线播放九色 | 国产白浆视频 | 亚洲精品视频网址 | www国产亚洲 | 久99久在线| 91亚洲国产 | 91视频最新网址 | 久久字幕精品一区 | 三级a毛片 | 国产一区在线不卡 | 午夜精品一区二区三区可下载 | 日韩欧美在线一区 | 香蕉久久久久久久 | 成人在线视频网 | 成人黄色av网站 | 日韩一区二区免费视频 | 伊人开心激情 | 韩国视频一区二区三区 | 最近中文字幕mv免费高清在线 | 久久久久久久久久久成人 | 狠狠的干狠狠的操 | 伊人国产视频 | 久久久不卡影院 | 欧美日韩国语 | 国产原创中文在线 | 在线免费观看国产精品 | 99久久精品午夜一区二区小说 | 嫩草伊人久久精品少妇av | 欧美日韩午夜爽爽 | 久久综合五月天 | www.伊人网| www黄色| 免费精品国产 | 午夜视频一区二区 | 欧美午夜激情网 | 日韩在线视频一区二区三区 | 国产高清久久 | 国产在线观看91 | 国产美女视频免费 | 在线观看免费黄视频 | 天天玩天天干天天操 | 久草在线播放视频 | 久久久精选 | 国产亚洲精品久久久久久久久久久久 | 国产中文字幕视频在线观看 | 午夜国产福利在线 | 亚洲乱码国产乱码精品天美传媒 | 国产剧情一区二区 | 日韩系列在线观看 | 亚洲在线资源 | 在线视频婷婷 | 欧美一级性生活片 | 欧美日韩国产精品爽爽 | 色妞色视频一区二区三区四区 | 91大神精品视频在线观看 | 日本电影久久 | 日韩精品中文字幕av | 天干啦夜天干天干在线线 | 亚洲精品合集 | 国产视频一区在线免费观看 | 国产一级免费在线观看 | 91porny九色91啦中文 | 高清av不卡 | 男女激情免费网站 | 国产美女免费视频 | 亚洲精品国偷拍自产在线观看 | 国产视频2区 | 天堂av在线网站 | 九九九九热精品免费视频点播观看 | 日韩一区二区三区在线观看 | 波多野结衣在线观看一区 | 精品一区二区三区久久 | 国产区在线看 | 在线免费观看黄 | 免费a v在线 | 久草爱| 欧美日韩视频在线播放 | 国产精品一区二区你懂的 | 亚洲精品在线观看中文字幕 | 久久久久久久久亚洲精品 | 在线视频 成人 | 成人三级网站在线观看 | 又长又大又黑又粗欧美 | 成人日韩av | 波多野结衣精品视频 | 成人一区二区三区在线 | 五月天国产 | 日韩乱码在线 | 2018亚洲男人天堂 | 国产精品理论片在线观看 | 亚洲精品999 | 91福利区一区二区三区 | 国产精品免费视频网站 | 97自拍超碰| 国产福利在线免费 | 激情综合一区 | 黄网站免费久久 | 久久综合中文字幕 | 日韩一区二区三区高清在线观看 | 日本黄色免费观看 | 色先锋av资源中文字幕 | 在线观看视频亚洲 | 亚洲精品自在在线观看 | 狠狠色伊人亚洲综合网站色 | 欧美性受极品xxxx喷水 | 亚洲视频六区 | 成人在线一区二区三区 | 狠狠躁日日躁狂躁夜夜躁av | 五月天丁香亚洲 | 一区二区三区电影大全 | 久草免费在线视频观看 | 国产成人黄色在线 | 久久精品欧美日韩精品 | 精品免费观看 | 国产精品视频最多的网站 | 黄色国产成人 | 四虎影视成人 | 欧美日韩国产一区二区三区 | 午夜精品久久久久久中宇69 | 国产高清区 | 国产福利午夜 | 婷婷夜夜 | 国产一区二区免费 | 日韩免费在线观看视频 | 五月婷婷综合激情网 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 天天操天天操天天操天天操天天操天天操 | 午夜手机电影 | 亚洲精品免费观看 | 成人久久免费 | 在线播放视频一区 | 久99久精品视频免费观看 | 欧美日韩国产亚洲乱码字幕 | 中文亚洲欧美日韩 | 久久草精品 | 黄色国产大片 | av福利在线导航 | 久久精彩| 中文字幕免费中文 | 一级c片| 亚洲91精品在线观看 | 97国产精品免费 | 麻豆精品视频在线观看免费 | 国产中文字幕久久 | 久久人人爽人人爽人人片av软件 | av日韩av| 一区二区视频在线播放 | 日韩av中文在线观看 | 99精品一级欧美片免费播放 | 精品视频一区在线 | 国产精品av免费在线观看 | 亚洲国产精品一区二区久久,亚洲午夜 | 香蕉影视| 久久久久久国产精品免费 | 午夜视频99| 九九激情视频 | 操高跟美女| 999电影免费在线观看 | 久久久久久久久免费视频 | 黄色免费视频在线观看 | 国产一级特黄电影 | 久久无码av一区二区三区电影网 | 一区av在线播放 | 国产精品久久av | 国产精品毛片久久久久久久 | 国产va在线观看免费 | 九九欧美 | 日本精品中文字幕在线观看 | 韩日电影在线 | 全久久久久久久久久久电影 | 国产乱老熟视频网88av | 808电影 | 毛片3| 免费在线观看的av网站 | 91精品国产麻豆国产自产影视 | 久久99精品视频 | 日韩三级中文字幕 | 国产精品久久久久久久久久久久午 | 日韩久久精品一区二区三区 | 欧美一级在线观看视频 | 麻豆成人精品 | 日b视频在线观看网址 | 亚洲,国产成人av | 97福利社| 国产主播99 | 手机av电影在线观看 | 伊人黄 | 91九色国产| 国产精品国产三级国产 | 久久久久久国产精品久久 | 国产91精品看黄网站在线观看动漫 | 波多在线视频 | 91在线免费播放视频 | 日韩av成人在线观看 | 中文字幕第一 | 天堂av免费观看 | 国产在线欧美在线 | 日韩精品一区二区不卡 | h动漫中文字幕 | 偷拍精品一区二区三区 | 久久爱综合| 亚洲免费观看在线视频 | 久免费视频 | 精品免费一区二区三区 | 亚洲精品字幕 | 91爱爱电影| 国产伦理久久精品久久久久_ | 人人模人人爽 | 中文有码在线 | 欧美a√在线 | 岛国精品一区二区 | 激情五月六月婷婷 | 欧美一级片免费在线观看 | 精品黄色在线 | 99热超碰 | 亚洲最新在线视频 | 国产手机视频 | 天天操天天射天天 | 免费黄色在线网站 | 久久久久国产视频 | 免费在线观看成年人视频 | 中文区中文字幕免费看 | 日韩欧在线| 一级做a视频 | 伊人狠狠色 | 黄色在线看网站 | 亚洲在线免费视频 | av片中文| 麻豆一级视频 | 免费精品在线观看 | 99久久精品网| 夜夜澡人模人人添人人看 | 播五月综合| 成人黄色电影免费观看 | 一区二区视频在线看 | 五月天六月婷 | 99精品观看| 日韩偷拍精品 | 精品一区 在线 | 日本高清久久久 | japanesefreesexvideo高潮| 精品久久久久久久久久久院品网 | 中文字幕在线日亚洲9 | av电影中文字幕 | www最近高清中文国语在线观看 | 久草在线精品观看 | 亚洲国产黄色片 | 国产在线观看午夜 | 国产精品美女免费视频 | 欧美日韩国产色综合一二三四 | 97视频人人澡人人爽 | 亚洲毛片在线观看. | 在线观看免费黄色 | 欧美一级在线看 | 摸bbb搡bbb搡bbbb | 天天干天天做天天爱 | 日韩精品在线一区 | www.色午夜.com | 九九色在线观看 | 操操操com | 欧美天天射 | 四虎在线免费观看视频 | av成人免费在线看 | 久久理论影院 | 97超碰影视 | 四虎成人精品 | 国产一级视频免费看 | 精品人人人 | www最近高清中文国语在线观看 | 婷婷99| 国产91学生| 久久另类视频 | 麻豆成人在线观看 | 日韩av免费一区 | 狠狠激情中文字幕 | 涩涩网站在线看 | 色综合亚洲精品激情狠狠 | 天天射天天爱天天干 | 一区二区三区手机在线观看 | 亚洲最新视频在线 | 亚洲播播 | 91中文字幕永久在线 | 瑞典xxxx性hd极品 | 一区二区三区日韩在线观看 | 97国产精品一区二区 | 国产精品视屏 | 99久久久国产精品免费99 | 人人爽夜夜爽 | 又污又黄网站 | 九九热99视频 | 精品免费久久久久久 | 精精国产xxxx视频在线播放 | 久久久久国产成人免费精品免费 | 看片黄网站 | 美国av片在线观看 | 西西人体4444www高清视频 | 69夜色精品国产69乱 | 精品视频在线免费观看 | 国产精选在线观看 | 免费视频网 | 国产精品精品久久久久久 | 最近最新mv字幕免费观看 | 天天干天天干天天干天天干天天干天天干 | 超碰公开在线观看 | 麻豆精品国产传媒 | 亚洲精品久 | 亚洲电影一级黄 | 国产91免费看 | 区一区二区三区中文字幕 | 激情五月婷婷综合 | 一区二三国产 | 久久久麻豆精品一区二区 | 国产精品久久久久久久久久久免费看 | 在线免费观看麻豆视频 | 中文字幕 国产视频 | 男女啪啪免费网站 | 97在线精品国自产拍中文 | 日韩中文字幕免费在线播放 | 精品久久久久亚洲 | 久久久国产一区 | 国产区精品在线 | 一级淫片a | 黄色免费网站大全 | 婷婷播播网 | 久久精品久久精品久久精品 | 色噜噜日韩精品欧美一区二区 | 欧美精品三级 | 日本最大色倩网站www | 日本久久久久久科技有限公司 | 91精选在线 | 超薄丝袜一二三区 | 亚洲mv大片欧洲mv大片免费 | 国产亚洲精品久久久久秋 | 精品视频在线免费 | 九九热国产视频 | 黄色av电影网 | 2024国产精品视频 | 中文字幕区 | 91精品国产99久久久久 | 精品国产乱码久久久久久1区二区 | 天天摸夜夜添 | 日韩一区二区免费播放 | 91成人看片 | 国产区高清在线 | 亚洲作爱视频 | 久久久久麻豆 | 国产91对白在线 | 国产精国产精品 | 中文字幕123区 | 一区二区三区在线播放 | 免费av片在线 | 91精品国产92久久久久 | 日日夜夜av | 久久久久久久久久电影 | 456免费视频 | 日韩精品免费一线在线观看 | 99精品热视频只有精品10 | 天天综合天天综合 | 欧洲精品二区 | 精品欧美一区二区三区久久久 | 激情校园亚洲 | 亚洲成人软件 | 欧美另类网站 | 在线观看第一页 | 日韩电影在线观看一区二区 | 手机成人在线电影 | 一区二区视频免费在线观看 | 亚洲va欧美 | 国产黄色精品网站 | 丰满少妇对白在线偷拍 | 色婷婷综合视频在线观看 | 天天曰天天干 | 国产精品99久久久久久久久久久久 | 91精品国产综合久久福利不卡 | 不卡视频国产 | 黄色免费看片网站 | 波多在线视频 | 夜夜看av| 天天干天天拍天天操天天拍 | 成人三级av | www操操 | 欧美国产精品久久久久久免费 | 韩日精品在线 | 欧美人操人| 日日干夜夜操视频 | 中文字幕久久亚洲 | 日本天天色 | 国产黄色在线观看 | 美国av大片 | 天天操天天能 | 成人av在线网 | 99免在线观看免费视频高清 | 日韩午夜在线 | 美女黄视频免费看 | 久久精彩免费视频 | 在线91精品 | 奇米影视777四色米奇影院 | 香蕉视频久久 | 91九色蝌蚪| 欧美激情精品久久久久久免费印度 | 韩国精品一区二区三区六区色诱 | 中文字幕视频观看 | 国产亚洲视频在线观看 | 五月天精品视频 | 中文字幕在线精品 | 久久人人97超碰com | av丝袜美腿 | 中文字幕一区二区三区四区视频 | 欧美日韩观看 | 网站免费黄 | av免费在线观看1 | 国产精品电影一区二区 | 成人av免费在线 | 99re亚洲国产精品 | 国产99亚洲| aa级黄色大片 | 日韩影片在线观看 | 中文字幕激情 | 久久草在线视频国产 | 99视频这里只有 | 精品国产中文字幕 | 五月天婷婷综合 | 午夜黄网 | 精品伊人久久久 | 欧美成人按摩 | 99热在线免费观看 | 激情婷婷综合网 | 久久久网页 | 国产成人av免费在线观看 | 亚洲综合网站在线观看 | 日本深夜福利视频 | 久久精品视频在线观看 | 91看片淫黄大片在线播放 | 色噜噜噜| 亚洲精品视频网 | 四虎影视www | 日韩高清免费在线 | 一区二区网| 国产精品久久久久久久av电影 | av在线播放快速免费阴 | 精品一区二区亚洲 | 国产高清绿奴videos | 91高清视频| 一区三区视频在线观看 | 九七在线视频 | 久久久久中文 | 9999免费视频 | 国产视频美女 | 91黄站| 最近2019好看的中文字幕免费 | 午夜性生活片 | 91刺激视频 | 精品免费视频123区 午夜久久成人 | 亚洲日韩精品欧美一区二区 | 怡春院av | 91麻豆精品国产自产 | 午夜精品电影一区二区在线 | 国内精品久久久精品电影院 | 一区二区三区视频在线 | 成人av电影免费观看 | 久久国产精品系列 | 麻豆一区二区三区视频 | 久草在线视频在线 | 国产精品丝袜在线 | 国产精品久久久久久久久久久杏吧 | 69国产盗摄一区二区三区五区 | 色综合久久久久久中文网 | 国产美女免费看 | 日韩精品无码一区二区三区 | 亚洲精品99久久久久中文字幕 | 亚洲视频综合在线 | 婷婷av网站| 国产成人精品av久久 | 免费看成人| 日韩av影视在线 | 色婷婷福利 | 麻豆国产精品永久免费视频 | 香蕉视频在线看 | 麻豆一区在线观看 | 中文字幕日韩国产 | 日日夜夜精品视频天天综合网 | 人人玩人人添人人澡超碰 | 久久99精品久久久久久久久久久久 | 国产亚洲人成网站在线观看 | 中文字幕一区二区三区在线视频 | 91视频麻豆视频 | 日本黄色免费观看 | 欧美午夜a| 日韩精品视频免费看 | 亚洲黄色一级视频 | 狠狠操操操 | 成人18视频| 欧美一区二区三区在线 | 婷婷激情综合网 | 深爱激情五月综合 | 国产999精品视频 | 五月天色丁香 | 麻豆免费视频网站 | 久久视频国产精品免费视频在线 | 天天操比 | 久久成人一区 | 手机看片99 | 国产视频久久久久 | 日本中文一级片 | а天堂中文最新一区二区三区 | 亚洲v欧美v国产v在线观看 | 婷色在线 | 99re久久资源最新地址 | 久久久久久国产精品999 | 91丨九色丨国产在线观看 | 在线色亚洲 | 国产黄色免费电影 | 国产视频99| 亚洲专区欧美 | 久久久在线视频 | 中文有码在线 | 欧美综合色 | 亚洲精品国产麻豆 | 精品在线免费视频 | 日日日视频| 免费在线视频一区二区 | 免费在线国产精品 | 成人久久视频 | 中文字幕精品一区二区精品 | 2020天天干夜夜爽 | 色午夜影院 | 久久国产成人午夜av影院宅 | 麻豆精品视频 | 在线观看黄色av | 久久久99国产精品免费 | 九九免费观看视频 | 国产在线中文字幕 | 波多野结衣理论片 | 久久国产精品久久国产精品 | 色婷婷精品 | 国内精品小视频 | 日韩欧美在线国产 | 欧美三级免费 | 最新av在线播放 | 成年人黄色在线观看 | 99久久这里有精品 | 日韩电影一区二区三区 | 五月婷婷综合激情网 | 久久69精品 | 精品国产伦一区二区三区观看方式 | 中文资源在线官网 | 亚洲精品免费在线播放 | 国产色视频123区 | 久久一区二区三区超碰国产精品 | 最近中文字幕国语免费高清6 | 99久久国产免费,99久久国产免费大片 | 最新久久久 | 一级片视频免费观看 | 91九色在线播放 | 国产在线无 | 黄色免费电影网站 | 久久精品网址 | 久久精品日本啪啪涩涩 | 在线 日韩 av | 人人精品| 五月开心综合 | 国产亚洲精品久久久久久久久久 | 综合色婷婷 | 成人在线免费观看视视频 | 国产你懂的在线 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品在线观看免费 | 97国产在线 | 国产九九九精品视频 | 久久看片网 | 亚洲精品黄| 99久久电影 | 狠狠干婷婷 | 久久久91精品国产一区二区三区 | 亚洲欧美日韩国产精品一区午夜 | 亚洲视频在线看 | 九热精品 | 久久综合久久综合这里只有精品 | 中文字幕亚洲在线观看 | 成年性视频 | 激情综合亚洲精品 | 久久久综合精品 | 中文字幕在线看视频 | 97色在线视频 | 视频一区二区免费 | 国产99久久精品一区二区永久免费 | a级片久久 | 91免费视频黄 | 亚洲激情久久 | 中国精品少妇 | 97福利在线 | 久久精品综合 | 天天曰夜夜爽 | 日韩女同av | 免费合欢视频成人app | 五月激情综合婷婷 | 91av电影网| 国内外成人在线 | 99视频精品视频高清免费 | 国产一区久久 | 国产精品网址在线观看 | 91成人免费电影 | 一级黄色电影网站 | 免费高清在线观看成人 | 午夜三级影院 | 日韩在线观看中文 | 中文字幕av一区二区三区四区 | 国产成人在线免费观看 | 91av视屏| 在线观看 国产 | 婷婷六月网 | 亚洲激情在线观看 | 国产视频精品久久 | 久久久久久97三级 | 久久精选视频 | 欧美a级在线播放 | 最近中文字幕第一页 | 91丨九色丨国产丨porny精品 | 欧美亚洲国产日韩 | 亚洲精品人人 | 中文字幕永久 | 日韩欧美高清视频在线观看 | 亚洲影院天堂 | 综合色站| 精品a视频 | 久插视频 | 国产精品久久久久久久久免费看 | 久久免费视频精品 | 欧美视频xxx | 国产女人免费看a级丨片 | 日本精品中文字幕在线观看 | 亚洲精品美女久久久 | 国产高清av在线播放 | 激情久久久久久久久久久久久久久久 | 国产又粗又长的视频 | 国产伦精品一区二区三区… | 欧美一级免费在线 | 97精品国产97久久久久久久久久久久 |