C 插件
本节介绍 mpv 的 C 插件开发。
插件基础
头文件
c
#include <mpv/plugin.h>插件入口
c
// 插件入口点
int mpv_open_cplugin(mpv_handle *ctx) {
// 插件逻辑
return 0;
}插件功能
快捷键绑定
c
// 添加快捷键
mpv_observe_property(ctx, 0, "volume", MPV_FORMAT_INT64, property_change_cb);属性操作
c
// 获取属性
int64_t volume;
mpv_get_property(ctx, "volume", MPV_FORMAT_INT64, &volume);
// 设置属性
int64_t volume = 80;
mpv_set_property(ctx, "volume", MPV_FORMAT_INT64, &volume);命令执行
c
// 执行命令
mpv_command(ctx, (const char*[]){"seek", "10", NULL});插件回调
属性变化回调
c
// 属性变化回调
void property_change_cb(void *data, mpv_event_property *prop) {
if (prop->format == MPV_FORMAT_INT64) {
int64_t value = *(int64_t *)prop->data;
printf("Volume changed: %ld\n", value);
}
}事件回调
c
// 事件回调
mpv_event *event = mpv_wait_event(ctx, 1000);
switch (event->event_id) {
case MPV_EVENT_FILE_LOADED:
printf("File loaded\n");
break;
case MPV_EVENT_END_FILE:
printf("Playback ended\n");
break;
}插件编译
编译选项
bash
# 编译插件
gcc -shared -o plugin.so plugin.c -lmpv
# 链接
gcc -shared -o plugin.so plugin.c $(pkg-config --cflags --libs mpv)CMake 配置
cmake
find_package(PkgConfig)
pkg_check_modules(MPV REQUIRED mpv)
add_library(plugin SHARED plugin.c)
target_link_libraries(plugin ${MPV_LIBRARIES})
target_include_directories(plugin PRIVATE ${MPV_INCLUDE_DIRS})插件加载
加载插件
bash
# 加载插件
mpv --script=plugin.so video.mp4
# 插件目录
~/.config/mpv/scripts/示例插件
简单插件
c
#include <mpv/plugin.h>
#include <stdio.h>
int mpv_open_cplugin(mpv_handle *ctx) {
printf("Plugin loaded\n");
// 添加快捷键
mpv_observe_property(ctx, 0, "volume", MPV_FORMAT_INT64,
[](void *data, mpv_event_property *prop) {
if (prop->format == MPV_FORMAT_INT64) {
int64_t volume = *(int64_t *)prop->data;
printf("Volume: %ld\n", volume);
}
}
);
// 事件循环
while (1) {
mpv_event *event = mpv_wait_event(ctx, 1000);
if (event->event_id == MPV_EVENT_SHUTDOWN)
break;
}
printf("Plugin unloaded\n");
return 0;
}调试
调试信息
c
// 调试信息
printf("Plugin loaded\n");
// 错误处理
int result = mpv_command(ctx, args);
if (result < 0) {
printf("Error: %s\n", mpv_error_string(result));
}插件测试
bash
# 测试插件
mpv --script=plugin.so video.mp4故障排除
常见问题
插件加载失败
- 检查插件路径
- 检查插件权限
插件功能异常
- 检查插件逻辑
- 检查插件回调
插件编译错误
- 检查头文件路径
- 检查链接库
调试命令
bash
# 显示插件信息
mpv --msg-level=all=v video.mp4
# 测试插件
mpv --script=plugin.so video.mp4下一步
- Lua 脚本 - Lua 脚本开发
- JavaScript - JavaScript 脚本开发
- JSON IPC - JSON IPC 接口