广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于Qt实现视频播放器功能
  • 119
分享到

基于Qt实现视频播放器功能

2024-04-02 19:04:59 119人浏览 独家记忆
摘要

目录一、功能介绍二、代码三、运行一、功能介绍 能实现视频播放 二、代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWIND

一、功能介绍

在这里插入图片描述

能实现视频播放

二、代码

mainwindow.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QListWidget>
#include <QLabel>
#include <QSpacerItem>
#include <QVideoWidget>


struct MediaObjectInfo {
    QString fileName; // 用于保存视频文件名
    QString filePath; // 用于保存视频文件路径
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private:
    QMediaPlayer *videoPlayer; // 媒体播放器,用于播放视频
    QMediaPlaylist *mediaPlaylist; // 媒体列表
    QVideoWidget *videoWidget; // 视频显示窗口
    QListWidget *videoListWidget; // 视频列表
    QSlider *playProgressScrollBar; // 播放进度条
    QSlider *volumeScrollBar; // 音量条
    QPushButton *pushButton[5]; // 视频播放器按钮
    QHBoxLayout *hBoxLayout[3]; // 水平布局
    QWidget *hWidget[3]; // 水平容器
    QLabel *label[2]; // 标签文本
    QWidget *vWidget[2]; // 垂直容器
    QVBoxLayout *vBoxLayout[2]; // 垂直布局

public:
    void initWidget(); // 初始化窗口
    void mediaPlayerInit(); // 媒体播放初始化
    void scanVideoFiles(); // 扫描本地视频文件


public slots:
    void SltBtnPlayClicked(); // 播放点击
    void SltBtnNextClicked(); // 下一首点击
    void SltBtnVolumeDownClicked(); // 声音加点击
    void SltBtnVolumeUpClicked(); // 声音减点击
    void SltBtnFullScreenClicked(); // 全屏点击
    void SltVideoListWidgetCliked(QListWidgetItem*); // 视频列表点击
    void SltMediaPlaylistCurrentIndexChanged(int); // 媒体当前项改变
    void SltMediaPlayerStateChanged(QMediaPlayer::State); // 媒体播放状态改变
    void SltMediaPlayerDurationChanged(qint64); // 媒体时长发生变化
    void SltMediaPlayerPositionChanged(qint64); // 媒体当前播放时间发生变化
    void SltPlayProgressScrollBarReleased(); // 播放进度条
    void SltVolumeScrollBarReleased(); // 音量进度条
    void resizeEvent(QResizeEvent *event);
};
#endif // MAINWINDOW_H

mainwindow.cpp


#include "mainwindow.h"
#include <QCoreApplication>
#include <QDir>

QString videoFilePath = "/home/luatao/Qt/videoplayer/myVideo";

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    initWidget(); // 初始化窗口
    mediaPlayerInit(); // 媒体播放初始化
    scanVideoFiles(); // 扫描本地视频
    
    connect(pushButton[0], SIGNAL(clicked()), this, SLOT(SltBtnPlayClicked())); // 播放
    connect(pushButton[1], SIGNAL(clicked()),this, SLOT(SltBtnNextClicked())); // 下一首
    connect(pushButton[2], SIGNAL(clicked()), this, SLOT(SltBtnVolumeDownClicked())); // 声音减
    connect(pushButton[3], SIGNAL(clicked()), this, SLOT(SltBtnVolumeUpClicked())); // 声音加
    connect(pushButton[4], SIGNAL(clicked()),this, SLOT(SltBtnFullScreenClicked())); // 全屏

    
    connect(videoListWidget, SIGNAL(itemClicked(QListWidgetItem*)),this, SLOT(SltVideoListWidgetCliked(QListWidgetItem*)));

    
    connect(mediaPlaylist,SIGNAL(currentIndexChanged(int)),this,SLOT(SltMediaPlaylistCurrentIndexChanged(int)));
    connect(videoPlayer,SIGNAL(stateChanged(QMediaPlayer::State)),this,SLOT(SltMediaPlayerStateChanged(QMediaPlayer::State)));
    connect(videoPlayer, SIGNAL(durationChanged(qint64)),this,SLOT(SltMediaPlayerDurationChanged(qint64)));
    connect(videoPlayer,SIGNAL(positionChanged(qint64)), this,SLOT(SltMediaPlayerPositionChanged(qint64)));

    
    connect(playProgressScrollBar, SIGNAL(sliderReleased()), this, SLOT(SltPlayProgressScrollBarReleased()));
    connect(volumeScrollBar, SIGNAL(sliderReleased()),this, SLOT(SltVolumeScrollBarReleased()));
}

