目次
一、项目先容
1.1 对视频共享点播体系的认识
1.2服务端步伐负责功能
1.3 服务端功能模块分别
1.4 项目界面演示
1.5准备知识
二.情况搭建
2.1 安装 Jsoncpp 库
2.1.1 利用jsoncpp
2.2 引入httplib库
2.2.1 安装Git(如果你的体系尚未安装Git)
2.2.2 克隆堆栈
2.2.3 利用httplib
2.3 Mysql 数据库及开辟包安装
2.3.1 安装MySQL服务器
2.3.2 安装MySQL客户端
2.3.3 安全设置(安装后发起实验)
2.3.4 启动、克制、重启 登录 MySQL服务
三.项⽬实现
3.1服务端⼯具类实现
3.1.1⽂件实⽤⼯具类操持
3.1.2 Json 实⽤⼯具类操持
3.2 服务端数据管理模块
3.2.1 视频数据表的操持
3.2.2 数据管理类操持
3.3 服务端业务处理惩罚模块
3.3.1 ⽹络通讯接⼝操持
3.3.2 业务处理惩罚模块类的操持
3.3.2 终极归并调试
3.4 前端界⾯模块实现
3.4.1 前端视频展示⻚⾯
3.4.2 前端视频观看页面的实现
四.项⽬总结
一、项目先容
1.1 对视频共享点播体系的认识
- 搭建视频共享点播服务器,可以让全部人通过欣赏器访问服务器,实现视频的上传观看,以及管理并播放的功能。
- 告急是完成服务器端的步伐业务功能的实现以及前端访问界面 html 的编写,可以大概支持客户端欣赏器针对服务器上的全部视频举行操纵。
1.2服务端步伐负责功能
- 针对客⼾端上传的视频⽂件以及封⾯图⽚进⾏备份存储。
- 针对客⼾端上传的视频完成增编削查功能
- ⽀持客⼾端欣赏器进⾏视频的观看功能
1.3 服务端功能模块分别
该视频点播体系根本上包罗四个模块:数据管理、网络通讯、业务处理惩罚、前端界面。
- 数据管理模块:负责针对客户端上传的视频信息举行管理。
- 网络通讯模块:搭建网络通讯服务器,实现与客户端通讯。
- 业务处理惩罚模块:针对客户端的各个哀求举行对应业务处理惩罚并相应效果。
- 前端界面模块:前端欣赏器上视频共享点播的各个 html 页面,在页面中支持增编削查以及观看功能。
1.4 项目界面演示
项目团体有俩个页面,分别为主界面和观看界面
主界面告急 用于 视频展示、视频上传、视频搜索
观看界面告急用于 视频观看、视频信息修改、视频删除
以下为项目页面功能展示
1.5准备知识
认识 JsonCpp
http://t.csdnimg.cn/lsz2ohttp://t.csdnimg.cn/lsz2o
认识 MySQL数据库的API
http://t.csdnimg.cn/hpxg1http://t.csdnimg.cn/hpxg1
认识 httplib
http://t.csdnimg.cn/SvQJzhttp://t.csdnimg.cn/SvQJz
二.情况搭建
我的服务器Ubuntu22.04
2.1 安装 Jsoncpp 库
- sudo apt update
- sudo apt -y install libjsoncpp25
复制代码 2.1.1 利用jsoncpp
- #include <jsoncpp/json/json.h>
复制代码 2.2 引入httplib库
2.2.1 安装Git(如果你的体系尚未安装Git)
- sudo apt update
- sudo apt install git
复制代码 2.2.2 克隆堆栈
打开终端,利用cd下令切换到你想要存放cpp-httplib库的目次,然后运行以下下令来克隆堆栈:
- git clone https://github.com/yhirose/cpp-httplib.git
复制代码 2.2.3 利用httplib
直接在你的C++代码中包罗httplib.h头文件。你可以将其复制到你的项目中符合的位置,然后在源文件中包罗它
2.3 Mysql 数据库及开辟包安装
2.3.1 安装MySQL服务器
- sudo apt update //更新本地包数据库
- sudo apt install mysql-server//安装最新版本的MySQL
复制代码 2.3.2 安装MySQL客户端
- sudo apt install mysql-client
复制代码 2.3.3 安全设置(安装后发起实验)
- sudo mysql_secure_installation//按照提示设置root用户的密码,移除匿名用户,禁止root用户远程登录等
- sudo systemctl status mysql //确认MySQL服务状态
复制代码 2.3.4 启动、克制、重启 登录 MySQL服务
- sudo systemctl start mysql //启动服务
- sudo systemctl stop mysql //停止服务
- sudo systemctl restart mysql//重启服务
- mysql -u root -p 使用root用户登录
复制代码 三.项⽬实现
3.1服务端⼯具类实现
3.1.1⽂件实⽤⼯具类操持
在视频点播体系中由于涉及到⽂件上传,必要对上传的⽂件进⾏备份存储,因此⾸先操持封装⽂件操纵类,这个类封装完毕之后,则在恣意模块中对⽂件进⾏操纵时都将变的简朴化 功能:
- 构造函数 FileUtil(const std::string name):
- 吸取一个字符串参数 name,体现文件的路径和名称,并将这个值赋给私有成员变量 _name。
- Exists - 查抄文件是否存在:
- 利用 access 函数和 F_OK 标志来查抄文件是否存在。
- 如果 access 函数返回非0值,体现文件不存在,函数输堕落误信息并返回 false。
- 如果文件存在,返回 true。
- Size - 获取文件巨细:
- 起首查抄文件是否存在,如果不存在则返回0。
- 利用 stat 函数获取文件的属性,并将文件巨细存储在 st.st_size 中。
- 如果 stat 函数返回非0值,体现获取文件属性失败,函数输堕落误信息并返回0。
- 乐成获取属性后,返回文件巨细。
- GetContent - 读取文件内容:
- 打开文件以二进制模式读取。
- 如果文件无法打开,输堕落误信息并返回 false。
- 利用 Size 函数获取文件巨细,并根据巨细调解 body 字符串的容量。
- 读取文件内容到 body 字符串中。
- 如果读取失败,输堕落误信息,关闭文件,并返回 false。
- 乐成读取后,关闭文件并返回 true。
- SetContent - 向文件写入数据:
- 打开文件以二进制模式写入。
- 如果文件无法打开,输堕落误信息并返回 false。
- 利用 write 函数将 body 字符串的内容写入文件。
- 如果写入失败,输堕落误信息,关闭文件,并返回 false。
- 乐成写入后,关闭文件并返回 true。
- CreateDirectory - 创建目次:
- 起首查抄目次是否存在,如果存在则直接返回 true。
- 利用 mkdir 函数创建目次,如果创建乐成则返回 true。
- 注意,这个类利用了C++标准库中的文件操纵函数,如 access、stat、ifstream、ofstream 和 mkdir。这些函数必要包罗相应的头文件,比方 <fstream>、<sys/stat.h> 和 <unistd.h>。
- class FileUtil{
- private:
- std::string _name;//文件路径名称
- public:
- FileUtil(const std::string name):_name(name){}
- // 判断当前文件是否存在
- bool Exists(){
- //access的F_OK专门用于检测文件是否存在--- 存在则返回0
- int ret = access(_name.c_str(), F_OK);
- if (ret != 0) {
- std::cout << "文件不存在\n";
- return false;
- }
- return true;
- }
- // 获取文件大小
- size_t Size() {
- if (this->Exists() == false) {
- return 0;
- }
- struct stat st;
- //stat接口用于获取文件属性,其中 st_size就是文件大小成员
- int ret = stat(_name.c_str(), &st);
- if (ret != 0) {
- std::cout << "获取文件属性失败\n";
- return 0;
- }
- return st.st_size;
- }
- // 读取文件数据到body中
- bool GetContent(std::string *body) {
- std::ifstream ifs;
- ifs.open(_name, std::ios::binary);
- if (ifs.is_open() == false) {
- std::cout << "文件打开失败\n";
- return false;
- }
- size_t flen = this->Size();
- body->resize(flen);
- ifs.read(&(*body)[0], flen);
- if (ifs.good() == false) {
- std::cout << "读取文件内容失败\n";
- ifs.close();
- return false;
- }
- ifs.close();
- return true;
- }
- // 像文件写入数据
- bool SetContent(const std::string &body) {
- std::ofstream ofs;
- ofs.open(_name, std::ios::binary);
- if (ofs.is_open() == false) {
- std::cout << "文件打开失败\n";
- return false;
- }
- ofs.write(body.c_str(), body.size());
- if (ofs.good() == false) {
- std::cout << "写入文件内容失败\n";
- ofs.close();
- return false;
- }
- ofs.close();
- return true;
- }
- //针对目录时创建目录
- bool CreateDirectory() {
- if (this->Exists()) {
- return true;
- }
- mkdir(_name.c_str(), 0777);
- return true;
- }
- };
复制代码 3.1.2 Json 实⽤⼯具类操持
功能:
- Serialize - 序列化函数:
- 这个函数担当一个Json::Value范例的参数value和一个指向std::string的指针body。
- 利用Json::StreamWriterBuilder创建一个Json::StreamWriter对象,用于将Json::Value对象写入到字符串流中。
- 通过write方法将value序列化到std::stringstream对象ss中。
- 如果序列化失败(write方法返回非0值),则输堕落误信息并返回false。
- 乐成序列化后,将字符串流的内容赋值给*body,并返回true。
- UnSerialize - 反序列化函数:
- 这个函数担当一个std::string范例的参数body和一个指向Json::Value的指针value。
- 利用Json::CharReaderBuilder创建一个Json::CharReader对象,用于从字符串中分析JSON数据。
- 利用parse方法实验分析body中的JSON数据,并将效果存储在value指向的对象中。
- 如果分析失败(parse方法返回false),则输堕落误信息并返回false。
- 乐身分析后,返回true。
- class JsonUtil{
- public:
- // 序列化
- static bool Serialize(const Json::Value &value, std::string *body) {
- Json::StreamWriterBuilder swb;
- std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
- std::stringstream ss;
- int ret = sw->write(value, &ss);
- if (ret != 0) {
- std::cout << "序列化失败\n";
- return false;
- }
- *body = ss.str();
- return true;
- }
- // 反序列化
- static bool UnSerialize(const std::string &body, Json::Value *value) {
- Json::CharReaderBuilder crb;
- std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
- std::string err;
- bool ret = cr->parse(body.c_str(), body.c_str() + body.size(), value, &err);
- if (ret == false) {
- std::cout << "反序列化失败\n";
- return false;
- }
- return true;
- }
- };
复制代码 3.2 服务端数据管理模块
3.2.1 视频数据表的操持
在视频共享点播体系中,视频数据和图⽚数据都存储在⽂件中,⽽我们必要在数据库中管理⽤⼾上传 的每个视频信息。只是完成⼀个简朴的视频信息表 [code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |