当前位置: 首页 > wzjs >正文

搜狗怎么做网站长春网站建设路

搜狗怎么做网站,长春网站建设路,如何查询商标是否已经被注册,网站建设实训报告命名规范QtAV 基本播放控制功能实现&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暂停、停止、快进快退、截屏 等功能。以下是具体实现方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…

QtAV 基本播放控制功能实现(C++ & QML)

QtAV 提供了完整的播放控制 API,支持 播放、暂停、停止、快进快退、截屏 等功能。以下是具体实现方法:


1. C++ 控制方式

基本播放控制

#include <QtAV>
#include <QtAV/AVPlayer.h>// 初始化播放器
QtAV::AVPlayer player;// 设置播放文件
player.setFile("video.mp4");  // 播放
player.play();// 暂停
player.pause();// 继续播放(从暂停状态恢复)
player.play();  // 重新播放 或 player.togglePause(); 从播放位置继续播放// 停止(重置状态)
player.stop();

快进/快退(跳转进度)

// 快进 10 秒
qint64 currentPos = player.position();
player.seek(currentPos + 10000);  // 单位:毫秒// 快退 5 秒
player.seek(currentPos - 5000); // 重载形式1 直接设置毫秒// 跳转到 50% 进度
player.seek(0.5); // 重载形式2 直接设置进度

总时长 player.duration()

截屏(保存当前帧)

// 截屏并保存为 PNG
QtAV::VideoOutput *videoOutput = new QtAV::VideoOutput;
player.setRenderer(videoOutput);// 捕获当前帧
QImage image = videoOutput->frame();
image.save("screenshot.png");

2. QML 控制方式

基本播放控制

import QtQuick 2.0
import QtAV 1.7Item {width: 800height: 600AVPlayer {id: avPlayersource: "video.mp4"}VideoOutput {source: avPlayeranchors.fill: parent}// 播放/暂停按钮Button {text: avPlayer.isPlaying ? "暂停" : "播放"onClicked: avPlayer.isPlaying ? avPlayer.pause() : avPlayer.play()}// 停止按钮Button {text: "停止"onClicked: avPlayer.stop()}
}

快进/快退

// 快进 10 秒
Button {text: "快进"onClicked: avPlayer.seek(avPlayer.position + 10000)
}// 快退 5 秒
Button {text: "快退"onClicked: avPlayer.seek(avPlayer.position - 5000)
}

截屏

Button {text: "截屏"onClicked: {const image = videoOutput.captureFrame()image.save("screenshot.png")}
}

3. 进阶功能

播放速度控制

// 2 倍速播放
player.setSpeed(2.0);// 0.5 倍慢放
player.setSpeed(0.5);

音量控制

player.audio()->setVolume(0.5);  // 0~1.0

获取播放信息

qint64 totalTime = player.duration();  // 总时长(毫秒) play播放后才能获取到
qint64 currentTime = player.position(); // 当前进度
bool isPlaying = player.isPlaying();

4. 信号与槽(监听状态)

// 监听播放状态变化
connect(&player, &AVPlayer::stateChanged, [](QtAV::AVPlayer::State state) {if (state == QtAV::AVPlayer::PlayingState) {qDebug() << "开始播放";} else if (state == QtAV::AVPlayer::PausedState) {qDebug() << "已暂停";}
});// 监听进度变化
connect(&player, &AVPlayer::positionChanged, [](qint64 pos) {qDebug() << "当前进度:" << pos;
});

5. 完整示例(C++ 播放器)

#include <QApplication>
#include <QtAV>
#include <QtAV/AVPlayer.h>
#include <QtAV/VideoOutput.h>int main(int argc, char *argv[]) {QApplication a(argc, argv);QtAV::AVPlayer player;QtAV::VideoOutput output;output.setRenderer(&player);player.setFile("video.mp4");player.play();// 窗口显示output.widget()->show();return a.exec();
}

总结

功能C++ 方法QML 属性/方法
播放player.play()avPlayer.play()
暂停player.pause()avPlayer.pause()
停止player.stop()avPlayer.stop()
快进/快退player.seek(pos + 10000)avPlayer.seek(pos + 10000)
截屏videoOutput->frame().save()videoOutput.captureFrame()
倍速播放player.setSpeed(2.0)avPlayer.playbackRate = 2.0

将 QtAV 播放窗口集成到自定义界面(C++ & QML)

你可以通过 Qt Widgets(C++)QML 方式将 QtAV 的播放窗口嵌入到自己的 UI 中,并在下方添加控制按钮。以下是两种实现方法:


1. C++ 方式(Qt Widgets)

目标布局

+-----------------------+
|      QtAV 播放窗口      |
+-----------------------+
| [播放] [暂停] [停止] ... |
+-----------------------+

代码实现