MainWindow::~MainWindow()
{
}


void MainWindow::initWidget()
{
    this->setGeometry(0, 0, 800, 480);
    QPalette pal;
    pal.setColor(QPalette::WindowText, Qt::white); // 设置窗口文字为白色

    
    for (int i = 0; i < 3; i++) {
        
        hWidget[i] = new QWidget();
        hWidget[i]->setAutoFillBackground(true);
        
        hBoxLayout[i] = new QHBoxLayout();
    }
    for (int i = 0; i < 2; i++) {
        
        vWidget[i] = new QWidget();
        vWidget[i]->setAutoFillBackground(true);
        
        vBoxLayout[i] = new QVBoxLayout();
    }
    
    for (int i = 0; i < 2; i++) {
        label[i] = new QLabel();
    }
    
    for (int i = 0; i < 5; i++) {
        pushButton[i] = new QPushButton();
        pushButton[i]->setMaximumSize(44, 44);
        pushButton[i]->setMinimumSize(44, 44);
    }
    
    pushButton[0]->setCheckable(true); // 播放
    pushButton[4]->setCheckable(true); // 全屏

    
    vWidget[0]->setObjectName("vWidget0");
    vWidget[1]->setObjectName("vWidget1");
    hWidget[1]->setObjectName("hWidget1");
    hWidget[2]->setObjectName("hWidget2");
    pushButton[0]->setObjectName("btn_play");
    pushButton[1]->setObjectName("btn_next");
    pushButton[2]->setObjectName("btn_volumedown");
    pushButton[3]->setObjectName("btn_volumeup");
    pushButton[4]->setObjectName("btn_screen");

    QFont font;

    font.setPixelSize(18); // 字体大小
    label[0]->setFont(font);
    label[1]->setFont(font);
    pal.setColor(QPalette::WindowText, Qt::white);
    label[0]->setPalette(pal);
    label[1]->setPalette(pal);
    label[0]->setText("00:00"); // 播放时间显示
    label[1]->setText("/00:00");

    
    playProgressScrollBar = new QSlider(Qt::Horizontal); // 水平方向
    playProgressScrollBar->setMaximumHeight(15);
    playProgressScrollBar->setObjectName("durationSlider");
    
    volumeScrollBar = new QSlider(Qt::Horizontal);
    volumeScrollBar->setRange(0, 100);
    volumeScrollBar->setMaximumWidth(80);
    volumeScrollBar->setObjectName("volumeSlider");
    volumeScrollBar->setValue(50); // 中间值
    
    videoListWidget = new QListWidget();
    videoListWidget->setObjectName("listWidget");
    videoListWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏垂直滚动条
    videoListWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏水平滚动条
    
    videoWidget = new QVideoWidget();
    videoWidget->setStyleSheet("border-image: none;" "background: transparent;""border:none");
    videoWidget->setMinimumSize(500, 480); // 视频窗口大小

    
    
    vWidget[0]->setMinimumSize(300, 480);
    vWidget[0]->setMaximumWidth(300);

    hBoxLayout[0]->addWidget(videoWidget); // 视频窗口 左边
    hBoxLayout[0]->addWidget(vWidget[0]); // 右边 垂直窗口

    hWidget[0]->setLayout(hBoxLayout[0]);
    hBoxLayout[0]->setContentsMargins(0, 0, 0, 0);

    setCentralWidget(hWidget[0]); // 只有Qmainwindow才能创建中心布局Qwidget不行

    
    QSpacerItem *vSpacer0 = new QSpacerItem(0, 80,QSizePolicy::Minimum,QSizePolicy::Maximum);
    vBoxLayout[0]->addWidget(videoListWidget); // 添加视频列表
    vBoxLayout[0]->addSpacerItem(vSpacer0);
    vBoxLayout[0]->setContentsMargins(0, 0, 0, 0);
    vWidget[0]->setLayout(vBoxLayout[0]);

    
    
    hWidget[1]->setMaximumHeight(15);
    hWidget[2]->setMinimumHeight(65);
    vBoxLayout[1]->addWidget(hWidget[1]);
    vBoxLayout[1]->addWidget(hWidget[2]);
    vBoxLayout[1]->setAlignment(Qt::AlignCenter);

    vWidget[1]->setLayout(vBoxLayout[1]);
    vWidget[1]->setParent(this);
    vWidget[1]->setGeometry(0, this->height() - 80, this->width(), 80);
    vBoxLayout[1]->setContentsMargins(0, 0, 0, 0);
    
    vWidget[1]->raise();

    
    hBoxLayout[1]->addWidget(playProgressScrollBar); // 播放进度条
    hBoxLayout[1]->setContentsMargins(0, 0, 0, 0);
    hWidget[1]->setLayout(hBoxLayout[1]);

    
    QSpacerItem *hSpacer0 = new QSpacerItem(300, 80,QSizePolicy::Expanding,QSizePolicy::Maximum);

    hBoxLayout[2]->addSpacing(20);
    hBoxLayout[2]->addWidget(pushButton[0]);
    hBoxLayout[2]->addSpacing(10);
    hBoxLayout[2]->addWidget(pushButton[1]);
    hBoxLayout[2]->addSpacing(10);
    hBoxLayout[2]->addWidget(pushButton[2]);
    hBoxLayout[2]->addWidget(volumeScrollBar);
    hBoxLayout[2]->addWidget(pushButton[3]);
    hBoxLayout[2]->addWidget(label[0]);
    hBoxLayout[2]->addWidget(label[1]);
    hBoxLayout[2]->addSpacerItem(hSpacer0);
    hBoxLayout[2]->addWidget(pushButton[4]);
    hBoxLayout[2]->addSpacing(20);
    hBoxLayout[2]->setContentsMargins(0, 0, 0, 0);
    hBoxLayout[2]->setAlignment(Qt::AlignLeft | Qt::AlignTop);

    hWidget[2]->setLayout(hBoxLayout[2]);
}


