投稿

4月, 2020の投稿を表示しています

Qtでlibmpvでの動画再生

mpvはWindows/MacOS/Linux対応のメディアプレイヤーである SMPlayerなどのバックエンドとして使われるが単体でも再生が可能 そのmpvにはlibmpvというAPIが付属しておりアプリケーション内で再生や制御を行える 今回はこれを使用し動画再生アプリを作成する まずは.proに以下を追加 既にKeyがある場合はそれに追加で QT_CONFIG -= no-pkg-config CONFIG += link_pkgconfig PKGCONFIG += mpv x11 次にmain.cppのQApplicationの宣言の下辺りに以下を追加 setlocale(LC_NUMERIC, "C"); あとはクラスに書いていくのだが mpvで動画を再生するのには再生先(QWidget)が必要となる なのでQWidgetを継承したカスタムクラスの"Player"を作成し、まとめて書いてしまうことにする QtCreator(QtDesigner)で配置した場合はPlayerへの格上げを忘れないように ヘッダには以下のincludeを追加 #include <mpv/client.h> #include <mpv/render.h> #include <mpv/qthelper.hpp> あわせてprivateに以下を追加 mpv_handle *mpvHandle = nullptr; ソースのincludeの下に以下を static void wakeup(void *ctx) {     Player *player = (Player *)ctx;     emit player->mpv_events(); } そして以下を追加しrun_mpv()はPlayerの初期化の際に読み込む(コメントアウト部分は後述) void Player::run_mpv() {     mpvHandle = mpv_create();     if (!mpvHandle)     ...