VideoPlayerAPI.cpp 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. #include "VideoPlayerAPI.h"
  2. #include "spdlog/spdlog.h"
  3. /* 创建一个播放器 */
  4. Q_DECL_EXPORT QObject* createPlayer()
  5. {
  6. return new VideoPlayer();
  7. }
  8. /* 销毁一个播放器 */
  9. Q_DECL_EXPORT void destroyPlayer(QObject* player)
  10. {
  11. if(player != nullptr)
  12. {
  13. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  14. if(videoPlayer != nullptr)
  15. {
  16. delete videoPlayer;
  17. videoPlayer = nullptr;
  18. player = nullptr; // 确保指针不再指向已删除的对象
  19. }
  20. } else
  21. {
  22. SPDLOG_WARN("destroyVideoPlayer: 传入的player为空指针");
  23. }
  24. }
  25. /* 打开视频 */
  26. Q_DECL_EXPORT bool OpenVideo(QObject* player, const QString& fileName)
  27. {
  28. if(player == nullptr)
  29. {
  30. SPDLOG_ERROR("OpenVideo: 传入的player为空指针");
  31. return false;
  32. }
  33. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  34. if(videoPlayer == nullptr)
  35. {
  36. SPDLOG_ERROR("OpenVideo: 无法将player转换为VideoPlayer");
  37. return false;
  38. }
  39. return videoPlayer->openPlayVedio(fileName);
  40. }
  41. /* 播放视频 */
  42. Q_DECL_EXPORT bool play(QObject* player)
  43. {
  44. if(player == nullptr)
  45. {
  46. SPDLOG_ERROR("play: 传入的player为空指针");
  47. return false;
  48. }
  49. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  50. if(videoPlayer == nullptr)
  51. {
  52. SPDLOG_ERROR("play: 无法将player转换为VideoPlayer");
  53. return false;
  54. }
  55. return videoPlayer->play();
  56. }
  57. /* 暂停播放 */
  58. Q_DECL_EXPORT void pause(QObject* player)
  59. {
  60. if(player == nullptr)
  61. {
  62. SPDLOG_ERROR("pause: 传入的player为空指针");
  63. return;
  64. }
  65. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  66. if(videoPlayer == nullptr)
  67. {
  68. SPDLOG_ERROR("pause: 无法将player转换为VideoPlayer");
  69. return;
  70. }
  71. videoPlayer->pause();
  72. }
  73. /* 停止播放 */
  74. Q_DECL_EXPORT void stop(QObject* player)
  75. {
  76. if(player == nullptr)
  77. {
  78. SPDLOG_ERROR("stop: 传入的player为空指针");
  79. return;
  80. }
  81. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  82. if(videoPlayer == nullptr)
  83. {
  84. SPDLOG_ERROR("stop: 无法将player转换为VideoPlayer");
  85. return;
  86. }
  87. videoPlayer->stop();
  88. }
  89. /* 后退,单位ms */
  90. Q_DECL_EXPORT void backward(QObject* player, qint64 ms)
  91. {
  92. if(player == nullptr)
  93. {
  94. SPDLOG_ERROR("backward: 传入的player为空指针");
  95. return;
  96. }
  97. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  98. if(videoPlayer == nullptr)
  99. {
  100. SPDLOG_ERROR("backward: 无法将player转换为VideoPlayer");
  101. return;
  102. }
  103. videoPlayer->backward(ms);
  104. }
  105. /* 前进,单位ms */
  106. Q_DECL_EXPORT void forward(QObject* player, qint64 ms)
  107. {
  108. if(player == nullptr)
  109. {
  110. SPDLOG_ERROR("forward: 传入的player为空指针");
  111. return;
  112. }
  113. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  114. if(videoPlayer == nullptr)
  115. {
  116. SPDLOG_ERROR("forward: 无法将player转换为VideoPlayer");
  117. return;
  118. }
  119. videoPlayer->forward(ms);
  120. }
  121. /* 获取播放状态 */
  122. Q_DECL_EXPORT bool getPlayStatus(QObject* player)
  123. {
  124. if(player == nullptr)
  125. {
  126. SPDLOG_ERROR("getPlayStatus: 传入的player为空指针");
  127. return false;
  128. }
  129. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  130. if(videoPlayer == nullptr)
  131. {
  132. SPDLOG_ERROR("getPlayStatus: 无法将player转换为VideoPlayer");
  133. return false;
  134. }
  135. return videoPlayer->getPlayStatus();
  136. }
  137. /* 获取视频时长 */
  138. Q_DECL_EXPORT qint64 getDuration(QObject* player)
  139. {
  140. if(player == nullptr)
  141. {
  142. SPDLOG_ERROR("getDuration: 传入的player为空指针");
  143. return -1;
  144. }
  145. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  146. if(videoPlayer == nullptr)
  147. {
  148. SPDLOG_ERROR("getDuration: 无法将player转换为VideoPlayer");
  149. return -1;
  150. }
  151. return videoPlayer->getDuration();
  152. }
  153. /* 获取当前播放位置 */
  154. Q_DECL_EXPORT qint64 getCurrentPos(QObject* player)
  155. {
  156. if(player == nullptr)
  157. {
  158. SPDLOG_ERROR("getCurrentPos: 传入的player为空指针");
  159. return -1;
  160. }
  161. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  162. if(videoPlayer == nullptr)
  163. {
  164. SPDLOG_ERROR("getCurrentPos: 无法将player转换为VideoPlayer");
  165. return -1;
  166. }
  167. return videoPlayer->getCurrentPos();
  168. }
  169. /* 设置当前播放位置 */
  170. Q_DECL_EXPORT void setCurrentPos(QObject* player, qint64 pos)
  171. {
  172. if(player == nullptr)
  173. {
  174. SPDLOG_ERROR("setCurrentPos: 传入的player为空指针");
  175. return;
  176. }
  177. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  178. if(videoPlayer == nullptr)
  179. {
  180. SPDLOG_ERROR("setCurrentPos: 无法将player转换为VideoPlayer");
  181. return;
  182. }
  183. videoPlayer->setCurrentPos(pos);
  184. }
  185. /* 设置播放视频窗口的大小 */
  186. Q_DECL_EXPORT void setPlayWidgetSize(QObject* player, int width,int height)
  187. {
  188. if(player == nullptr)
  189. {
  190. SPDLOG_ERROR("setPlayWidgetSize: 传入的player为空指针");
  191. return;
  192. }
  193. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  194. if(videoPlayer == nullptr)
  195. {
  196. SPDLOG_ERROR("setPlayWidgetSize: 无法将player转换为VideoPlayer");
  197. return;
  198. }
  199. videoPlayer->setPlayWidgetSize(width, height);
  200. }
  201. /* 设置播放窗口 */
  202. Q_DECL_EXPORT void setWidgetParent(QObject* player, QWidget* widget, bool isFull)
  203. {
  204. if(player == nullptr)
  205. {
  206. SPDLOG_ERROR("setWidgetParent: 传入的player为空指针");
  207. return;
  208. }
  209. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  210. if(videoPlayer == nullptr)
  211. {
  212. SPDLOG_ERROR("setWidgetParent: 无法将player转换为VideoPlayer");
  213. return;
  214. }
  215. videoPlayer->setWidgetParent(widget, isFull);
  216. }
  217. /* 获取播放窗口的指针 */
  218. Q_DECL_EXPORT QWidget* getPlayWidget(QObject* player)
  219. {
  220. if(player == nullptr)
  221. {
  222. SPDLOG_ERROR("getPlayWidget: 传入的player为空指针");
  223. return nullptr;
  224. }
  225. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  226. if(videoPlayer == nullptr)
  227. {
  228. SPDLOG_ERROR("getPlayWidget: 无法将player转换为VideoPlayer");
  229. return nullptr;
  230. }
  231. return videoPlayer->getPlayWidget();
  232. }
  233. /* 设置预览图片数目,在暂停时跳转,可能会有花屏或者黑帧,可以设置跳转图片个数跳过黑帧 */
  234. Q_DECL_EXPORT void setPreviewImage(QObject* player, int num)
  235. {
  236. if(player == nullptr)
  237. {
  238. SPDLOG_ERROR("setPreviewImage: 传入的player为空指针");
  239. return;
  240. }
  241. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  242. if(videoPlayer == nullptr)
  243. {
  244. SPDLOG_ERROR("setPreviewImage: 无法将player转换为VideoPlayer");
  245. return;
  246. }
  247. videoPlayer->setPreviewImage(num);
  248. }
  249. /* 设置播放速度 */
  250. Q_DECL_EXPORT void setPlaySpeed(QObject* player, float speed)
  251. {
  252. if(player == nullptr)
  253. {
  254. SPDLOG_ERROR("setPlaySpeed: 传入的player为空指针");
  255. return;
  256. }
  257. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  258. if(videoPlayer == nullptr)
  259. {
  260. SPDLOG_ERROR("setPlaySpeed: 无法将player转换为VideoPlayer");
  261. return;
  262. }
  263. videoPlayer->setPlaySpeed(speed);
  264. }
  265. /* 创建一个IVideoPlayer */
  266. Q_DECL_EXPORT IVideoPlayer* createVideoPlayer()
  267. {
  268. return new VideoPlayer();
  269. }
  270. /* 销毁一个IVideoPlayer */
  271. Q_DECL_EXPORT void destroyVideoPlayer(IVideoPlayer* player)
  272. {
  273. if(player != nullptr)
  274. {
  275. VideoPlayer* videoPlayer = qobject_cast<VideoPlayer*>(player);
  276. if(videoPlayer != nullptr)
  277. {
  278. delete videoPlayer;
  279. videoPlayer = nullptr;
  280. player = nullptr; // 确保指针不再指向已删除的对象
  281. }
  282. } else
  283. {
  284. SPDLOG_WARN("destroyVideoPlayer: 传入的player为空指针");
  285. }
  286. }