void MainWindow::mediaPlayerInit()
{
    videoPlayer = new QMediaPlayer(this);
    mediaPlaylist = new QMediaPlaylist(this); // 播放列表
    mediaPlaylist->clear();
    videoPlayer->setPlaylist(mediaPlaylist);
    videoPlayer->setVideoOutput(videoWidget); // 设置视频输出窗口
    mediaPlaylist->setPlaybackMode(QMediaPlaylist::Loop); // 设置播放模式,Loop 是列循环
    videoPlayer->setVolume(50); // 设置默认软件音量为 50%
}


void MainWindow::scanVideoFiles()
{
//    QDir dir(QCoreApplication::applicationDirPath()+ "/myVideo");
    QDir dir(videoFilePath); // 视频文件路径
    QDir dirbsolutePath(dir.absolutePath()); // 绝对路径
//    qDebug() << dirbsolutePath << endl;
    if (dirbsolutePath.exists()) { // 如果目录存在
        QStringList filter; // 定义过滤器
        
        filter << "*.mp4" << "*.mkv" << "*.wmv" << "*.avi";
        
        QFileInfoList files = dirbsolutePath.entryInfoList(filter, QDir::Files);

        for (int i = 0; i < files.count(); i++) {
            MediaObjectInfo info;
            
            info.fileName = QString::fromUtf8(files.at(i).fileName().toUtf8().data());
            info.filePath = QString::fromUtf8(files.at(i).filePath().toUtf8().data());
            
            if (mediaPlaylist->addMedia(
                QUrl::fromLocalFile(info.filePath))) {
                
                //mediaObjectInfo.append(info);
                
                videoListWidget->addItem(info.fileName);
            } else {
                qDebug()<<mediaPlaylist->errorString().toUtf8().data()<< endl;
                qDebug()<< " Error number:"<< mediaPlaylist->error()<< endl;
            }
        }
    }else{
        qDebug()<< "目录不存在 "<< endl;
    }
}

void MainWindow::SltBtnPlayClicked()
{
    int state = videoPlayer->state(); // 获取播放的状态
    switch (state) {
        case QMediaPlayer::StoppedState:
             
             videoPlayer->play();
             break;
        case QMediaPlayer::PlayingState:
             
             videoPlayer->pause();
             break;
        case QMediaPlayer::PausedState:
             videoPlayer->play();
             break;
    }
}


