VOD: 视频共享点播服务实现

这篇具有很好参考价值的文章主要介绍了VOD: 视频共享点播服务实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.项目背景及原理

1.背景

2.原理

二.技术栈及项目环境

 1.技术栈

2.项目环境

三. 模块划分

四.遇到的问题及其解决方法

1.查询视频模糊匹配问题

2.前端界面的修改

五.项目预览

六. 最终版代码


        前言: 这里实现一个视频点播服务, 可以用来上传视频, 下载视频, 删除视频等.

search_engine:搜索引擎实现-CSDN博客

一.项目背景及原理

1.背景

        目前, 视频点播VOD是非常流行的, 比如bilibili、抖音等, 都属于VOD, 我们可以自己上传视频, 也可以观看别人的视频.

        因此, 可以实现一个小型的VOD, 了解VOD的原理.

2.原理

① 数据管理: 对于用户上传的视频、图片数据等, 要对其进行存储, 因此需要在数据库中管理用户上传的视频信息.

② 业务处理: 处理用户请求, 例如上传、修改、删除等.

③ 前端界面: 显示向用户展示的内容, 并提供用户与VOD系统交互的界面.

二.技术栈及项目环境

 1.技术栈

        后端:C/C++(C++11), STL, cpp-httplib, mysql

        前端:html, css, js, jQuery, Ajax

2.项目环境

        CentOS 7, vim, g++, Makefile, VSCode, MySQL

三. 模块划分

VOD: 视频共享点播服务实现,VOD,音视频

四.遇到的问题及其解决方法

1.查询视频模糊匹配问题

        查询是分为准确查询和模糊查询的。想要准确的查询单个视频相对比较容易实现,可以直接判断数据库中是否存在该视频名字即可。但是如果用户只输入视频名字的一部分,那么想要查找到就需要考虑模糊匹配的问题了。

        这个其实也并不复杂,主要需要修改的就是调用的mysql语句:

select * from tb_video where name like '%%%s%%';

        采用模糊查询语句调用。

解决代码:

// 对mysql进行查询全部操作
bool SelectAll(Json::Value *videos)
{
    #define SELECTALL_VIDEO "select * from tb_video;"
    // 保护查询与保存结果到本地的过程
    mutex_.lock();
    // 查询
    bool ret = MysqlQuery(mysql_, SELECTALL_VIDEO);
    if(ret == false)
    {
        mutex_.unlock();
        return false;
    }
    // 获取查询结果集
    MYSQL_RES *res = mysql_store_result(mysql_);
    if(res == nullptr)
    {
        std::cout << "mysql store result failed\n";
        mutex_.unlock();
        return false;
    }
    mutex_.unlock();
    // 获取结果集的行数
    int num_rows = mysql_num_rows(res);
    for(int i = 0; i < num_rows; ++i)
    {
        // 获取结果集的行内容
        MYSQL_ROW row = mysql_fetch_row(res);
        Json::Value video;
        video["id"] = atoi(row[0]);
        video["name"] = row[1];
        video["info"] = row[2];
        video["video"] = row[3];
        video["image"] = row[4];
        // 插入到videos中
        videos->append(video);
    }

    // 自动释放内存
    mysql_free_result(res);
    return true;
}

// 查询所有视频, 以及模糊查询
// SelectAll这里包括SelectLike
static void SelectAll(const httplib::Request &req, httplib::Response &rsp)
{
    // 默认All查询
    bool select_flag = true;
    std::string search_key;
    if(req.has_param("search") == true)
    {
        // 模糊匹配Like
        select_flag = false;
        search_key = req.get_param_value("search");
    }
    Json::Value videos;
    if(select_flag == true)
    {
        // 查询所有视频
        if(tb_video->SelectAll(&videos) == false)
        {
            // 查询所有视频失败, 返回失败响应
            rsp.status = 500;
            rsp.body = R"({"result": false, "reason":"查询数据库指定视频信息失败"})";
            rsp.set_header("Content-Type", "application/json");
            return;
        }
    }
    else
    {
        // 模糊查询
        if(tb_video->SelectLike(search_key, &videos) == false)
        {
            // 模糊视频失败, 返回失败响应
            rsp.status = 500;
            rsp.body = R"({"result": false, "reason":"查询数据库匹配视频信息失败"})";
            rsp.set_header("Content-Type", "application/json");
            return;
        }
    }

    // 3. 组织响应正文(json格式的字符串)
    JsonUtil::Serialize(videos, &rsp.body);
    rsp.set_header("Content-Type", "application/json");
    return;
}

2.前端界面的修改

        对于前端这一方面,我的储备知识非常的少,并且此项目主要是为了将HTTP与数据库之间进行整合,用于练习学习过的操作系统、网络、数据库等知识的,因此这里就选择了一个开源的免费的视频点播界面的模板,仅对该模板进行修改,修改出一个自己想要的界面。

        虽然这里使用了模板,但是修改起来也不容易。因此学习了一些简单的HTML标签、CSS的语法和js一些操作。

        只不过在修改前端界面的过程中,依旧遇到了很多的问题,通过查阅相关资料,以及使用chatgpt、bing等工具进行修改。

