#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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(player); if(videoPlayer != nullptr) { delete videoPlayer; videoPlayer = nullptr; player = nullptr; // 确保指针不再指向已删除的对象 } } else { SPDLOG_WARN("destroyVideoPlayer: 传入的player为空指针"); } }