void MainWindow::SltBtnNextClicked()
{
    videoPlayer->stop(); // 停止播放
    int count = mediaPlaylist->mediaCount(); // 获取播放列表的视频个数
    if (0 == count)
        return;
    
    mediaPlaylist->next();
    videoPlayer->play();
}


void MainWindow::SltBtnVolumeDownClicked()
{
    
    volumeScrollBar->setValue(volumeScrollBar->value() - 5);
    videoPlayer->setVolume(volumeScrollBar->value());
}

void MainWindow::SltBtnVolumeUpClicked()
{
    
    volumeScrollBar->setValue(volumeScrollBar->value() + 5);
    videoPlayer->setVolume(volumeScrollBar->value());
}


void MainWindow::SltBtnFullScreenClicked()
{
    
    vWidget[0]->setVisible(!pushButton[4]->isChecked());
}


void MainWindow::SltVideoListWidgetCliked(QListWidgetItem *item)
{
    videoPlayer->stop();
    mediaPlaylist->setCurrentIndex(videoListWidget->row(item)); // 选中点击的项
    videoPlayer->play();
}


void MainWindow::SltMediaPlaylistCurrentIndexChanged(int index)
{
    if (-1 == index)
        return;

    
    videoListWidget->setCurrentRow(index);
}


void MainWindow::SltMediaPlayerStateChanged(QMediaPlayer::State state)
{
    switch (state) {
        case QMediaPlayer::StoppedState:
            pushButton[0]->setChecked(false);
            break;
        case QMediaPlayer::PlayingState:
            pushButton[0]->setChecked(true);
            break;
        case QMediaPlayer::PausedState:
            pushButton[0]->setChecked(false);
            break;
    }
}

void MainWindow::SltMediaPlayerDurationChanged(qint64 duration)
{
    playProgressScrollBar->setRange(0, duration / 1000); // 设置播放进度条的范围
    int second = duration / 1000;
    int minute = second / 60;
    second %= 60;

    QString mediaDuration;
    mediaDuration.clear();

    if (minute >= 10)
        mediaDuration = QString::number(minute, 10);
    else
        mediaDuration = "0" + QString::number(minute, 10);

    if (second >= 10)
        mediaDuration = mediaDuration + ":" + QString::number(second, 10);
    else
        mediaDuration = mediaDuration + ":0" + QString::number(second, 10);

    
    label[1]->setText("/" + mediaDuration);
}

void MainWindow::SltMediaPlayerPositionChanged(qint64 position)
{
    if (!playProgressScrollBar->isSliderDown()) // 进度条没有按下
        playProgressScrollBar->setValue(position / 1000);

    int second = position / 1000;
    int minute = second / 60;
    second %= 60;

    QString mediaPosition;
    mediaPosition.clear();

    if (minute >= 10)
        mediaPosition = QString::number(minute, 10);
    else
        mediaPosition = "0" + QString::number(minute, 10);

    if (second >= 10)
        mediaPosition = mediaPosition + ":" + QString::number(second, 10);
    else
        mediaPosition = mediaPosition + ":0" + QString::number(second, 10);

    
    label[0]->setText(mediaPosition);
}

void MainWindow::SltPlayProgressScrollBarReleased()
{
    
    videoPlayer->setPosition(playProgressScrollBar->value() * 1000);
}

void MainWindow::SltVolumeScrollBarReleased()
{
    
    videoPlayer->setVolume(volumeScrollBar->value());
}

void MainWindow::resizeEvent(QResizeEvent *event)
{
    Q_UNUSED(event);
    vWidget[1]->setGeometry(0, this->height() - 80, this->width(), 80);
}

main.cpp


#include "mainwindow.h"

#include <QApplication>
#include <QFile>

int main(int arGC, char *argv[])
{
    QApplication a(argc, argv);

    
    QFile file(":/style.qss");

    
    if (file.exists() ) {
        
        file.open(QFile::ReadOnly);
        
        QString styleSheet = QLatin1String(file.readAll());
        
        qApp->setStyleSheet(styleSheet);
        
        file.close();
    }

    MainWindow w;
    w.show();
    return a.exec();
}

style.qss


QWidget {
    border-image:url(:/images/bg.png);
}

QLabel {
    border-image:none;
}

QWidget#hWidget1 {
    border-image:none;
    background:transparent;
}

QWidget#hWidget2 {
    border-image:none;
    background:transparent;
}