#include <QApplication>
#include <QtAV>
#include <QtAV/AVPlayer.h>
#include <QtAV/VideoOutput.h>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 主窗口QWidget mainWindow;mainWindow.setWindowTitle("自定义播放器");mainWindow.resize(800, 600);// 垂直布局QVBoxLayout *layout = new QVBoxLayout(&mainWindow);// 1. 添加 QtAV 播放窗口QtAV::AVPlayer *player = new QtAV::AVPlayer;QtAV::VideoOutput *videoOutput = new QtAV::VideoOutput;player->setRenderer(videoOutput);player->setFile("video.mp4");// 将 VideoOutput 的 QWidget 添加到布局layout->addWidget(videoOutput->widget());// 2. 添加控制按钮QHBoxLayout *buttonLayout = new QHBoxLayout;QPushButton *playButton = new QPushButton("播放");QPushButton *pauseButton = new QPushButton("暂停");QPushButton *stopButton = new QPushButton("停止");QPushButton *screenshotButton = new QPushButton("截屏");buttonLayout->addWidget(playButton);buttonLayout->addWidget(pauseButton);buttonLayout->addWidget(stopButton);buttonLayout->addWidget(screenshotButton);layout->addLayout(buttonLayout);// 按钮信号槽连接QObject::connect(playButton, &QPushButton::clicked, [player]() {player->play();});QObject::connect(pauseButton, &QPushButton::clicked, [player]() {player->pause();});QObject::connect(stopButton, &QPushButton::clicked, [player]() {player->stop();});QObject::connect(screenshotButton, &QPushButton::clicked, [videoOutput]() {QImage image = videoOutput->frame();image.save("screenshot.png");qDebug() << "截图已保存!";});mainWindow.show();return app.exec();
}

关键点

  1. VideoOutput::widget()
    将 QtAV 的视频渲染器转换为 QWidget,嵌入到你的布局中。
  2. 使用 QVBoxLayout + QHBoxLayout
    垂直排列播放窗口和按钮栏,水平排列按钮。
  3. 信号槽控制播放器
    通过按钮的 clicked 信号调用 AVPlayer 的对应方法。

2. QML 方式(更简洁的 UI 设计)

目标布局

ColumnLayout {VideoOutput { /* 播放窗口 */ }RowLayout { /* 按钮行 */ }
}

代码实现

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtAV 1.7ApplicationWindow {width: 800height: 600visible: truetitle: "QML 自定义播放器"ColumnLayout {anchors.fill: parent// 1. 播放窗口VideoOutput {id: videoOutputLayout.fillWidth: trueLayout.fillHeight: truesource: avPlayer}// 2. 按钮控制栏RowLayout {Layout.alignment: Qt.AlignHCenterButton {text: avPlayer.isPlaying ? "暂停" : "播放"onClicked: avPlayer.isPlaying ? avPlayer.pause() : avPlayer.play()}Button {text: "停止"onClicked: avPlayer.stop()}Button {text: "快进+10s"onClicked: avPlayer.seek(avPlayer.position + 10000)}Button {text: "截屏"onClicked: {const image = videoOutput.captureFrame()image.save("screenshot.png")console.log("截图已保存!")}}}}// 播放器实例AVPlayer {id: avPlayersource: "video.mp4"}
}

关键点

  1. VideoOutput 绑定 AVPlayer
    通过 source: avPlayer 关联播放器和渲染窗口。
  2. 动态按钮文本
    avPlayer.isPlaying 控制“播放/暂停”按钮的文本切换。
  3. captureFrame() 截屏
    直接调用 VideoOutput 的接口保存当前帧。

3. 进阶优化

(1) 进度条控制(C++ 示例)

// 添加 QSlider 到布局
QSlider *progressSlider = new QSlider(Qt::Horizontal);
layout->addWidget(progressSlider);// 更新进度条
QObject::connect(player, &QtAV::AVPlayer::positionChanged, [=](qint64 pos) {progressSlider->setValue(pos);
});
QObject::connect(progressSlider, &QSlider::sliderMoved, [=](int value) {player->seek(value);
});

(2) 音量控制(QML 示例)

Slider {from: 0to: 100value: 50onMoved: avPlayer.audio.volume = value
}
http://www.dtcms.com/wzjs/531395.html

相关文章:

  • 学做网站初入门教程温岭网络推广
  • 合肥金融网站开发沈阳seo搜索引擎
  • 有什么做家常菜的网站国家高新技术企业查询
  • 乔拓云智能建站系统官网百度手机助手app下载官网
  • 快速网站排名提升工具百度指数查询官网
  • 响应式网站欣赏企业推广是做什么的
  • 一个网站的制作特点seo推广公司排名
  • 网站怎么样做不违规怎么样关键词优化
  • 建设银行官方网站手机版下载安装电脑培训班有哪些科目
  • 免费自助建站网站建设免费信息发布竞价排名的服务模式是
  • 做网站都需要会什么软件seo面试常见问题及答案
  • 做网站怎么排版网站模版
  • 建设银行陕西分行网站seo培训机构
  • 封面免费制作网站seo问答
  • ac68u做网站网站seo优化是什么
  • 学校网站cms推广软文范例大全500
  • 面料出口做哪个网站好游戏推广赚佣金的平台
  • 怎样做网站变手机软件中国十大搜索引擎排名
  • 无上升级系统图片优化软件
  • 广州企业网站找哪里百度网站大全旧版
  • 北京各大网站推广服务公司网页制作步骤
  • 昆山设计网站的公司全部视频支持代表手机浏览器
  • 自己的电脑做网站会收录吗网站seo的内容是什么
  • 网站开发的试题营销型网站的类型有哪些
  • 石家庄哪里做微网站百度广告推广怎么做
  • 做新闻网站怎么赚钱互联网营销的方法
  • 建设银行网站看不到e商免费检测网站seo
  • 做网站如何赢利的如何在网上推广自己的公司
  • asp保险网站源码seo网络营销推广
  • 网站开发视频播放网站cps推广是什么意思