setlocale(LC_NUMERIC, "C");//必需要有,不然编译不过
mpv_handle *mpv = mpv_create();//创建实例
WId wid=ui->video->winId();
mpv_set_option(mpv,"wid",MPV_FORMAT_INT64,&wid);//设置播放器在哪个控件上显示
// Enable default bindings, because we're lazy. Normally, a player using
// mpv as backend would implement its own key bindings.
mpv_set_option_string(mpv, "input-default-bindings", "no");//设置默认输入键绑定
// // Enable keyboard input on the X11 window. For the messy details, see
// // --input-vo-keyboard on the manpage.
mpv_set_option_string(mpv, "input-vo-keyboard", "no");//设置默认键盘输入键绑定
mpv_set_option_string(mpv, "loop", "yes");//设置播放时循环
if (mpv_initialize(mpv) < 0)//初始化mpv
throw std::runtime_error("mpv failed to initialize");
const char *args[] = {"loadfile", filename.toUtf8().data(), NULL};
mpv_command_async(mpv, 0, args);//播放视频文件
//视频跳转到100s处
double f = 100.0;
QString tmp = QString("+%1").arg(f);
// const char *args[] = {"seek", tmp.toUtf8().constData(), "absolute", NULL};
// const char *args[] = {"seek", tmp.toUtf8().constData(), NULL};
// mpv_command_async(mpv, MPV_REPLY_COMMAND, args);//no work
mpv_set_property_async(mpv, MPV_REPLY_COMMAND, "time-pos", MPV_FORMAT_DOUBLE, &f);//work
我看别的开源播放器使用上面的跳转是可以的,我自己写的例子就不行,而使用第二种time-pos方式却可以,搞不懂。且不能在视频播放时就立马设置,要等一会设置才能生效。
设置暂停
int f = 1;
paused = !paused;
if(!paused)
{
f = 0;
}
mpv_set_property_async(mpv, 0, "pause", MPV_FORMAT_FLAG, &f);
设置静音
int f = 1;
mpv_set_property_async(mpv, MPV_REPLY_PROPERTY, "mute", MPV_FORMAT_FLAG, &f);
取消静音
int f = 0;
mpv_set_property_async(mpv, MPV_REPLY_PROPERTY, "mute", MPV_FORMAT_FLAG, &f);
设置音量
double f = value;
mpv_set_property_async(mpv, MPV_REPLY_PROPERTY, "volume", MPV_FORMAT_DOUBLE, &f);