QWidget#vWidget1 {
    border-image:url(:/images/mask.png);
    background:#24252a;
}

QWidget#vWidget0 {
    border-image:none;
}

QListWidget#listWidget {
    color:white;
    font-size: 15px;
    border:none;
    background: "#20ffffff";
    border-image:none;
}

QListWidgetlistWidget:item:active {
    background: transparent;
}

QListWidget#listWidget:item {
    background: transparent;
    height:60;
}

QListWidget#listWidget:item:selected {
    color:#5edcf3;
    background: transparent;
}

QListWidget#listWidget:item:hover {
    background: transparent;
    color:#5edcf3;
    border:none;
}


QPushButton#btn_play {
    border-image:url(:/icons/btn_play1.png);
}

QPushButton#btn_play:hover {
    border-image:url(:/icons/btn_play2.png);
}

QPushButton#btn_play:checked {
    border-image:url(:/icons/btn_pause1.png);
}

QPushButton#btn_play:checked:hover {
    border-image:url(:/icons/btn_pause2.png);
}

QPushButton#btn_next {
    border-image:url(:/icons/btn_next1.png);
}

QPushButton#btn_next:hover {
    border-image:url(:/icons/btn_next2.png);
}

QPushButton#btn_volumedown {
    border-image:url(:/icons/btn_volumedown1.png);
}

QPushButton#btn_volumedown:hover {
    border-image:url(:/icons/btn_volumedown2.png);
}

QPushButton#btn_volumeup {
    border-image:url(:/icons/btn_volumeup1.png);
}

QPushButton#btn_volumeup:hover {
    border-image:url(:/icons/btn_volumeup2.png);
}

QSlider#durationSlider:handle:horizontal {
    border-image:url(:/icons/handle.png);
}

QSlider#durationSlider {
    border-image:none;
}

QSlider#durationSlider:add-page:horizontal {
    border-image:url(:/images/add_page.png);
}

QSlider#volumeSlider {
    border-image:none;
}
QSlider#volumeSlider:handle:horizontal {
    border-image:url(:/icons/handle.png);
}

QSlider#volumeSlider:handle:horizontal {
    background:transparent;
}

QSlider#volumeSlider:add-page:horizontal {
    border-image:url(:/images/add_page.png);
}

QPushButton#btn_screen {
    border-image:url(:/icons/btn_fullscreen1.png);
}

QPushButton#btn_screen:hover {
    border-image:url(:/icons/btn_fullscreen2.png);
}

QPushButton#btn_screen:checked {
    border-image:url(:/icons/btn_screen1.png);
}

QPushButton#btn_screen:checked:hover {
    border-image:url(:/icons/btn_screen2.png);
}

三、运行

在这里插入图片描述
在这里插入图片描述

到此这篇关于基于Qt实现视频播放器功能的文章就介绍到这了,更多相关Qt--视频播放器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Qt实现视频播放器功能