五.项目预览

VOD: 视频共享点播服务实现,VOD,音视频VOD: 视频共享点播服务实现,VOD,音视频VOD: 视频共享点播服务实现,VOD,音视频VOD: 视频共享点播服务实现,VOD,音视频VOD: 视频共享点播服务实现,VOD,音视频VOD: 视频共享点播服务实现,VOD,音视频VOD: 视频共享点播服务实现,VOD,音视频

六. 最终版代码

gitee仓库:冰果滴/VOD文章来源地址https://www.toymoban.com/news/detail-719968.html

到了这里,关于VOD: 视频共享点播服务实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【音视频开发】:RTSP服务器协议内容

    RTSP是一个 实时传输流协议 ,是一个 应用层 的协议。通常说的RTSP包括RTSP协议、RTP协议、RTCP协议。 RTSP协议:负责服务器与客户端之间的请求与相应 RTP协议 :负责服务器与客户端之间传输媒体数据 RTCP协议:负责提供有关RTP传输指令的反馈,就是确保RTP传输的质量 吧 三者关

    2024年04月26日
    浏览(47)
  • 宝塔面板SRS音视频TRC服务器启动失败

    首先,查找原因 运行结果: 运行结果: 找打了name为srs-stack的应用 运行结果: 找到原因了,端口8080被占用 每个人根据自己的服务进程修改掉占用端口的程序即可 再次启动 报错: 运行结果: 用ftp工具下载该配置文件,打开,内容如下: 将1935改成1936 在相同目录下可以找到

    2024年01月24日
    浏览(49)
  • 【秒懂音视频开发】26_RTMP服务器搭建

    基本概念 流媒体(Streaming media),也叫做:流式媒体。 是指将一连串的多媒体数据压缩后,经过互联网 分段发送 数据,在互联网上即时传输影音以供观赏的一种技术与过程 此技术使得数据包可以像 流水 一样发送,如果不使用此技术,就必须得先 下载整个 媒体文件才能进

    2023年04月08日
    浏览(52)
  • 音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如 FMS , Red5 , crtmpserver 等。RTMP协议可用于实现直播、点播应用,通过 FMLE(Flash Media Live Encoder) 推送音

    2023年04月08日
    浏览(74)
  • 使用Python采集某网站视频,实现音视频自动合成!

      开发环境 模块的使用 采集下破站视频数据 通过开发者工具进行抓包分析,分析破站视频数据的来源。 开发者工具的使用 打开方式: 鼠标右键点击检查选择Network F12 ctrl + shift + i 想要开发者工具中有数据加载, 需要 刷新网页。 通过元素(Element)面板,我们能查看到想抓取

    2024年02月06日
    浏览(61)
  • 阿里、百度等大厂技术面试题汇总,音视频服务器开发框架

    一面(104min) 自我介绍。 线程和进程的区别。 线程安全。面试官追问是否了解volite,小金忘了没回答出来。面试官追问是否了解自旋锁,乐观锁,悲观锁等,小金回答了解但是没用过。 http是用什么实现的。 TCP和UDP的区别。 TCP为什么是可靠的。注意拥塞机制涉及的算

    2024年04月15日
    浏览(74)
  • 技术分享| 小程序实现音视频通话

    上一期我们把前期准备工作做完了,这一期就带大家实现音视频通话! 为了更好的区分功能,我分成了六个 js 文件 config.js 音视频与呼叫邀请配置 store.js 实现音视频通话的变量 rtc.js 音视频逻辑封装 live-code.js 微信推拉流状态码 rtm.js 呼叫邀请相关逻辑封装 util.js 其他方法

    2024年02月02日
    浏览(55)
  • WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS

    WebRTC音视频通话-实现GPUImage视频美颜滤镜效果 在WebRTC音视频通话的GPUImage美颜效果图如下 可以看下 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlow/article/details/132262724 之前WebR

    2024年02月12日
    浏览(51)
  • ffmpeg api实现将音视频混合

    需求: 将一首歌mp3格式,和一段无声音录屏mp4格式,合成到一起,使播放视频时能听到这首歌。 实现原理: 打开mp3音频,解析出输入音频流,再打开mp4视频,解析出输入视频流。 然后打开输出环境,创建2个输出流,分别对应音频输入流和视频输入流。 最后循环交替从音频

    2024年02月14日
    浏览(43)
  • iOS使用AVCaptureSession实现音视频采集

    AVCaptureSession配置采集行为并协调从输入设备到采集输出的数据流。要执行实时音视频采集,需要实例化采集会话并添加适当的输入和输出。 AVCaptureSession:管理输入输出音视频流 AVCaptureDevice:相机硬件的接口,用于控制硬件特性,诸如镜头的位置(前后摄像头)、曝光、闪光灯

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包