第15章 Qt项目实战之视频加密器


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

第15章 Qt项目实战之视频加密器

福优学苑@视频加密专家

  视频加密 -- 操作说明

HiTT -- 福优学苑音视频加密专家,经典的C/S架构,分为服务端和客户端。

服务端负责对视频文件进行加密,客户端主要负责播放视频(边解密边播放)。

  • 第1步:选择音视频文件

  • 第2步:加密设置(密码设置、加密模式、一机一码、共享模式、绑定硬盘主板显卡)

  • 第3步:播放设置(次数限制、预览限制、时间限制、播放比例、视频水印设置)

  • 第4步:防盗设置(防止录屏、禁止截屏、禁止虚拟机播放、防盗问答)

  • 第5步:输出设置(输出文件夹)

  • 播放器:一机一码,边解密边播放,保护视频版权


image.png


image.png

好文章,来自【福优学苑@音视频+流媒体】

image.png

好文章,来自【福优学苑@音视频+流媒体】

界面设计与美化


image.png

image.png

好文章,来自【福优学苑@音视频+流媒体】



视频加密策略

  1. 基于文件头加密

  2. 基于帧的加密

  3. 基于字节的加密


QTabWidget

  • 选择文件

  • 加密设置

  • 播放设置

  • 防盗设置

  • 执行加密




好文章,来自【福优学苑@音视频+流媒体】

代码分析



void Widget::initPage()

{

    this->setStyleSheet("background-color:#F0F0F0;");

    ///1. qss,类似于css

    ui->lblLogoText->setStyleSheet("color:#009100;font-style:italic;font-weight:bold;font-size:30px;");


    ///2. c++代码: Palette,Font(调色板、字体、画刷)

    ///

    /*QPalette pa;

    pa.setColor(QPalette::WindowText, QColor("#009100"));

    ui->lblLogoText->setPalette(pa);

    QFont ft;

    ft.setPointSize(20);

    ft.setBold(true);

    ui->lblLogoText->setContentsMargins(3,0,0,3);

    ui->lblLogoText->setFont(ft);

    */


好文章,来自【福优学苑@音视频+流媒体】

    /// logo图片

    QImage image(":/ress/pics/fu_logo.png");

    ui->lblLogoImage->setPixmap(QPixmap::fromImage( image) );


    /// 按钮背景色

    ///

    ui->frameTop->setStyleSheet("background-color:#C4E1FF;");

    ///ui->btnNextOK->setStyleSheet("background-color:#C4E1FF;font-weight:bold;font-size:30px;color:#009100;border:2px groove gray;border-radius:10px;padding:2px 4px;");



    ui->btnNextOK->setStyleSheet("QPushButton{background-color:rgba(125,178,123);\

                                                color: white; font-size:30px; font-weight:bold; border-radius: 10px;  border: 2px groove gray; border-style: outset;}"

            "QPushButton:hover{background-color:white;font-size:30px;font-weight:bold; color: black;}"

            "QPushButton:pressed{background-color:rgb(85, 170, 155);font-size:30px;font-weight:bold; border-style: inset; }"

            );

    /// 进度条

    ui->progressBar_Encrypt->setValue(0);


    // 初始化标准数据模型类对象

    m_simodel = new QStandardItemModel();


    // 初始化选择状态类对象

    pstSelectModel = new QItemSelectionModel(m_simodel);


    ui->tabContents->setStyleSheet(

                   "QTabWidget{"

                   "background-color:transparent;"

                   "}"

                   "QTabWidget::pane{"

                   "    border:2px;"

                   "}"

                   "QTabWidget::tab-bar{"

                   "        alignment:left;"

                   "}"

                   "QTabBar::tab{"

                   "    background:rgb(14, 106, 175);"

                   "    color:white;"

                   "    border:1px solid #ffffff;"

                   "    font-size:20px;"

                   "    font-weight:bold;"

                   "    min-width:35ex;"

                   "    min-height:10ex;"

                   "}"

                   "QTabBar::tab:hover{"

                   "    background:rgb(255, 255, 255, 100);"

                   "color:black;"

                   "}"

                   "QTabBar::tab:selected{"

                   "    border-color: black;"

                   "    background:red;"

                   "    color:white;"

                   "}"

                   );

好文章,来自【福优学苑@音视频+流媒体】

    m_simodel->setColumnCount(3);

    m_simodel->setHeaderData(0,Qt::Horizontal,"文件名");

    m_simodel->setHeaderData(1,Qt::Horizontal,"文件大小");

    m_simodel->setHeaderData(2,Qt::Horizontal,"文件路径");



    // 为tableView设置数据模型和选择模型

    ui->tableView->setModel(m_simodel);

    ui->tableView->setSelectionModel(pstSelectModel);


    //设置列宽不可变

    //ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed);

    //ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed);

    ui->tableView->setColumnWidth(0,300);

    ui->tableView->setColumnWidth(1,160);

    ui->tableView->setColumnWidth(2,590);


    ui->tableView->horizontalHeader()->setStyleSheet("color:#DA992A;font-size:20px;font-weight:bold;");


    ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);


}


好文章,来自【福优学苑@音视频+流媒体】


void Widget::on_tabContents_tabBarClicked(int index)

{

    if(index == 4){

        ui->btnNextOK->setText("执行加密");

    }

    else{

        ui->btnNextOK->setText("下一步");

    }

}


好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***