PonyPlayer
|
播放器 QuickItem 组件,提供暴露给 QML 的接口。 更多...
#include <hurricane.hpp>
Public 类型 | |
enum | HurricaneState { CLOSING , LOADING , INVALID , PRE_PLAY , PLAYING , PRE_PAUSE , PAUSED } |
Public 槽 | |
Q_INVOKABLE void | openFile (const QString &url, bool autoClose=true) |
![]() | |
void | setVideoFrame (const VideoFrameRef &pic) |
Q_INVOKABLE void | setLUTFilter (const QString &path) |
信号 | |
void | stateChanged () |
void | openFileResult (PonyPlayer::OpenFileResultType result, QPrivateSignal) |
void | positionChangedBySeek () |
void | audioOutputDeviceChanged () |
void | backwardStatusChanged () |
void | trackChanged () |
void | currentOutputDeviceChanged () |
void | pitchChanged () |
void | speedChanged () |
void | resourcesEnd () |
void | signalPlayerInitializing (QPrivateSignal) |
void | signalStart (QPrivateSignal) |
void | signalPause (QPrivateSignal) |
void | signalClose (QPrivateSignal) |
void | signalOpenFile (const QString &path, QPrivateSignal) |
void | signalSeek (qreal pos, QPrivateSignal) |
![]() | |
void | brightnessChanged () |
void | contrastChanged () |
void | saturationChanged () |
void | frameSizeChanged () |
void | keepFrameRateChanged () |
Public 成员函数 | |
Hurricane (QQuickItem *parent=nullptr) | |
virtual | ~Hurricane () override |
HurricaneState | getState () |
int | getTrack () |
double | getSpeed () |
bool | isBackward () |
QStringList | getAudioDeviceList () |
Q_INVOKABLE void | start () |
Q_INVOKABLE void | pause () |
Q_INVOKABLE void | close () |
Q_INVOKABLE void | setVolume (qreal volume) |
Q_INVOKABLE void | setPitch (qreal pitch) |
Q_INVOKABLE void | setSpeed (qreal speed) |
Q_INVOKABLE void | setCurrentOutputDevice (QString deviceName) |
Q_INVOKABLE QString | getCurrentOutputDevice () |
Q_INVOKABLE qreal | getAudioDuration () |
Q_INVOKABLE qreal | getVideoDuration () |
Q_INVOKABLE qreal | getPTS () |
Q_INVOKABLE void | seek (qreal pos) |
Q_INVOKABLE QStringList | getTracks () |
Q_INVOKABLE void | setTrack (int i) |
Q_INVOKABLE void | forward () |
Q_INVOKABLE void | backward () |
Q_INVOKABLE void | toggleBackward () |
Q_INVOKABLE bool | hasVideo () |
Q_INVOKABLE qreal | getPitch () |
![]() | |
Fireworks (QQuickItem *parent=nullptr) | |
~Fireworks () override | |
PONY_GUARD_BY (MAIN) private | |
void | setBrightness (GLfloat b) |
GLfloat | getContrast () const |
void | setContrast (GLfloat c) |
GLfloat | getSaturation () const |
void | setSaturation (GLfloat s) |
int | getHeight () const |
int | getWidth () const |
double | getFrameRate () const |
属性 | |
QML_ELEMENTqreal | pitch |
HurricaneState | state = HurricaneState::INVALID |
QStringList | audioDeviceList |
QStringList | tracks |
bool | backwardStatus = false |
int | track = -1 |
QString | currentOutputDevice |
double | speed = 1.0 |
![]() | |
QML_ELEMENTbool | keepFrameRate |
int | frameHeight |
int | frameWidth |
double | frameRate |
GLfloat | brightness |
GLfloat | contrast |
GLfloat | saturation |
QString | filterPrefix |
QStringList | filterJsons |
额外继承的成员函数 | |
![]() | |
QSGNode * | updatePaintNode (QSGNode *node, UpdatePaintNodeData *data) override |
播放器 QuickItem 组件,提供暴露给 QML 的接口。
我们完全采用异步通信的思想,这里的大部分方法都会直接返回。我们只需要关注一些事件(信号)更新 UI 的状态即可。我们的部分方法仅在特定状态才能 使用,需要特别注意。例如:打开视频文件可以分为两个操作:stop(如果当前正在播放视频,需要先停止播放)和 openFile。也就是说,如果正在播放视 频,必须先调用 stop 确保停止播放后再调用 openFile,否则 openFile 请求会被忽略。因此,一种正确的做法是先判断 state 是否为 PLAYING (正在播放视频),如果不是,先调用 stop。由于我们的方法调用是异步的,所以其实我们不能保证方法返回后状态会马上发生改变。保险的做法需要关注 stateChanged 事件再进行下一步动作,这会大大增加编码的复杂度。幸运地,部分方法我们可以提供状态立刻发生变换的保证(见方法注释)。我们会在注 释中说明调用的条件和状态转换。
HurricanePlayer 组件的状态, 其中瞬时状态代表前端 HurricanePlayer 发起操作, 但并未同步到后端 VideoWorker. 由后端引起的状态改变不需要进入相应的瞬时状态. 如视频播放结束导致暂停的状态转换为: PLAYING -> PAUSED (中间不经过 PRE_PAUSED).
枚举值 | |
---|---|
CLOSING | 正在关闭当前文件, 这是一个瞬时状态 |
LOADING | 正在加载, 这是一个瞬时状态 |
INVALID | 文件无效 |
PRE_PLAY | 准备播放, 这是一个瞬时状态, 将会很快转为 HurricaneState::PLAYING
|
PLAYING | 正在播放 |
PRE_PAUSE | 请求暂停, 这是一个瞬时状态 |
PAUSED | 已暂停 |
|
inlineexplicit |
|
inlineoverridevirtual |
|
signal |
|
inline |
|
signal |
|
inline |
关闭当前播放的视频, 这会清空组件显示 需要保证调用时的状态为 PAUSED / PRE_PAUSE, 方法保证返回时的状态为 CLOSING 状态转移 PAUSED -> CLOSING -> INVALID
|
signal |
|
inline |
|
inline |
|
inline |
获取视频长度, 需要保证状态不是 INVALID
|
inline |
获取音频输出设备列表
|
inline |
|
inline |
获取当前视频播放进度, 需要保证状态不是 INVALID
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
获取音频长度, 需要保证状态不是 INVALID
|
inline |
|
inline |
|
inlineslot |
打开视频文件 需要保证调用时状态为 INVALID / CLOSING, 方法保证返回时状态为 LOADING 如果指定 autoClose, 则会自动调用 HurricanePlayer::close() 状态转移 INVALID -> LOADING -> PAUSED
url | 文件路径 |
autoClose | 如果打开视频文件, 是否自动关闭 |
|
signal |
打开文件结果
b | 是否成功 |
|
inline |
暂停播放视频, 保证后端尽快停止视频播放进入空闲状态. 需要保证调用时状态为 PLAYING / PRE_PLAY, 方法保证返回时状态为 PRE_PAUSE 状态转移 PAUSED -> PRE_PAUSE -> PAUSED
|
signal |
|
signal |
视频播放进度由于手动调整发送改变
|
signal |
|
inline |
改变视频播放的进度, 不保证马上生效, 请关注信号 需要保证当前状态为 PAUSE, PRE_PAUSE, PLAYING 或 PRE_PLAY
pos | 播放进度(单位: 秒) |
|
inline |
设置音频输出设备名称
deviceName | 设备名称 |
|
inline |
设置音调
pitch | 音调 |
|
inline |
设置速度倍率, 要求倍率 > 0
speed | 速度倍率 |
|
inline |
|
inline |
设置音量大小, 音频的范围为[0, 1]
volume | 音量大小 |
|
signal |
|
signal |
|
signal |
|
signal |
|
signal |
|
signal |
|
signal |
|
inline |
开始播放视频 需要保证调用时状态为 PAUSED / PRE_PAUSE, 方法保证返回时状态为 PRE_PLAY 状态转移 PAUSED -> PRE_PLAY -> PLAYING
|
signal |
播放器状态发生改变. 我们不能保证瞬时状态会转移到相应的稳定状态,所以我们不应该检测瞬时状态决定下一步的动作. 例如: PRE_PAUSE 可以被 close 被打断, 直接转移到 INVALID 而永远不会转移到 PAUSED.
|
inline |
|
signal |
|
read |
|
read |
|
readwrite |
|
readwrite |
|
readwrite |
|
read |
|
readwrite |
|
read |