|
@@ -0,0 +1,323 @@
|
|
|
+#include "VideoPlayerAPI.h"
|
|
|
+
|
|
|
+#include "spdlog/spdlog.h"
|
|
|
+
|
|
|
+
|
|
|
+/* 创建一个播放器 */
|
|
|
+Q_DECL_EXPORT QObject* createPlayer()
|
|
|
+{
|
|
|
+ return new VideoPlayer();
|
|
|
+}
|
|
|
+/* 销毁一个播放器 */
|
|
|
+Q_DECL_EXPORT void destroyPlayer(QObject* player)
|
|
|
+{
|
|
|
+ if(player != nullptr)
|
|
|
+ {
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer != nullptr)
|
|
|
+ {
|
|
|
+ delete videoPlayer;
|
|
|
+ videoPlayer = nullptr;
|
|
|
+ player = nullptr; // 确保指针不再指向已删除的对象
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ {
|
|
|
+ SPDLOG_WARN("destroyVideoPlayer: 传入的player为空指针");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 打开视频 */
|
|
|
+Q_DECL_EXPORT bool OpenVideo(QObject* player, const QString& fileName)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("OpenVideo: 传入的player为空指针");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("OpenVideo: 无法将player转换为VideoPlayer");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return videoPlayer->openPlayVedio(fileName);
|
|
|
+}
|
|
|
+
|
|
|
+/* 播放视频 */
|
|
|
+Q_DECL_EXPORT bool play(QObject* player)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("play: 传入的player为空指针");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("play: 无法将player转换为VideoPlayer");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return videoPlayer->play();
|
|
|
+}
|
|
|
+
|
|
|
+/* 暂停播放 */
|
|
|
+Q_DECL_EXPORT void pause(QObject* player)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("pause: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("pause: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->pause();
|
|
|
+}
|
|
|
+
|
|
|
+/* 停止播放 */
|
|
|
+Q_DECL_EXPORT void stop(QObject* player)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("stop: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("stop: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->stop();
|
|
|
+}
|
|
|
+
|
|
|
+/* 后退,单位ms */
|
|
|
+Q_DECL_EXPORT void backward(QObject* player, qint64 ms)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("backward: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("backward: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->backward(ms);
|
|
|
+}
|
|
|
+
|
|
|
+/* 前进,单位ms */
|
|
|
+Q_DECL_EXPORT void forward(QObject* player, qint64 ms)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("forward: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("forward: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->forward(ms);
|
|
|
+}
|
|
|
+
|
|
|
+/* 获取播放状态 */
|
|
|
+Q_DECL_EXPORT bool getPlayStatus(QObject* player)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getPlayStatus: 传入的player为空指针");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getPlayStatus: 无法将player转换为VideoPlayer");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return videoPlayer->getPlayStatus();
|
|
|
+}
|
|
|
+
|
|
|
+/* 获取视频时长 */
|
|
|
+Q_DECL_EXPORT qint64 getDuration(QObject* player)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getDuration: 传入的player为空指针");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getDuration: 无法将player转换为VideoPlayer");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return videoPlayer->getDuration();
|
|
|
+}
|
|
|
+
|
|
|
+/* 获取当前播放位置 */
|
|
|
+Q_DECL_EXPORT qint64 getCurrentPos(QObject* player)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getCurrentPos: 传入的player为空指针");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getCurrentPos: 无法将player转换为VideoPlayer");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return videoPlayer->getCurrentPos();
|
|
|
+}
|
|
|
+
|
|
|
+/* 设置当前播放位置 */
|
|
|
+Q_DECL_EXPORT void setCurrentPos(QObject* player, qint64 pos)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setCurrentPos: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setCurrentPos: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->setCurrentPos(pos);
|
|
|
+}
|
|
|
+
|
|
|
+/* 设置播放视频窗口的大小 */
|
|
|
+Q_DECL_EXPORT void setPlayWidgetSize(QObject* player, int width,int height)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setPlayWidgetSize: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setPlayWidgetSize: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->setPlayWidgetSize(width, height);
|
|
|
+}
|
|
|
+
|
|
|
+/* 设置播放窗口 */
|
|
|
+Q_DECL_EXPORT void setWidgetParent(QObject* player, QWidget* widget, bool isFull)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setWidgetParent: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setWidgetParent: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->setWidgetParent(widget, isFull);
|
|
|
+}
|
|
|
+
|
|
|
+/* 获取播放窗口的指针 */
|
|
|
+Q_DECL_EXPORT QWidget* getPlayWidget(QObject* player)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getPlayWidget: 传入的player为空指针");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("getPlayWidget: 无法将player转换为VideoPlayer");
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+
|
|
|
+ return videoPlayer->getPlayWidget();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/* 设置预览图片数目,在暂停时跳转,可能会有花屏或者黑帧,可以设置跳转图片个数跳过黑帧 */
|
|
|
+Q_DECL_EXPORT void setPreviewImage(QObject* player, int num)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setPreviewImage: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setPreviewImage: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->setPreviewImage(num);
|
|
|
+}
|
|
|
+
|
|
|
+/* 设置播放速度 */
|
|
|
+Q_DECL_EXPORT void setPlaySpeed(QObject* player, float speed)
|
|
|
+{
|
|
|
+ if(player == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setPlaySpeed: 传入的player为空指针");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_ERROR("setPlaySpeed: 无法将player转换为VideoPlayer");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ videoPlayer->setPlaySpeed(speed);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/* 创建一个IVideoPlayer */
|
|
|
+Q_DECL_EXPORT IVideoPlayer* createVideoPlayer()
|
|
|
+{
|
|
|
+ return new VideoPlayer();
|
|
|
+}
|
|
|
+
|
|
|
+/* 销毁一个IVideoPlayer */
|
|
|
+Q_DECL_EXPORT void destroyVideoPlayer(IVideoPlayer* player)
|
|
|
+{
|
|
|
+ if(player != nullptr)
|
|
|
+ {
|
|
|
+ VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
|
|
|
+ if(videoPlayer != nullptr)
|
|
|
+ {
|
|
|
+ delete videoPlayer;
|
|
|
+ videoPlayer = nullptr;
|
|
|
+ player = nullptr; // 确保指针不再指向已删除的对象
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ {
|
|
|
+ SPDLOG_WARN("destroyVideoPlayer: 传入的player为空指针");
|
|
|
+ }
|
|
|
+}
|