本文链接: https://www.lsjlt.com/news/136578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Qt实现视频播放器功能
    目录一、功能介绍二、代码三、运行一、功能介绍 能实现视频播放 二、代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWIND...
    99+
    2022-11-12
  • 基于Qt实现视频播放器的制作
    本篇博客介绍如何利用qMediaPlayer和qvideowidget实现视频文件(avi,mp4….)的播放,并且提供进度显示,还可以通过拖动进度条来变换播放位置。 ...
    99+
    2022-12-08
    Qt实现视频播放器 Qt 视频播放器 Qt 视频播放
  • C++ Qt实现音视频播放功能
    由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑 避免以后踩坑 故在此记录实现过程  Qt版本 5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目...
    99+
    2022-11-12
  • 基于Qt编写简易的视频播放器
    目录一、前言二、效果图三、体验地址四、相关代码五、功能特点5.1 基础功能5.2 特色功能5.3 视频控件5.4 内核ffmpeg一、前言 花了一年多的时间,终于把这个超级播放器做成...
    99+
    2022-12-08
    Qt视频播放器 Qt视频播放 Qt 播放器
  • C++ Qt如何实现音视频播放功能
    这篇文章将为大家详细讲解有关C++ Qt如何实现音视频播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑&n...
    99+
    2023-06-21
  • 基于OpenCV实现视频循环播放
    目录介绍1.Python+OpenCV实现2.C+++OpenCV实现补充介绍 本文将介绍基于OpenCV实现视频的循环播放。 有以下三个步骤: 首先设置一个frame的设置参数fr...
    99+
    2022-11-13
  • 基于electron的音视频播放器
    目录前言选择做一个音视频播放器桌面应用程序原因技术的选型已经实现了的功能音视频播放实现右键菜单实现总结效果图前言 我是一个前端工程师,前一段时间想着搞一个属于自己的作品,所以就突发奇...
    99+
    2022-11-13
  • Android GSYVideoPlayer视频播放器功能的实现
    GSYVideoPlayer GSYVideoPlayer官方地址 GSYVideoPlayer 一个基于IJkPlayer的播放器 支持调节声音亮度 边播边缓存 使用了Andro...
    99+
    2022-11-12
  • Qt实现视频播放器(附完整源码)
    以下是一个基于Qt实现的视频播放器的完整源码:```cpp#include #include #include #include #...
    99+
    2023-09-14
    Qt
  • HTML5如何实现视频播放功能
    这篇文章将为大家详细讲解有关HTML5如何实现视频播放功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。hivideo是一款基于html5的视频播放器,摒弃video原有...
    99+
    2022-10-19
  • android怎么实现视频播放功能
    Android可以使用MediaPlayer或ExoPlayer等库来实现视频播放功能。以下是一种常见的实现方法:1. 添加权限和依...
    99+
    2023-08-23
    android
  • Qt音视频开发之音频播放QAudioOutput的实现
    目录一、前言二、效果图三、体验地址四、相关代码五、功能特点5.1 基础功能5.2 特色功能5.3 视频控件5.4 音频组件一、前言 以前一直以为只有Qt5以后才有QAudioOutp...
    99+
    2023-03-10
    Qt实现音频播放QAudioOutput Qt音频播放QAudioOutput Qt音频播放
  • Qt+Quick如何实现播放音乐和视频
    这篇文章主要介绍了Qt+Quick如何实现播放音乐和视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt+Quick如何实现播放音乐和视频文章都会有所收获,下面我们一起来看看吧。MediaPlayer 是 Q...
    99+
    2023-07-05
  • SpringBoot+thymeleaf实现读取视频列表并播放视频功能
    目录效果实现过程后端程序示例前端程序示例通过读取数据库video表获取当前视频的视频名、视频地址,展示至前端页面videorecord.html,通过点击播放按钮获取数据id进而得到...
    99+
    2022-11-13
  • AndroidUniversalVideoView实现视频播放器
    本文实例为大家分享了Android UniversalVideoView实现视频播放器的具体代码,供大家参考,具体内容如下 1.添加依赖 app下的 build.gradle d...
    99+
    2022-11-13
  • Qt音视频开发之音频播放QAudioOutput如何实现
    这篇文章主要介绍了Qt音视频开发之音频播放QAudioOutput如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt音视频开发之音频播放QAudioOutput如何实现文章都会有所收获,下面我们一起来看...
    99+
    2023-07-05
  • Qt+Quick实现播放音乐和视频的开发
    目录1、播放音乐2、播放视频3、多媒体元信息MediaPlayer 是 QML 提供的核心多媒体类,可以播放音频、视频。要使用 MediaPlayer,需要引入 QtMultimed...
    99+
    2023-03-08
    Qt Quick实现播放音乐 Qt Quick播放视频 Qt Quick
  • 基于Qt实现图片播放器的示例代码
    前言:使用qt制作了一个简单的图片播放器,可以播放gif、png等格式图片 先来看看播放器的功能(当然是很简陋的,没有很深入的设计): 1、点击图片列表中图片进行播放。 2、自动播放...
    99+
    2022-12-16
    Qt实现图片播放器 Qt图片播放器 Qt图片播放
  • SpringBoot+thymeleaf怎么实现读取视频列表并播放视频功能
    这篇文章主要介绍了SpringBoot+thymeleaf怎么实现读取视频列表并播放视频功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot+thymeleaf怎么实现读取视频列表并播放视频功...
    99+
    2023-06-30
  • 基于Python实现捕获,播放和保存摄像头视频
    目录读取视频从相机中读取视频从文件中播放视频保存视频前几天有个读者在粉丝群里面提了一个问题: Python 怎样提高视频清晰度和对比度? 我之前没有涉及到使用 Python 操作视频...
    99+
    2022-11-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作