朕的 发表于 前天 16:05

孤独靖仇 发表于 2025-10-30 16:02
你说的方法我试过!我这个方法更好!比如如果按你的方法走!比如我在主窗口控制窗口1中的MPV和窗口2的MPV   ...

你这个要每个都单独创建变量,有点不是很方便,感觉。
这个是我改了一下的代码:
<火山程序 类型 = "通常" 版本 = 1 />

包 火山.MPV播放器 <@视窗.外部头文件 = "MPV\\mpv\\render.h" @视窗.外部头文件 = "MPV\\mpv\\MPVExports.h"
      @视窗.外部头文件 = "MPV\\mpv\\MpvCore.h" @视窗.外部源文件 = "MPV\\mpv\\MPVExports.cpp"
      @视窗.外部源文件 = "MPV\\mpv\\MpvCore.cpp" @视窗.头文件搜寻目录 = "MPV\\mpv\\" @视窗.附属文件 = "MPV\\libs\\libmpv-2.dll"
      @视窗.外部库.x64 = "MPV\\libs\\mpv.lib" @输出名 = "MPVPlay">

类 MPV播放器 <公开 @输出名 = "MPV_play">
{
    变量 本对象实例ID <类型 = 变整数 注释 = "内部:实例对象播放器实例ID">

    方法 对象实例ID <公开 属性读 类型 = 变整数 注释 = "实例对象播放器实例ID">
    {
      返回 (本对象实例ID)
    }

    方法 对象实例ID <公开 属性写 注释 = "实例对象播放器实例ID">
    参数 实例ID <类型 = 变整数>
    {
      本对象实例ID = 实例ID
    }

    #

    方法 初始化内部 <类型 = 变整数 注释 = "初始化MPV播放器实例 - 创建并初始化一个新的MPV播放器实例" 注释 = "参数 窗口句柄: 用于显示视频的窗口句柄,必须是有效的窗口句柄"
            注释 = "参数 解码模式: 视频解码模式,0=自动选择(推荐),1=强制硬件解码,2=强制软件解码" 注释 = "注意: 每个窗口句柄只能创建一个播放器实例,重复创建会失败"
            注释 = "注意: 硬件解码需要显卡支持,如果失败会自动回退到软件解码" 返回值注释 = "成功返回实例ID(大于0),失败返回0" @禁止流程检查 = 真>
    参数 窗口句柄 <类型 = 变整数 注释 = "用于显示视频的窗口句柄,必须是有效的窗口句柄">
    参数 解码模式 <类型 = 整数 注释 = "视频解码模式:0=自动选择(推荐),1=强制硬件解码,2=强制软件解码" @默认值 = 0>
    {
      @ return MPV_CreateInstance((HWND)@<窗口句柄>, @<解码模式>);
    }

    方法 初始化 <公开 类型 = 变整数 注释 = "初始化MPV播放器实例 - 创建并初始化一个新的MPV播放器实例" 注释 = "参数 窗口句柄: 用于显示视频的窗口句柄,必须是有效的窗口句柄"
            注释 = "参数 解码模式: 视频解码模式,0=自动选择(推荐),1=强制硬件解码,2=强制软件解码" 注释 = "注意: 每个窗口句柄只能创建一个播放器实例,重复创建会失败"
            注释 = "注意: 硬件解码需要显卡支持,如果失败会自动回退到软件解码" 返回值注释 = "成功返回实例ID(大于0),失败返回0" @禁止流程检查 = 真>
    参数 窗口句柄 <类型 = 变整数 注释 = "用于显示视频的窗口句柄,必须是有效的窗口句柄">
    参数 解码模式 <类型 = 整数 注释 = "视频解码模式:0=自动选择(推荐),1=强制硬件解码,2=强制软件解码" @默认值 = 0>
    {
      对象实例ID = 初始化内部 (窗口句柄, 解码模式)
      返回 (对象实例ID)
    }

    方法 清理 <公开 类型 = 文本型 注释 = "清理MPV播放器实例 - 销毁指定的MPV播放器实例并释放所有资源"
            注释 = "参数 实例ID: 要销毁的播放器实例ID,必须是通过初始化方法成功创建的实例ID" 注释 = "注意: 调用此方法后,实例ID将失效,不能再用于任何操作"
            注释 = "注意: 建议在窗口关闭前或不再需要播放器时调用此方法清理资源"
            注释 = "返回值格式: status:success|action:instance_destroyed 或 status:failed|error:错误信息"
            返回值注释 = "返回操作状态信息,包含成功或失败的具体原因" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "要销毁的播放器实例ID,必须是通过初始化方法成功创建的实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }
      @ return MPV_DestroyInstance(@<实例ID>);
    }

    方法 取实例状态 <公开 类型 = 文本型 注释 = "取实例状态 - 获取指定播放器实例的当前状态信息" 注释 = "参数 实例ID: 要查询状态的播放器实例ID"
            注释 = "返回值包含实例的初始化状态、渲染模式、硬件解码状态等信息"
            注释 = "典型返回值: status:success|api:opengl|hwdec:auto 或 status:failed|error:错误信息"
            注释 = "注意: 此方法主要用于调试和状态监控" 返回值注释 = "返回实例的详细状态信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "要查询状态的播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetInstanceStatus(@<实例ID>);
    }

    方法 验证实例 <公开 类型 = 逻辑型 注释 = "验证实例有效性 - 检查指定的播放器实例ID是否有效且可用" 注释 = "参数 实例ID: 要验证的播放器实例ID"
            注释 = "注意: 实例可能因为各种原因失效(如窗口关闭、资源释放等)" 注释 = "注意: 在调用其他方法前建议先验证实例有效性,避免操作无效实例" 返回值注释 = "实例有效返回真,无效返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "要验证的播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_ValidateInstance(@<实例ID>);
    }

    方法 加载文件 <公开 类型 = 文本型 注释 = "加载媒体文件 - 加载指定的媒体文件到播放器" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 文件路径: 要加载的媒体文件路径,支持本地文件和网络URL" 注释 = "支持格式: MP4, AVI, MKV, FLV, WebM, MP3, WAV等主流音视频格式"
            注释 = "网络支持: HTTP, HTTPS, RTMP, RTSP等流媒体协议" 注释 = "注意: 文件路径必须是完整路径,支持中文字符"
            注释 = "注意: 加载网络文件需要设置合适的网络超时时间"
            注释 = "返回值格式: status:success|action:file_loaded 或 status:failed|error:错误信息" 返回值注释 = "返回文件加载状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 文件路径 <类型 = 文本型 注释 = "要加载的媒体文件路径,支持本地文件和网络URL">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_LoadFile(@<实例ID>, @<文件路径>);
    }

    方法 播放 <公开 类型 = 文本型 注释 = "开始播放 - 开始播放当前加载的媒体文件" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "注意: 需要先成功加载媒体文件,否则播放会失败"
            注释 = "注意: 如果当前处于暂停状态,此方法会从暂停位置继续播放" 注释 = "注意: 如果当前正在播放,调用此方法无效果"
            注释 = "返回值格式: status:success|action:playing 或 status:failed|error:错误信息" 返回值注释 = "返回播放操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_Play(@<实例ID>);
    }

    方法 暂停 <公开 类型 = 文本型 注释 = "暂停播放 - 暂停当前正在播放的媒体" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "注意: 如果当前已经暂停,调用此方法无效果"
            注释 = "注意: 暂停后可以通过播放方法继续播放" 注释 = "返回值格式: status:success|action:paused 或 status:failed|error:错误信息"
            返回值注释 = "返回暂停操作状态信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      @ return MPV_Pause(@<实例ID>);
    }

    方法 停止 <公开 类型 = 文本型 注释 = "停止播放 - 停止当前播放并重置播放状态" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "注意: 停止后会重置播放位置到开头,需要重新加载文件才能再次播放" 注释 = "注意: 与暂停不同,停止会释放当前的媒体资源"
            注释 = "返回值格式: status:success|action:stopped 或 status:failed|error:错误信息" 返回值注释 = "返回停止操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_Stop(@<实例ID>);
    }

    方法 步进向前 <公开 类型 = 文本型 注释 = "步进向前 - 向前跳转指定的时间(默认5秒)" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "跳转距离: 固定向前跳转5秒"
            注释 = "注意: 跳转后会自动继续播放" 注释 = "注意: 如果跳转后超过文件末尾,会停止播放"
            注释 = "返回值格式: status:success|action:stepped_forward 或 status:failed|error:错误信息" 返回值注释 = "返回步进操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_StepForward(@<实例ID>);
    }

    方法 步进向后 <公开 类型 = 文本型 注释 = "步进向后 - 向后跳转指定的时间(默认5秒)" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "跳转距离: 固定向后跳转5秒"
            注释 = "注意: 跳转后会自动继续播放" 注释 = "注意: 如果跳转后小于文件开头,会从开头开始播放"
            注释 = "返回值格式: status:success|action:stepped_backward 或 status:failed|error:错误信息" 返回值注释 = "返回步进操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_StepBackward(@<实例ID>);
    }

    方法 逐帧前进 <公开 类型 = 文本型 注释 = "逐帧前进 - 向前移动一帧画面" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "注意: 此方法主要用于视频分析和精确的画面定位"
            注释 = "注意: 逐帧前进后播放器会处于暂停状态,需要手动继续播放" 注释 = "注意: 对音频文件调用此方法可能无效果"
            注释 = "返回值格式: status:success|action:frame_stepped 或 status:failed|error:错误信息" 返回值注释 = "返回逐帧操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_FrameStep(@<实例ID>);
    }

    方法 逐帧后退 <公开 类型 = 文本型 注释 = "逐帧后退 - 向后移动一帧画面" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "注意: 此方法主要用于视频分析和精确的画面定位"
            注释 = "注意: 逐帧后退后播放器会处于暂停状态,需要手动继续播放" 注释 = "注意: 对音频文件调用此方法可能无效果" 注释 = "注意: 不是所有视频格式都支持向后逐帧"
            注释 = "返回值格式: status:success|action:frame_back_stepped 或 status:failed|error:错误信息"
            返回值注释 = "返回逐帧操作状态信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_FrameBackStep(@<实例ID>);
    }

    方法 取播放时间 <公开 类型 = 小数 注释 = "取播放时间 - 获取当前的播放位置时间(单位:秒)" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 当前播放位置的时间,从文件开头计算的秒数" 注释 = "注意: 如果未加载文件或获取失败,返回-1.0" 注释 = "注意: 返回值是浮点数,包含小数部分,可用于精确时间显示"
            返回值注释 = "成功返回当前播放时间(秒),失败返回-1.0" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetPlaybackTime(@<实例ID>);
    }

    方法 取总时长 <公开 类型 = 小数 注释 = "取总时长 - 获取当前加载媒体的总时长(单位:秒)" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 媒体文件的总时长,单位秒"
            注释 = "注意: 如果未加载文件或获取失败,返回-1.0" 注释 = "注意: 对于直播流等无限长度的媒体,可能返回0或特定值" 注释 = "注意: 某些网络流媒体可能无法准确获取总时长"
            返回值注释 = "成功返回媒体总时长(秒),失败返回-1.0" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetTotalDuration(@<实例ID>);
    }

    方法 跳转 <公开 类型 = 逻辑型 注释 = "跳转到指定时间 - 跳转到媒体的指定时间位置" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 目标时间: 要跳转到的目标时间,单位秒"
            注释 = "跳转方式: 绝对时间跳转,从文件开头计算" 注释 = "注意: 目标时间应该在0到总时长之间,超出范围可能被自动修正" 注释 = "注意: 跳转后会自动继续播放,除非当前处于暂停状态"
            注释 = "注意: 对于网络流媒体,跳转可能需要缓冲时间" 返回值注释 = "跳转成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 目标时间 <类型 = 小数 注释 = "要跳转到的目标时间,单位秒,范围0-总时长">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_Seek(@<实例ID>, @<目标时间>);
    }

    方法 跳转百分比 <公开 类型 = 逻辑型 注释 = "按百分比跳转 - 按百分比跳转到媒体的指定位置" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 百分比: 跳转位置百分比,0-100之间" 注释 = "跳转计算: 目标时间 = 总时长 × 百分比 ÷ 100" 注释 = "注意: 百分比应该在0-100之间,超出范围会返回失败"
            注释 = "注意: 需要先成功获取总时长,否则跳转会失败" 注释 = "注意: 跳转后会自动继续播放,除非当前处于暂停状态" 返回值注释 = "跳转成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 百分比 <类型 = 小数 注释 = "跳转位置百分比,0-100之间">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SeekPercentage(@<实例ID>, @<百分比>);
    }

    方法 跳转章节 <公开 类型 = 逻辑型 注释 = "跳转到指定章节 - 跳转到媒体的指定章节" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 章节索引: 要跳转到的章节索引,从0开始"
            注释 = "注意: 需要媒体文件包含章节信息,否则跳转会失败" 注释 = "注意: 可以使用取章节数量方法检查是否有章节" 注释 = "注意: 章节索引从0开始,最大值为章节数量-1"
            注释 = "注意: 跳转后会自动继续播放,除非当前处于暂停状态" 返回值注释 = "跳转成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 章节索引 <类型 = 整数 注释 = "要跳转到的章节索引,从0开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SeekChapter(@<实例ID>, @<章节索引>);
    }

    方法 置音量 <公开 类型 = 逻辑型 注释 = "设置音量 - 设置播放器的输出音量" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 音量: 音量大小,0-100之间,0为静音,100为最大音量" 注释 = "注意: 音量设置是立即生效的" 注释 = "注意: 音量值与系统音量是独立的,只影响当前播放器"
            注释 = "注意: 即使设置了音量,如果系统静音仍然听不到声音" 注释 = "注意: 某些音频格式可能对音量变化不敏感" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 音量 <类型 = 整数 注释 = "音量大小,0-100之间,0为静音,100为最大音量">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetVolume(@<实例ID>, @<音量>);
    }

    方法 取音量 <公开 类型 = 整数 注释 = "取当前音量 - 获取播放器的当前音量设置" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 当前音量值,0-100之间"
            注释 = "注意: 返回的是设置的音量值,不是实际输出音量" 注释 = "注意: 如果获取失败,返回默认值50" 注释 = "注意: 即使返回成功值,也可能因为静音而听不到声音"
            返回值注释 = "成功返回当前音量值(0-100),失败返回-1" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVolume(@<实例ID>);
    }

    方法 置静音 <公开 类型 = 逻辑型 注释 = "设置静音状态 - 设置或取消播放器的静音状态" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 静音: 是否静音,真=静音,假=取消静音" 注释 = "注意: 静音状态与音量设置是独立的" 注释 = "注意: 即使音量不为0,静音状态下也听不到声音"
            注释 = "注意: 取消静音后恢复之前的音量设置" 注释 = "注意: 静音状态变化是立即生效的" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 静音 <类型 = 逻辑型 注释 = "是否静音,真=静音,假=取消静音">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetMute(@<实例ID>, @<静音>);
    }

    方法 取静音 <公开 类型 = 逻辑型 注释 = "取静音状态 - 获取播放器的当前静音状态" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 当前静音状态,真=静音中,假=非静音"
            注释 = "注意: 即使返回非静音,也可能因为音量为0而听不到声音" 注释 = "注意: 如果获取失败,返回默认值假" 返回值注释 = "静音状态返回真,非静音返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetMute(@<实例ID>);
    }

    方法 置音频延迟 <公开 类型 = 逻辑型 注释 = "设置音频延迟 - 设置音频相对于视频的延迟时间" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 延迟: 音频延迟时间,单位秒,正数表示音频延迟,负数表示音频提前" 注释 = "应用场景: 用于调整音视频同步问题" 注释 = "典型值: 一般调整范围在-1.0到+1.0秒之间"
            注释 = "注意: 设置后立即生效,影响后续播放" 注释 = "注意: 某些音频格式可能不支持延迟调整" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 延迟 <类型 = 小数 注释 = "音频延迟时间,单位秒,正数=音频延迟,负数=音频提前">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetAudioDelay(@<实例ID>, @<延迟>);
    }

    方法 取音频延迟 <公开 类型 = 小数 注释 = "取音频延迟 - 获取当前设置的音频延迟时间" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 当前音频延迟时间,单位秒"
            注释 = "注意: 返回值为0表示无延迟" 注释 = "注意: 如果获取失败,返回默认值0.0" 注释 = "注意: 返回值反映的是设置值,不是实际播放时的精确延迟"
            返回值注释 = "成功返回音频延迟时间(秒),失败返回0.0" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      @ return MPV_GetAudioDelay(@<实例ID>);
    }

    方法 置音频均衡器 <公开 类型 = 逻辑型 注释 = "设置音频均衡器 - 设置音频均衡器参数" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 均衡器预设: 均衡器预设字符串,支持lavfi过滤器语法"
            注释 = "示例: equalizer=f=1000:width_type=h:width=1000:g=5 表示1kHz处提升5dB"
            注释 = "复杂示例: equalizer=f=100:width_type=h:width=100:g=2,equalizer=f=1000:width_type=h:width=1000:g=-3"
            注释 = "注意: 需要了解lavfi过滤器语法才能正确使用" 注释 = "注意: 设置失败可能因为语法错误或不受支持的参数" 注释 = "注意: 均衡器设置会增加CPU使用率"
            返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 均衡器预设 <类型 = 文本型 注释 = "均衡器预设字符串,支持lavfi过滤器语法">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetAudioEqualizer(@<实例ID>, @<均衡器预设>);
    }

    方法 轮询事件 <公开 类型 = 文本型 注释 = "轮询事件 - 获取播放器的当前状态和事件信息" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 包含播放状态、时间信息、音量、尺寸等综合信息的字符串"
            注释 = "返回格式: 键值对形式,用|分隔,如 status:success|播放状态:0|当前播放时间:125.50|..."
            注释 = "包含信息: 播放状态(0=播放,1=暂停,2=停止)、当前时间、总时长、音量、静音状态、播放速度、视频尺寸等"
            注释 = "事件列表: 包含最近发生的MPV事件,如文件加载、跳转、重新配置等" 注释 = "注意: 建议定时调用此方法更新UI状态(如进度条、时间显示等)"
            注释 = "注意: 调用此方法会清空事件队列,每个事件只会报告一次" 返回值注释 = "返回综合状态信息字符串" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PollEvents(@<实例ID>);
    }

    方法 是否在播放 <公开 类型 = 逻辑型 注释 = "检查播放状态 - 检查播放器是否正在播放" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 真=正在播放,假=未播放(暂停或停止)" 注释 = "注意: 此方法只检查播放/暂停状态,不检查是否加载了文件" 注释 = "注意: 如果文件播放完毕,此方法也会返回假"
            注释 = "注意: 对于网络流媒体,缓冲时可能返回播放状态" 返回值注释 = "正在播放返回真,否则返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_IsPlaying(@<实例ID>);
    }

    方法 是否暂停 <公开 类型 = 逻辑型 注释 = "检查暂停状态 - 检查播放器是否处于暂停状态" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 真=已暂停,假=未暂停(播放或停止)" 注释 = "注意: 停止状态也会返回假,因为停止不是暂停" 注释 = "注意: 刚加载文件时默认是暂停状态,需要调用播放方法开始播放"
            注释 = "注意: 文件播放完毕时返回假,不是暂停状态" 返回值注释 = "已暂停返回真,否则返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_IsPaused(@<实例ID>);
    }

    方法 是否在跳转 <公开 类型 = 逻辑型 注释 = "检查跳转状态 - 检查播放器是否正在执行跳转操作" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 真=正在跳转,假=未跳转"
            注释 = "应用场景: 用于在跳转期间显示加载状态或禁用控件" 注释 = "注意: 跳转包括时间跳转、章节跳转等各种位置变更" 注释 = "注意: 对于网络流媒体,跳转可能需要较长时间"
            注释 = "注意: 跳转期间视频可能会卡顿或显示空白" 返回值注释 = "正在跳转返回真,否则返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_IsSeeking(@<实例ID>);
    }

    方法 是否文件结束 <公开 类型 = 逻辑型 注释 = "检查文件结束 - 检查是否已播放到文件末尾" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 真=已到文件末尾,假=未到末尾"
            注释 = "注意: 文件结束后播放器会自动进入暂停或停止状态" 注释 = "注意: 对于直播流等无限长度媒体,此方法可能始终返回假"
            注释 = "注意: 循环播放模式下,文件结束后会重新开始,此方法可能不会返回真" 注释 = "应用场景: 用于自动播放下一集或显示播放完成提示" 返回值注释 = "文件结束返回真,否则返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_IsEOF(@<实例ID>);
    }

    方法 播放列表下一曲 <公开 类型 = 文本型 注释 = "播放列表下一曲 - 切换到播放列表中的下一个项目" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "注意: 需要播放列表中有多个项目,否则操作无效" 注释 = "注意: 如果当前是最后一个项目,可能会循环到第一个项目或停止播放" 注释 = "注意: 切换后会立即开始播放新的项目"
            注释 = "返回值格式: status:success|action:playlist_next 或 status:failed|error:错误信息" 返回值注释 = "返回操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PlaylistNext(@<实例ID>);
    }

    方法 播放列表上一曲 <公开 类型 = 文本型 注释 = "播放列表上一曲 - 切换到播放列表中的上一个项目" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "注意: 需要播放列表中有多个项目,否则操作无效" 注释 = "注意: 如果当前是第一个项目,可能会循环到最后一个项目或停止播放" 注释 = "注意: 切换后会立即开始播放新的项目"
            注释 = "返回值格式: status:success|action:playlist_prev 或 status:failed|error:错误信息" 返回值注释 = "返回操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PlaylistPrev(@<实例ID>);
    }

    方法 播放列表播放指定项 <公开 类型 = 文本型 注释 = "播放列表播放指定项 - 直接播放播放列表中指定索引的项目" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 索引: 要播放的项目在播放列表中的索引位置,从0开始" 注释 = "注意: 索引必须在0到播放列表数量-1的范围内" 注释 = "注意: 如果索引超出范围,操作会失败"
            注释 = "注意: 切换后会立即开始播放指定的项目"
            注释 = "返回值格式: status:success|action:playlist_play_index 或 status:failed|error:错误信息" 返回值注释 = "返回操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 索引 <类型 = 整数 注释 = "要播放的项目在播放列表中的索引位置,从0开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PlaylistPlayIndex(@<实例ID>, @<索引>);
    }

    方法 播放列表清空 <公开 类型 = 文本型 注释 = "播放列表清空 - 清空播放列表中的所有项目" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "注意: 清空播放列表不会停止当前正在播放的项目" 注释 = "注意: 当前播放的项目会继续播放直到结束" 注释 = "注意: 播放列表清空后,播放列表数量方法将返回0"
            注释 = "返回值格式: status:success|action:playlist_cleared 或 status:failed|error:错误信息" 返回值注释 = "返回操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PlaylistClear(@<实例ID>);
    }

    方法 播放列表添加 <公开 类型 = 文本型 注释 = "播放列表添加 - 向播放列表末尾添加一个新的媒体文件" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 文件路径: 要添加到播放列表的媒体文件路径" 注释 = "添加方式: 添加到播放列表末尾" 注释 = "注意: 文件路径必须是有效的媒体文件路径"
            注释 = "注意: 添加成功后,播放列表数量会增加1" 注释 = "注意: 添加操作不会影响当前播放状态"
            注释 = "返回值格式: status:success|action:playlist_added 或 status:failed|error:错误信息" 返回值注释 = "返回操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 文件路径 <类型 = 文本型 注释 = "要添加到播放列表的媒体文件路径">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PlaylistAdd(@<实例ID>, @<文件路径>);
    }

    方法 播放列表删除 <公开 类型 = 文本型 注释 = "播放列表删除 - 从播放列表中删除指定索引的项目" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 索引: 要删除的项目在播放列表中的索引位置,从0开始" 注释 = "注意: 索引必须在0到播放列表数量-1的范围内"
            注释 = "注意: 如果删除的是当前正在播放的项目,播放可能会停止" 注释 = "注意: 删除后播放列表中的后续项目索引会前移"
            注释 = "返回值格式: status:success|action:playlist_removed 或 status:failed|error:错误信息" 返回值注释 = "返回操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 索引 <类型 = 整数 注释 = "要删除的项目在播放列表中的索引位置,从0开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PlaylistRemove(@<实例ID>, @<索引>);
    }

    方法 播放列表随机 <公开 类型 = 文本型 注释 = "播放列表随机 - 随机打乱播放列表中项目的顺序" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "注意: 需要播放列表中有多个项目,否则操作无效" 注释 = "注意: 随机化后当前播放位置可能会改变" 注释 = "注意: 随机化操作不可逆,无法恢复原有顺序"
            注释 = "返回值格式: status:success|action:playlist_shuffled 或 status:failed|error:错误信息" 返回值注释 = "返回操作状态信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_PlaylistShuffle(@<实例ID>);
    }

    方法 取播放列表数量 <公开 类型 = 整数 注释 = "取播放列表数量 - 获取播放列表中项目的总数" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 播放列表中项目的数量,0表示空列表" 注释 = "注意: 只统计成功添加到播放列表的项目" 注释 = "注意: 如果获取失败,返回-1"
            注释 = "注意: 当前播放的项目也包含在数量中" 返回值注释 = "成功返回播放列表项目数量,失败返回-1" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetPlaylistCount(@<实例ID>);
    }

    方法 取播放列表项 <公开 类型 = 文本型 注释 = "取播放列表项 - 获取播放列表中指定索引项目的文件路径" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 索引: 要获取的项目在播放列表中的索引位置,从0开始" 注释 = "返回值: 指定索引位置项目的完整文件路径" 注释 = "注意: 索引必须在0到播放列表数量-1的范围内"
            注释 = "注意: 如果索引超出范围或获取失败,返回错误信息" 注释 = "返回值格式: 文件路径字符串 或 status:failed|error:错误信息"
            返回值注释 = "成功返回文件路径,失败返回错误信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 索引 <类型 = 整数 注释 = "要获取的项目在播放列表中的索引位置,从0开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetPlaylistItem(@<实例ID>, @<索引>);
    }

    方法 置播放速度 <公开 类型 = 逻辑型 注释 = "设置播放速度 - 设置媒体的播放速度倍率" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 速度: 播放速度倍率,必须大于0,1.0为正常速度" 注释 = "速度范围: 建议0.25(1/4倍速)到4.0(4倍速)之间"
            注释 = "应用场景: 快速浏览、慢速学习、语音变速等" 注释 = "注意: 速度设置会影响音频和视频的播放" 注释 = "注意: 极端的速度值可能导致音视频不同步或播放异常"
            注释 = "注意: 速度变化是立即生效的" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 速度 <类型 = 小数 注释 = "播放速度倍率,必须大于0,1.0为正常速度">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetPlaybackSpeed(@<实例ID>, @<速度>);
    }

    方法 取播放速度 <公开 类型 = 小数 注释 = "取播放速度 - 获取当前的播放速度倍率" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 当前播放速度倍率,1.0为正常速度"
            注释 = "注意: 如果获取失败,返回默认值1.0" 注释 = "注意: 返回值是浮点数,包含小数部分" 注释 = "注意: 某些特殊情况下实际播放速度可能与设置值有微小差异"
            返回值注释 = "成功返回当前播放速度倍率,失败返回1.0" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetPlaybackSpeed(@<实例ID>);
    }

    方法 置循环播放 <公开 类型 = 逻辑型 注释 = "设置循环播放 - 设置是否循环播放当前文件" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 是否循环: 是否循环播放,真=循环播放,假=不循环" 注释 = "循环方式: 文件播放完毕后自动从头开始重新播放" 注释 = "应用场景: 背景音乐、宣传视频、展示循环等"
            注释 = "注意: 循环播放只影响当前文件,不影响播放列表" 注释 = "注意: 设置后立即生效,影响后续播放" 注释 = "注意: 循环播放时,文件结束事件可能不会触发"
            返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 是否循环 <类型 = 逻辑型 注释 = "是否循环播放,真=循环播放,假=不循环">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetLoop(@<实例ID>, @<是否循环>);
    }

    方法 取循环播放 <公开 类型 = 逻辑型 注释 = "取循环播放状态 - 获取当前的循环播放设置状态" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 当前循环播放状态,真=循环播放,假=不循环" 注释 = "注意: 如果获取失败,返回默认值假" 注释 = "注意: 返回值反映的是设置状态,不是实际播放行为"
            返回值注释 = "循环播放返回真,不循环返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetLoop(@<实例ID>);
    }

    方法 置文件循环 <公开 类型 = 逻辑型 注释 = "设置文件循环范围 - 设置文件中特定的循环时间段" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 循环范围: 循环时间段描述字符串,支持AB循环点格式" 注释 = "格式示例: 10 20 表示从10秒到20秒循环"
            注释 = "格式示例: a 15 b 25 表示设置A点为15秒,B点为25秒" 注释 = "清除循环: 使用空字符串或no可以清除循环设置" 注释 = "应用场景: 音乐练习、舞蹈学习、语言重复等"
            注释 = "注意: 需要了解AB循环的语法格式" 注释 = "注意: 循环范围必须在文件时间范围内" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 循环范围 <类型 = 文本型 注释 = "循环时间段描述字符串,支持AB循环点格式">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetLoopFile(@<实例ID>, @<循环范围>);
    }

    方法 置AB循环 <公开 类型 = 逻辑型 注释 = "设置AB循环点 - 设置文件中A点和B点的具体时间位置" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 点A: 循环开始时间点,单位秒" 注释 = "参数 点B: 循环结束时间点,单位秒" 注释 = "循环行为: 播放到B点后自动跳回到A点继续播放"
            注释 = "时间要求: 点A应该小于点B,且都在文件时间范围内" 注释 = "清除循环: 将点A和点B都设置为0可以清除AB循环" 注释 = "应用场景: 精确的学习循环、片段重复播放等"
            注释 = "注意: 设置后立即生效" 注释 = "注意: AB循环与文件循环是同一功能的不同设置方式" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 点A <类型 = 小数 注释 = "循环开始时间点,单位秒">
    参数 点B <类型 = 小数 注释 = "循环结束时间点,单位秒">
    {
      @ return MPV_SetABLoop(@<实例ID>, @<点A>, @<点B>);
    }

    方法 置全屏 <公开 类型 = 逻辑型 注释 = "设置全屏状态 - 设置播放器是否进入全屏模式" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 全屏: 是否全屏,真=进入全屏,假=退出全屏" 注释 = "全屏行为: 视频会占据整个屏幕,隐藏其他窗口元素" 注释 = "退出方式: 可以按ESC键或再次调用此方法退出全屏"
            注释 = "注意: 全屏状态变化可能需要一些时间" 注释 = "注意: 在某些系统上全屏可能不会立即生效" 注释 = "注意: 全屏只影响视频显示,不影响播放控制"
            返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 全屏 <类型 = 逻辑型 注释 = "是否全屏,真=进入全屏,假=退出全屏">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetFullscreen(@<实例ID>, @<全屏>);
    }

    方法 取全屏 <公开 类型 = 逻辑型 注释 = "取全屏状态 - 获取播放器当前的全屏状态" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 当前全屏状态,真=全屏模式,假=窗口模式" 注释 = "注意: 如果获取失败,返回默认值假" 注释 = "注意: 全屏状态可能因为用户操作(如按ESC)而改变"
            注释 = "注意: 返回值反映的是MPV内部的全屏状态" 返回值注释 = "全屏模式返回真,窗口模式返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetFullscreen(@<实例ID>);
    }

    方法 截图 <公开 类型 = 逻辑型 注释 = "截图 - 截取当前视频画面并保存为图片文件" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 文件名: 截图保存的文件路径,支持常见图片格式" 注释 = "支持格式: JPEG, PNG, BMP等主流图片格式" 注释 = "截图内容: 纯视频画面,不包含字幕和OSD元素"
            注释 = "图片质量: 与原视频分辨率相同的无损截图" 注释 = "注意: 文件路径必须包含正确的文件扩展名" 注释 = "注意: 如果文件已存在,可能会被覆盖"
            注释 = "注意: 截图操作需要视频正在播放或有画面显示" 返回值注释 = "截图成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 文件名 <类型 = 文本型 注释 = "截图保存的文件路径,支持常见图片格式">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_TakeScreenshot(@<实例ID>, @<文件名>);
    }

    方法 截图含字幕 <公开 类型 = 逻辑型 注释 = "截图含字幕 - 截取当前视频画面(包含字幕)并保存为图片文件" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 文件名: 截图保存的文件路径,支持常见图片格式" 注释 = "支持格式: JPEG, PNG, BMP等主流图片格式" 注释 = "截图内容: 视频画面加上当前显示的字幕"
            注释 = "应用场景: 制作带字幕的剧照、学习资料等" 注释 = "注意: 文件路径必须包含正确的文件扩展名" 注释 = "注意: 如果文件已存在,可能会被覆盖"
            注释 = "注意: 只有在字幕可见状态下,截图才会包含字幕" 注释 = "注意: 截图操作需要视频正在播放或有画面显示" 返回值注释 = "截图成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 文件名 <类型 = 文本型 注释 = "截图保存的文件路径,支持常见图片格式">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_TakeScreenshotSubtitles(@<实例ID>, @<文件名>);
    }

    方法 置视频旋转 <公开 类型 = 逻辑型 注释 = "设置视频旋转 - 设置视频画面的旋转角度" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 旋转角度: 旋转角度,必须是90的倍数(0,90,180,270)" 注释 = "旋转方向: 正值表示顺时针旋转" 注释 = "应用场景: 纠正方向错误的视频、特殊显示效果等"
            注释 = "注意: 旋转操作会增加CPU/GPU负担" 注释 = "注意: 旋转后视频的宽高比可能会改变" 注释 = "注意: 设置后立即生效,影响后续播放"
            返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 旋转角度 <类型 = 整数 注释 = "旋转角度,必须是90的倍数(0,90,180,270)">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetVideoRotation(@<实例ID>, @<旋转角度>);
    }

    方法 置视频缩放 <公开 类型 = 逻辑型 注释 = "设置视频缩放 - 设置视频画面的缩放比例" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 缩放比例: 缩放比例,1.0为原始大小"
            注释 = "缩放范围: 建议0.1到10.0之间" 注释 = "缩放方式: 等比缩放,保持宽高比不变" 注释 = "应用场景: 放大查看细节、缩小查看全景等"
            注释 = "注意: 缩放操作可能会影响视频质量" 注释 = "注意: 过大的缩放值可能导致画面模糊" 注释 = "注意: 设置后立即生效" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 缩放比例 <类型 = 小数 注释 = "缩放比例,1.0为原始大小">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetVideoScale(@<实例ID>, @<缩放比例>);
    }

    方法 置视频位置 <公开 类型 = 逻辑型 注释 = "设置视频位置 - 设置视频画面在窗口中的显示位置" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 坐标X: 视频画面左上角的X坐标" 注释 = "参数 坐标Y: 视频画面左上角的Y坐标" 注释 = "坐标基准: 以窗口客户区左上角为原点(0,0)"
            注释 = "应用场景: 画中画效果、多视频布局等" 注释 = "注意: 坐标值可以是负数,表示部分画面在窗口外" 注释 = "注意: 需要结合视频缩放一起使用才能看到效果"
            注释 = "注意: 设置后立即生效" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 坐标X <类型 = 整数 注释 = "视频画面左上角的X坐标">
    参数 坐标Y <类型 = 整数 注释 = "视频画面左上角的Y坐标">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetVideoPos(@<实例ID>, @<坐标X>, @<坐标Y>);
    }

    方法 置视频大小 <公开 类型 = 逻辑型 注释 = "设置视频大小 - 设置视频画面的显示尺寸" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 宽度: 视频画面的显示宽度"
            注释 = "参数 高度: 视频画面的显示高度" 注释 = "设置方式: 强制设置视频渲染尺寸" 注释 = "注意: 此设置会覆盖自动缩放和宽高比设置"
            注释 = "注意: 设置的值是逻辑尺寸,实际可能受窗口限制" 注释 = "注意: 设置后立即生效" 注释 = "注意: 不保证所有渲染后端都支持此功能" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 宽度 <类型 = 整数 注释 = "视频画面的显示宽度">
    参数 高度 <类型 = 整数 注释 = "视频画面的显示高度">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetVideoSize(@<实例ID>, @<宽度>, @<高度>);
    }

    方法 置对比度 <公开 类型 = 逻辑型 注释 = "设置对比度 - 设置视频画面的对比度" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 对比度: 对比度值,-100到100之间,0为原始对比度" 注释 = "效果说明: 正值增加对比度,负值减少对比度" 注释 = "应用场景: 调整画面明暗对比,改善视觉效果"
            注释 = "注意: 对比度调整会影响画面细节表现" 注释 = "注意: 极端值可能导致画面过曝或过暗" 注释 = "注意: 设置后立即生效" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 对比度 <类型 = 整数 注释 = "对比度值,-100到100之间,0为原始对比度">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetContrast(@<实例ID>, @<对比度>);
    }

    方法 置亮度 <公开 类型 = 逻辑型 注释 = "设置亮度 - 设置视频画面的亮度" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 亮度: 亮度值,-100到100之间,0为原始亮度"
            注释 = "效果说明: 正值增加亮度,负值减少亮度" 注释 = "应用场景: 调整画面明暗程度,适应不同环境" 注释 = "注意: 亮度调整不会改变画面的对比度"
            注释 = "注意: 极端值可能导致画面过曝或全黑" 注释 = "注意: 设置后立即生效" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 亮度 <类型 = 整数 注释 = "亮度值,-100到100之间,0为原始亮度">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetBrightness(@<实例ID>, @<亮度>);
    }

    方法 置饱和度 <公开 类型 = 逻辑型 注释 = "设置饱和度 - 设置视频画面的色彩饱和度" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 饱和度: 饱和度值,-100到100之间,0为原始饱和度" 注释 = "效果说明: 正值增加色彩鲜艳度,负值减少色彩直到灰度" 注释 = "应用场景: 调整画面色彩强度,创造特殊效果"
            注释 = "注意: 设置为-100时画面变为黑白" 注释 = "注意: 设置后立即生效" 注释 = "注意: 饱和度调整会影响所有颜色" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 饱和度 <类型 = 整数 注释 = "饱和度值,-100到100之间,0为原始饱和度">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSaturation(@<实例ID>, @<饱和度>);
    }

    方法 置伽马值 <公开 类型 = 逻辑型 注释 = "设置伽马值 - 设置视频画面的伽马校正值" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 伽马值: 伽马值,-100到100之间,0为原始伽马" 注释 = "效果说明: 调整画面的中间色调,影响整体色调曲线" 注释 = "应用场景: 专业色彩校正,改善显示效果"
            注释 = "注意: 伽马调整是非线性的色彩变换" 注释 = "注意: 需要一定的色彩知识才能正确使用" 注释 = "注意: 设置后立即生效" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 伽马值 <类型 = 整数 注释 = "伽马值,-100到100之间,0为原始伽马">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetGamma(@<实例ID>, @<伽马值>);
    }

    方法 置色调 <公开 类型 = 逻辑型 注释 = "设置色调 - 设置视频画面的色调(色相)" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 色调: 色调值,-100到100之间,0为原始色调" 注释 = "效果说明: 调整画面的整体色彩倾向" 注释 = "应用场景: 色彩校正,创造特殊色彩效果"
            注释 = "注意: 色调调整会改变所有颜色的色相" 注释 = "注意: 需要一定的色彩知识才能正确使用" 注释 = "注意: 设置后立即生效" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 色调 <类型 = 整数 注释 = "色调值,-100到100之间,0为原始色调">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetHue(@<实例ID>, @<色调>);
    }

    方法 置去交错 <公开 类型 = 逻辑型 注释 = "设置去交错模式 - 设置视频去交错处理模式" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 模式: 去交错模式字符串"
            注释 = "模式选项: no(关闭), yes(自动), auto(自动检测)" 注释 = "模式选项: bob(Bob去交错), weave(Weave去交错)等"
            注释 = "应用场景: 处理隔行扫描视频,消除交错线" 注释 = "注意: 只对隔行扫描视频有效,逐行扫描视频无需去交错" 注释 = "注意: 去交错会增加CPU/GPU负担"
            注释 = "注意: 设置后立即生效" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 模式 <类型 = 文本型 注释 = "去交错模式字符串">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetDeinterlace(@<实例ID>, @<模式>);
    }

    方法 取视频属性 <公开 类型 = 文本型 注释 = "获取视频相关属性用于调试" 注释 = "参数 实例ID: 播放器实例ID" 返回值注释 = "返回视频属性信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVideoProperties(@<实例ID>);
    }

    方法 取视频旋转 <公开 类型 = 整数 注释 = "获取当前视频旋转角度" 注释 = "参数 实例ID: 播放器实例ID" 返回值注释 = "成功返回旋转角度(0,90,180,270),失败返回-1"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVideoRotation(@<实例ID>);
    }

    方法 取视频宽高比 <公开 类型 = 文本型 注释 = "获取当前视频宽高比设置" 注释 = "参数 实例ID: 播放器实例ID" 返回值注释 = "返回宽高比状态信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVideoAspect(@<实例ID>);
    }

    方法 置字幕可见 <公开 类型 = 逻辑型 注释 = "设置字幕可见性 - 设置字幕是否显示" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 可见: 是否显示字幕,真=显示字幕,假=隐藏字幕" 注释 = "控制范围: 影响所有字幕轨道的外部字幕和内嵌字幕" 注释 = "应用场景: 需要时显示字幕,不需要时隐藏"
            注释 = "注意: 设置后立即生效" 注释 = "注意: 隐藏字幕不会卸载字幕文件" 注释 = "注意: 重新显示时会恢复之前的字幕状态" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 可见 <类型 = 逻辑型 注释 = "是否显示字幕,真=显示字幕,假=隐藏字幕">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubVisibility(@<实例ID>, @<可见>);
    }

    方法 取字幕可见 <公开 类型 = 逻辑型 注释 = "取字幕可见状态 - 获取字幕当前的显示状态" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "返回值: 字幕显示状态,真=字幕可见,假=字幕隐藏" 注释 = "注意: 如果获取失败,返回默认值真" 注释 = "注意: 返回值反映的是设置状态,不是实际显示状态"
            注释 = "注意: 即使返回真,也可能因为没有字幕文件而看不到字幕" 返回值注释 = "字幕可见返回真,隐藏返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetSubVisibility(@<实例ID>);
    }

    方法 置字幕延迟 <公开 类型 = 逻辑型 注释 = "设置字幕延迟 - 设置字幕相对于视频的延迟时间" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 延迟: 字幕延迟时间,单位秒,正数表示字幕延迟,负数表示字幕提前" 注释 = "应用场景: 调整字幕与语音的同步" 注释 = "典型值: 一般调整范围在-5.0到+5.0秒之间"
            注释 = "注意: 设置后立即生效,影响后续播放" 注释 = "注意: 延迟调整对所有字幕轨道都有效" 注释 = "注意: 某些特殊格式的字幕可能不支持延迟调整"
            返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 延迟 <类型 = 小数 注释 = "字幕延迟时间,单位秒,正数=字幕延迟,负数=字幕提前">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubDelay(@<实例ID>, @<延迟>);
    }

    方法 取字幕延迟 <公开 类型 = 小数 注释 = "取字幕延迟 - 获取当前设置的字幕延迟时间" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 当前字幕延迟时间,单位秒"
            注释 = "注意: 返回值为0表示无延迟" 注释 = "注意: 如果获取失败,返回默认值0.0" 注释 = "注意: 返回值反映的是设置值,不是实际播放时的精确延迟"
            返回值注释 = "成功返回字幕延迟时间(秒),失败返回0.0" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetSubDelay(@<实例ID>);
    }

    方法 加载字幕 <公开 类型 = 逻辑型 注释 = "加载字幕文件 - 加载外部的字幕文件" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 字幕路径: 字幕文件的路径,支持常见字幕格式"
            注释 = "支持格式: SRT, ASS, SSA, VTT等主流字幕格式" 注释 = "加载方式: 作为外部字幕轨道加载,不影响内嵌字幕" 注释 = "应用场景: 添加外挂字幕、替换原有字幕等"
            注释 = "注意: 字幕文件必须是有效的字幕格式" 注释 = "注意: 可以同时加载多个字幕文件" 注释 = "注意: 加载后需要设置字幕轨道才能显示" 返回值注释 = "加载成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 字幕路径 <类型 = 文本型 注释 = "字幕文件的路径,支持常见字幕格式">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_LoadSubtitle(@<实例ID>, @<字幕路径>);
    }

    方法 移除字幕 <公开 类型 = 逻辑型 注释 = "移除字幕文件 - 移除已加载的外部字幕文件" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 字幕路径: 要移除的字幕文件路径"
            注释 = "移除方式: 根据文件路径匹配移除对应的字幕轨道" 注释 = "应用场景: 清理不再需要的外挂字幕" 注释 = "注意: 只能移除通过加载字幕方法添加的外部字幕"
            注释 = "注意: 不能移除媒体文件内嵌的字幕轨道" 注释 = "注意: 移除后如果该字幕正在显示,显示会停止" 返回值注释 = "移除成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 字幕路径 <类型 = 文本型 注释 = "要移除的字幕文件路径">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_RemoveSubtitle(@<实例ID>, @<字幕路径>);
    }

    方法 置字幕缩放 <公开 类型 = 逻辑型 注释 = "设置字幕缩放 - 设置字幕文字的缩放比例" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 缩放比例: 字幕缩放比例,1.0为原始大小" 注释 = "缩放范围: 建议0.1到10.0之间" 注释 = "缩放方式: 等比缩放,影响所有字幕元素"
            注释 = "应用场景: 调整字幕大小以适应不同分辨率和观看距离" 注释 = "注意: 设置后立即生效" 注释 = "注意: 过大的缩放值可能导致字幕超出屏幕"
            注释 = "注意: 某些字幕格式可能有最小/最大尺寸限制" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 缩放比例 <类型 = 小数 注释 = "字幕缩放比例,1.0为原始大小">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubScale(@<实例ID>, @<缩放比例>);
    }

    方法 置字幕位置 <公开 类型 = 逻辑型 注释 = "设置字幕位置 - 设置字幕在屏幕中的垂直位置" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 位置: 字幕垂直位置,0-100之间" 注释 = "位置说明: 0=屏幕顶部,100=屏幕底部,50=屏幕中间" 注释 = "应用场景: 调整字幕位置避免遮挡重要画面"
            注释 = "注意: 设置后立即生效" 注释 = "注意: 实际位置还受字幕格式和字体大小影响" 注释 = "注意: 某些字幕格式可能有固定的位置设置" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 位置 <类型 = 整数 注释 = "字幕垂直位置,0-100之间">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubPos(@<实例ID>, @<位置>);
    }

    方法 置字幕颜色 <公开 类型 = 逻辑型 注释 = "设置字幕颜色 - 设置字幕文字的颜色" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 颜色: 颜色值字符串,支持多种颜色格式"
            注释 = "颜色格式: #RRGGBB(十六进制), red(颜色名)" 注释 = "颜色格式: rgb(R,G,B), hsl(H,S,L)等" 注释 = "应用场景: 自定义字幕外观,提高可读性"
            注释 = "注意: 设置后立即生效" 注释 = "注意: 某些字幕格式可能覆盖此颜色设置" 注释 = "注意: 需要了解颜色格式语法" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 颜色 <类型 = 文本型 注释 = "颜色值字符串,支持多种颜色格式">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubColor(@<实例ID>, @<颜色>);
    }

    方法 置字幕字体 <公开 类型 = 逻辑型 注释 = "设置字幕字体 - 设置字幕文字的字体" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "参数 字体名称: 字体名称字符串"
            注释 = "字体格式: 系统安装的字体名称,如 微软雅黑, Arial" 注释 = "应用场景: 更改字幕字体,改善可读性或美观性" 注释 = "注意: 字体必须在系统中已安装"
            注释 = "注意: 设置后立即生效" 注释 = "注意: 某些字幕格式可能覆盖此字体设置" 返回值注释 = "设置成功返回真,失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 字体名称 <类型 = 文本型 注释 = "字体名称字符串">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubFont(@<实例ID>, @<字体名称>);
    }

    方法 置字幕字体大小 <公开 类型 = 逻辑型 注释 = "设置字幕字体大小 - 设置字幕文字的字体大小" 注释 = "参数 实例ID: 播放器实例ID"
            注释 = "参数 字体大小: 字体大小,单位取决于字体和渲染设置" 注释 = "大小范围: 建议8到72之间" 注释 = "应用场景: 调整字幕大小以适应不同分辨率和观看距离"
            注释 = "注意: 设置后立即生效" 注释 = "注意: 字体大小设置可能会被字幕缩放覆盖" 注释 = "注意: 某些字幕格式有固定的字体大小" 返回值注释 = "设置成功返回真,失败返回假"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 字体大小 <类型 = 整数 注释 = "字体大小,单位取决于字体和渲染设置">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubFontSize(@<实例ID>, @<字体大小>);
    }

    方法 取字幕文本 <公开 类型 = 文本型 注释 = "取字幕文本 - 获取当前显示的字幕文本内容" 注释 = "参数 实例ID: 播放器实例ID" 注释 = "返回值: 当前正在显示的字幕文本"
            注释 = "应用场景: 字幕提取、实时翻译、字幕分析等" 注释 = "注意: 只有在字幕可见且有字幕显示时才有内容" 注释 = "注意: 返回的是纯文本,不包含格式信息"
            注释 = "注意: 对于ASS/SSA等格式字幕,可能返回处理后的文本" 注释 = "返回值格式: 字幕文本内容 或 status:failed|error:错误信息"
            返回值注释 = "成功返回字幕文本,失败返回错误信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetSubText(@<实例ID>);
    }

    方法 置音频轨道 <公开 类型 = 逻辑型 注释 = "设置音频轨道 - 切换当前使用的音频轨道" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "参数 轨道索引 要切换到的音频轨道索引 从1开始" 注释 = "注意 轨道索引必须存在于当前媒体的音频轨道列表中" 注释 = "注意 切换轨道后可能需要重新缓冲音频数据"
            注释 = "注意 某些媒体文件可能只有一个音频轨道" 注释 = "注意 可以使用取音频轨道列表方法获取所有可用轨道" 返回值注释 = "切换成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 轨道索引 <类型 = 整数 注释 = "要切换到的音频轨道索引 从1开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetAudioTrack(@<实例ID>, @<轨道索引>);
    }

    方法 取音频轨道 <公开 类型 = 整数 注释 = "取当前音频轨道 - 获取当前正在使用的音频轨道索引" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 当前音频轨道索引 从1开始"
            注释 = "注意 如果获取失败 返回默认值1" 注释 = "注意 返回值1表示第一个音频轨道" 注释 = "注意 如果媒体没有音频轨道 返回值可能无效"
            返回值注释 = "成功返回当前音频轨道索引 失败返回1" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetAudioTrack(@<实例ID>);
    }

    方法 取音频轨道列表 <公开 类型 = 文本型 注释 = "取音频轨道列表 - 获取所有可用的音频轨道信息" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "返回值 包含所有音频轨道ID的列表字符串" 注释 = "返回格式 status:success|tracks: 或 status:failed|error:错误信息"
            注释 = "应用场景 显示音频轨道选择菜单 支持多语言音频切换" 注释 = "注意 返回的是轨道ID列表 不是轨道名称" 注释 = "注意 轨道ID从1开始连续编号"
            注释 = "注意 某些媒体文件可能没有音频轨道" 返回值注释 = "返回音频轨道列表信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetAudioTrackList(@<实例ID>);
    }

    方法 置视频轨道 <公开 类型 = 逻辑型 注释 = "设置视频轨道 - 切换当前使用的视频轨道" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "参数 轨道索引 要切换到的视频轨道索引 从1开始" 注释 = "注意 轨道索引必须存在于当前媒体的视频轨道列表中" 注释 = "注意 切换轨道后可能需要重新缓冲视频数据"
            注释 = "注意 某些媒体文件可能只有一个视频轨道" 注释 = "注意 可以使用取视频轨道列表方法获取所有可用轨道" 返回值注释 = "切换成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 轨道索引 <类型 = 整数 注释 = "要切换到的视频轨道索引 从1开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetVideoTrack(@<实例ID>, @<轨道索引>);
    }

    方法 取视频轨道 <公开 类型 = 整数 注释 = "取当前视频轨道 - 获取当前正在使用的视频轨道索引" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 当前视频轨道索引 从1开始"
            注释 = "注意 如果获取失败 返回默认值1" 注释 = "注意 返回值1表示第一个视频轨道" 注释 = "注意 如果媒体没有视频轨道 返回值可能无效"
            返回值注释 = "成功返回当前视频轨道索引 失败返回1" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVideoTrack(@<实例ID>);
    }

    方法 取视频轨道列表 <公开 类型 = 文本型 注释 = "取视频轨道列表 - 获取所有可用的视频轨道信息" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "返回值 包含所有视频轨道ID的列表字符串" 注释 = "返回格式 status:success|tracks: 或 status:failed|error:错误信息"
            注释 = "应用场景 显示视频轨道选择菜单 支持多角度视频切换" 注释 = "注意 返回的是轨道ID列表 不是轨道名称" 注释 = "注意 轨道ID从1开始连续编号"
            注释 = "注意 某些媒体文件可能没有视频轨道" 返回值注释 = "返回视频轨道列表信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVideoTrackList(@<实例ID>);
    }

    方法 置字幕轨道 <公开 类型 = 逻辑型 注释 = "设置字幕轨道 - 切换当前使用的字幕轨道" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "参数 轨道索引 要切换到的字幕轨道索引 从1开始" 注释 = "注意 轨道索引必须存在于当前媒体的字幕轨道列表中" 注释 = "注意 切换轨道后会立即显示新的字幕内容"
            注释 = "注意 某些媒体文件可能没有内嵌字幕轨道" 注释 = "注意 可以使用取字幕轨道列表方法获取所有可用轨道" 注释 = "注意 外部加载的字幕也会出现在轨道列表中"
            返回值注释 = "切换成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 轨道索引 <类型 = 整数 注释 = "要切换到的字幕轨道索引 从1开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetSubTrack(@<实例ID>, @<轨道索引>);
    }

    方法 取字幕轨道 <公开 类型 = 整数 注释 = "取当前字幕轨道 - 获取当前正在使用的字幕轨道索引" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 当前字幕轨道索引 从1开始"
            注释 = "注意 如果获取失败 返回默认值1" 注释 = "注意 返回值1表示第一个字幕轨道" 注释 = "注意 如果媒体没有字幕轨道 返回值可能无效"
            注释 = "注意 返回值0表示没有选择任何字幕轨道" 返回值注释 = "成功返回当前字幕轨道索引 失败返回1" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetSubTrack(@<实例ID>);
    }

    方法 取字幕轨道列表 <公开 类型 = 文本型 注释 = "取字幕轨道列表 - 获取所有可用的字幕轨道信息" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "返回值 包含所有字幕轨道ID的列表字符串" 注释 = "返回格式 status:success|tracks: 或 status:failed|error:错误信息"
            注释 = "应用场景 显示字幕轨道选择菜单 支持多语言字幕切换" 注释 = "注意 返回的是轨道ID列表 不是轨道名称" 注释 = "注意 轨道ID从1开始连续编号"
            注释 = "注意 某些媒体文件可能没有字幕轨道" 注释 = "注意 外部加载的字幕也会包含在列表中" 返回值注释 = "返回字幕轨道列表信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetSubTrackList(@<实例ID>);
    }

    方法 取章节数量 <公开 类型 = 整数 注释 = "取章节数量 - 获取当前媒体的章节总数" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 媒体文件的章节数量 0表示没有章节"
            注释 = "注意 需要媒体文件包含章节信息" 注释 = "注意 如果获取失败 返回-1" 注释 = "注意 章节信息通常存在于DVD、蓝光或特定格式的视频中"
            返回值注释 = "成功返回章节数量 失败返回-1" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetChapterCount(@<实例ID>);
    }

    方法 取章节列表 <公开 类型 = 文本型 注释 = "取章节列表 - 获取所有章节的标题信息" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 包含所有章节标题的列表字符串"
            注释 = "返回格式 status:success|chapters:[章节1,章节2]或 status:failed|error:错误信息"
            注释 = "应用场景 显示章节选择菜单 快速导航到特定章节" 注释 = "注意 需要媒体文件包含章节信息且章节有标题" 注释 = "注意 某些章节可能没有标题 会用空字符串表示"
            注释 = "注意 章节索引从0开始 与章节标题一一对应" 返回值注释 = "返回章节列表信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetChapterList(@<实例ID>);
    }

    方法 置章节 <公开 类型 = 逻辑型 注释 = "设置当前章节 - 跳转到指定的章节" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 章节索引 要跳转到的章节索引 从0开始"
            注释 = "注意 章节索引必须在0到章节数量-1的范围内" 注释 = "注意 需要媒体文件包含章节信息" 注释 = "注意 跳转后会从章节开始位置继续播放"
            注释 = "注意 可以使用取章节数量方法检查是否有章节" 返回值注释 = "跳转成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 章节索引 <类型 = 整数 注释 = "要跳转到的章节索引 从0开始">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetChapter(@<实例ID>, @<章节索引>);
    }

    方法 取当前章节 <公开 类型 = 整数 注释 = "取当前章节 - 获取当前播放位置所在的章节索引" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "返回值 当前章节索引 从0开始 -1表示不在任何章节中" 注释 = "注意 需要媒体文件包含章节信息" 注释 = "注意 如果获取失败 返回-1"
            注释 = "注意 返回值基于当前播放时间点自动计算" 注释 = "注意 如果播放位置在章节之间 可能返回前一个章节索引" 返回值注释 = "成功返回当前章节索引 失败返回-1" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetCurrentChapter(@<实例ID>);
    }

    方法 取媒体信息 <公开 类型 = 文本型 注释 = "取媒体信息 - 获取当前媒体的基本信息" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 包含媒体基本信息的字符串"
            注释 = "返回格式 status:success|duration:3600|width:1920|height:1080 等" 注释 = "包含信息 时长 视频宽度 视频高度等"
            注释 = "应用场景 显示媒体文件的基本属性" 注释 = "注意 需要先成功加载媒体文件" 注释 = "注意 不同媒体文件返回的信息可能不同" 注释 = "注意 某些信息可能无法获取 会省略对应字段"
            返回值注释 = "返回媒体基本信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetMediaInfo(@<实例ID>);
    }

    方法 取视频信息 <公开 类型 = 文本型 注释 = "取视频信息 - 获取当前视频流的详细信息" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 包含视频流详细信息的字符串"
            注释 = "返回格式 status:success|width:1920|height:1080|fps:29.97 等" 注释 = "包含信息 视频宽度 视频高度 帧率 编码格式等"
            注释 = "应用场景 显示视频流的技术参数" 注释 = "注意 需要媒体文件包含视频流" 注释 = "注意 某些信息可能无法获取 会省略对应字段" 注释 = "注意 帧率等信息可能来自容器或视频流本身"
            返回值注释 = "返回视频流详细信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVideoInfo(@<实例ID>);
    }

    方法 取音频信息 <公开 类型 = 文本型 注释 = "取音频信息 - 获取当前音频流的详细信息" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 包含音频流详细信息的字符串"
            注释 = "返回格式 status:success|samplerate:44100|channels:2 等" 注释 = "包含信息 采样率 声道数 编码格式等"
            注释 = "应用场景 显示音频流的技术参数" 注释 = "注意 需要媒体文件包含音频流" 注释 = "注意 某些信息可能无法获取 会省略对应字段"
            注释 = "注意 声道数可能为1(单声道) 2(立体声) 6(5.1)等" 返回值注释 = "返回音频流详细信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetAudioInfo(@<实例ID>);
    }

    方法 取元数据 <公开 类型 = 文本型 注释 = "取元数据 - 获取媒体的元数据信息" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 包含媒体元数据的JSON格式字符串"
            注释 = "返回格式 status:success|metadata:{title:视频标题,artist:作者}" 注释 = "包含信息 标题 作者 专辑 年代 描述等元数据"
            注释 = "应用场景 显示媒体的描述性信息" 注释 = "注意 需要媒体文件包含元数据" 注释 = "注意 不同媒体文件包含的元数据字段不同" 注释 = "注意 某些媒体文件可能没有元数据"
            返回值注释 = "返回媒体元数据信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetMetadata(@<实例ID>);
    }

    方法 添加视频滤镜 <公开 类型 = 逻辑型 注释 = "添加视频滤镜 - 向视频处理管道添加指定的滤镜" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "参数 滤镜名称 要添加的视频滤镜名称或滤镜链" 注释 = "滤镜示例 滤镜示例 hflip 水平翻转 vflip 垂直翻转"
            注释 = "滤镜示例 eq=brightness=0.1 亮度调整" 注释 = "滤镜示例 scale=w=1280:h=720 缩放滤镜" 注释 = "应用场景 实时视频处理 特效添加"
            注释 = "注意 需要了解FFmpeg滤镜语法" 注释 = "注意 滤镜添加会增加CPU/GPU负担" 注释 = "注意 某些复杂滤镜可能需要特定硬件支持"
            返回值注释 = "添加成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 滤镜名称 <类型 = 文本型 注释 = "要添加的视频滤镜名称或滤镜链">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_AddVideoFilter(@<实例ID>, @<滤镜名称>);
    }

    方法 移除视频滤镜 <公开 类型 = 逻辑型 注释 = "移除视频滤镜 - 从视频处理管道移除指定的滤镜" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 滤镜名称 要移除的视频滤镜名称"
            注释 = "注意 滤镜名称必须与添加时使用的名称完全匹配" 注释 = "注意 如果滤镜不存在 移除操作会失败" 注释 = "注意 移除后视频会恢复原始状态"
            注释 = "注意 可以移除通过添加视频滤镜方法添加的滤镜" 返回值注释 = "移除成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 滤镜名称 <类型 = 文本型 注释 = "要移除的视频滤镜名称">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_RemoveVideoFilter(@<实例ID>, @<滤镜名称>);
    }

    方法 添加音频滤镜 <公开 类型 = 逻辑型 注释 = "添加音频滤镜 - 向音频处理管道添加指定的滤镜" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "参数 滤镜名称 要添加的音频滤镜名称或滤镜链" 注释 = "滤镜示例 volume=volume=2.0 音量放大2倍"
            注释 = "滤镜示例 equalizer=f=1000:width_type=h:width=1000:g=5 均衡器" 注释 = "滤镜示例 aresample=osr=44100 重采样"
            注释 = "应用场景 实时音频处理 音效添加" 注释 = "注意 需要了解FFmpeg音频滤镜语法" 注释 = "注意 滤镜添加会增加CPU负担"
            注释 = "注意 某些复杂滤镜可能需要特定音频设备支持" 返回值注释 = "添加成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 滤镜名称 <类型 = 文本型 注释 = "要添加的音频滤镜名称或滤镜链">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_AddAudioFilter(@<实例ID>, @<滤镜名称>);
    }

    方法 移除音频滤镜 <公开 类型 = 逻辑型 注释 = "移除音频滤镜 - 从音频处理管道移除指定的滤镜" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 滤镜名称 要移除的音频滤镜名称"
            注释 = "注意 滤镜名称必须与添加时使用的名称完全匹配" 注释 = "注意 如果滤镜不存在 移除操作会失败" 注释 = "注意 移除后音频会恢复原始状态"
            注释 = "注意 可以移除通过添加音频滤镜方法添加的滤镜" 返回值注释 = "移除成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 滤镜名称 <类型 = 文本型 注释 = "要移除的音频滤镜名称">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_RemoveAudioFilter(@<实例ID>, @<滤镜名称>);
    }

    方法 取视频滤镜 <公开 类型 = 文本型 注释 = "取视频滤镜 - 获取当前应用的视频滤镜列表" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 当前视频滤镜列表字符串"
            注释 = "返回格式 status:success|filters:滤镜列表 或 status:failed|error:错误信息" 注释 = "应用场景 显示当前视频处理状态 滤镜管理"
            注释 = "注意 返回的是当前生效的视频滤镜" 注释 = "注意 如果没有任何视频滤镜 返回空列表" 注释 = "注意 返回的滤镜名称可能与添加时略有不同" 返回值注释 = "返回当前视频滤镜信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetVideoFilters(@<实例ID>);
    }

    方法 取音频滤镜 <公开 类型 = 文本型 注释 = "取音频滤镜 - 获取当前应用的音频滤镜列表" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 当前音频滤镜列表字符串"
            注释 = "返回格式 status:success|filters:滤镜列表 或 status:failed|error:错误信息" 注释 = "应用场景 显示当前音频处理状态 滤镜管理"
            注释 = "注意 返回的是当前生效的音频滤镜" 注释 = "注意 如果没有任何音频滤镜 返回空列表" 注释 = "注意 返回的滤镜名称可能与添加时略有不同" 返回值注释 = "返回当前音频滤镜信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetAudioFilters(@<实例ID>);
    }

    方法 置配置选项 <公开 类型 = 逻辑型 注释 = "设置配置选项 - 设置MPV播放器的配置参数" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 键名称 配置选项的名称"
            注释 = "参数 键值 配置选项的值" 注释 = "配置示例 vo gpu 设置视频输出为GPU" 注释 = "配置示例 hwdec auto 设置硬件解码为自动"
            注释 = "配置示例 profile fast 使用快速解码配置" 注释 = "应用场景 高级播放器配置 性能调优" 注释 = "注意 需要了解MPV配置选项的详细文档"
            注释 = "注意 某些配置选项需要在初始化前设置" 注释 = "注意 错误的配置可能导致播放异常" 返回值注释 = "设置成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 键名称 <类型 = 文本型 注释 = "配置选项的名称">
    参数 键值 <类型 = 文本型 注释 = "配置选项的值">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetConfigOption(@<实例ID>, @<键名称>, @<键值>);
    }

    方法 取配置选项 <公开 类型 = 文本型 注释 = "取配置选项 - 获取指定配置选项的当前值" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 键名称 要查询的配置选项名称"
            注释 = "返回值 配置选项的当前值字符串" 注释 = "返回格式 status:success|value:配置值 或 status:failed|error:错误信息"
            注释 = "应用场景 查询当前播放器配置状态" 注释 = "注意 需要配置选项存在且可读" 注释 = "注意 某些配置选项可能无法读取" 注释 = "注意 返回的值是字符串形式 可能需要转换"
            返回值注释 = "返回配置选项值信息" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 键名称 <类型 = 文本型 注释 = "要查询的配置选项名称">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetConfigOption(@<实例ID>, @<键名称>);
    }

    方法 取性能数据 <公开 类型 = 文本型 注释 = "取性能数据 - 获取播放器的性能统计信息" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 包含性能数据的字符串"
            注释 = "返回格式 status:success|uptime_seconds:3600 等" 注释 = "包含信息 运行时间 缓存状态 解码性能等" 注释 = "应用场景 性能监控 调试分析"
            注释 = "注意 返回的性能数据可能因版本而异" 注释 = "注意 某些性能数据需要特定配置才能收集" 注释 = "注意 性能数据从实例创建开始累计" 返回值注释 = "返回性能数据信息"
            @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetPerformanceData(@<实例ID>);
    }

    方法 置网络超时 <公开 类型 = 逻辑型 注释 = "设置网络超时 - 设置网络操作的超时时间" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 超时秒数 网络超时时间 单位秒"
            注释 = "应用场景 网络流媒体播放 在线视频加载" 注释 = "注意 主要影响网络连接和初始缓冲" 注释 = "注意 设置过小可能导致网络连接失败" 注释 = "注意 设置过大可能导致卡顿时间过长"
            注释 = "注意 对于不稳定的网络环境建议设置较大值" 返回值注释 = "设置成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 超时秒数 <类型 = 整数 注释 = "网络超时时间 单位秒">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetNetworkTimeout(@<实例ID>, @<超时秒数>);
    }

    方法 置缓存大小 <公开 类型 = 逻辑型 注释 = "设置缓存大小 - 设置播放器的缓存大小" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 缓存大小 缓存大小 单位KB"
            注释 = "应用场景 网络流媒体播放 大文件播放" 注释 = "注意 较大的缓存可以减少卡顿但增加内存使用" 注释 = "注意 较小的缓存节省内存但可能增加卡顿"
            注释 = "注意 默认缓存大小通常为50MB左右" 注释 = "注意 设置后对新加载的文件生效" 返回值注释 = "设置成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 缓存大小 <类型 = 整数 注释 = "缓存大小 单位KB">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetCacheSize(@<实例ID>, @<缓存大小>);
    }

    方法 置用户代理 <公开 类型 = 逻辑型 注释 = "设置用户代理 - 设置网络请求的用户代理字符串" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 用户代理 用户代理字符串"
            注释 = "示例 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
            注释 = "应用场景 网络流媒体访问 需要特定用户代理的网站" 注释 = "注意 主要影响HTTPHTTPS请求" 注释 = "注意 某些视频网站需要特定的用户代理才能访问"
            注释 = "注意 设置后对新发起的网络请求生效" 返回值注释 = "设置成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 用户代理 <类型 = 文本型 注释 = "用户代理字符串">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetUserAgent(@<实例ID>, @<用户代理>);
    }

    方法 置来源引用 <公开 类型 = 逻辑型 注释 = "设置来源引用 - 设置网络请求的Referer头信息" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "参数 来源引用 Referer字符串 通常是来源网页的URL" 注释 = "应用场景 网络流媒体访问 防盗链验证" 注释 = "注意 主要影响HTTPHTTPS请求"
            注释 = "注意 某些视频网站需要正确的Referer才能访问" 注释 = "注意 设置后对新发起的网络请求生效" 注释 = "注意 需要遵守目标网站的使用条款"
            返回值注释 = "设置成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 来源引用 <类型 = 文本型 注释 = "Referer字符串 通常是来源网页的URL">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetReferrer(@<实例ID>, @<来源引用>);
    }

    方法 置最大内存使用 <公开 类型 = 逻辑型 注释 = "设置最大内存使用 - 设置播放器的最大内存使用限制" 注释 = "参数 实例ID 播放器实例ID"
            注释 = "参数 最大内存 最大内存使用量 单位MB" 注释 = "应用场景 内存受限环境 多实例同时运行" 注释 = "注意 这是一个软限制 实际使用可能略微超出"
            注释 = "注意 设置过小可能导致播放卡顿或失败" 注释 = "注意 设置过大可能影响系统其他程序" 注释 = "注意 默认情况下MPV会自动管理内存使用"
            返回值注释 = "设置成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 最大内存 <类型 = 整数 注释 = "最大内存使用量 单位MB">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetMaxMemoryUsage(@<实例ID>, @<最大内存>);
    }

    方法 置操作超时 <公开 类型 = 逻辑型 注释 = "设置操作超时 - 设置各种操作的超时时间" 注释 = "参数 实例ID 播放器实例ID" 注释 = "参数 超时毫秒 操作超时时间 单位毫秒"
            注释 = "应用场景 控制各种MPV操作的响应时间" 注释 = "注意 影响命令执行 属性访问等操作" 注释 = "注意 设置过小可能导致操作频繁超时" 注释 = "注意 设置过大可能导致界面无响应"
            注释 = "注意 默认超时时间通常足够大多数操作" 返回值注释 = "设置成功返回真 失败返回假" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    参数 超时毫秒 <类型 = 整数 注释 = "操作超时时间 单位毫秒">
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_SetTimeout(@<实例ID>, @<超时毫秒>);
    }

    方法 取调试信息 <公开 类型 = 文本型 注释 = "取调试信息 - 获取MPV播放器的调试信息" 注释 = "参数 实例ID 播放器实例ID" 注释 = "返回值 包含调试信息的字符串"
            注释 = "应用场景 故障排查 性能分析 开发调试" 注释 = "注意 返回的信息可能包含内部状态和错误详情" 注释 = "注意 调试信息的详细程度可能因版本而异"
            注释 = "注意 某些调试信息可能需要启用特定编译选项" 返回值注释 = "返回调试信息字符串" @禁止流程检查 = 真>
    参数 实例ID <类型 = 变整数 注释 = "播放器实例ID" @默认值 = 0>
    {
      如果真 (实例ID < 1)
      {
            实例ID = 对象实例ID
      }

      @ return MPV_GetDebugInfo(@<实例ID>);
    }

    方法 取事件调试信息 <公开 类型 = 文本型 注释 = "取事件调试信息 - 获取MPV事件系统的调试信息" 注释 = "返回值 包含事件系统调试信息的字符串"
            注释 = "应用场景 事件处理调试 状态监控" 注释 = "注意 返回当前事件队列的状态信息" 注释 = "注意 主要用于开发调试目的" 注释 = "注意 普通用户通常不需要使用此方法"
            返回值注释 = "返回事件调试信息字符串" @禁止流程检查 = 真>
    {
      @ return MPV_GetEventDebugInfo();
    }

    #
}

孤独靖仇 发表于 前天 16:05

朕的 发表于 2025-10-30 14:55
实际效果是没反应

关于全屏这个我在修改!直接弄成占满整个屏幕!正在编写代码!估计晚上就OK了!你在看看其他功能!又BUG就提出来!我毕竟没办法挨个查看!毕竟每个人的思路和使用方法不一样!

朕的 发表于 前天 16:06


朕的 发表于 前天 16:07

本帖最后由 朕的 于 2025-10-30 16:09 编辑

孤独靖仇 发表于 2025-10-30 16:02
你说的方法我试过!我这个方法更好!比如如果按你的方法走!比如我在主窗口控制窗口1中的MPV和窗口2的MPV   ...
我这个方法,一样可以用变量,可用可不用,不需要用对象。这样就不需要每个都必须创建变量了

孤独靖仇 发表于 前天 16:13

朕的 发表于 2025-10-30 16:07
我这个方法,一样可以用变量,可用可不用,不需要用对象。这样就不需要每个都必须创建变量了

...

都说了每个人使用方式不一样!我现在更新后主要更新的是C++实现文件!火山部分可以不变动!现在更新置全屏   我还会再加一个取是否全屏的命令!到时候你就添加一个取是否全屏的方法就好!C++实现直接替换就好!

朕的 发表于 前天 16:17

孤独靖仇 发表于 2025-10-30 16:13
都说了每个人使用方式不一样!我现在更新后主要更新的是C++实现文件!火山部分可以不变动!现在更新置全屏   ...

好的,有什么办法实现两个播放窗口同步吗,播放一样的画面内容保持同步。不知道用两个实例同时操作2个之间会不会有画面延迟

2290576359 发表于 前天 16:19

上个版本改变音量无效,不知道这次修复了没有

孤独靖仇 发表于 前天 16:19

朕的 发表于 2025-10-30 16:17
好的,有什么办法实现两个播放窗口同步吗,播放一样的画面内容保持同步。不知道用两个实例同时操作2个之 ...

这个只能你自己试了!这个MPV组件我加入线程保护了!你尝试一下用一个方法直接线程调用?即使失败按理说应该也不会引起奔溃!最多功能无效!

朕的 发表于 前天 16:27



我直接用的2个,稍微会有点延迟,理论上直接这样用肯定会有,,我看下怎么处理,用线程试试

2290576359 发表于 前天 17:05

置音量没反应,置视频大小 多点几次出现左边顶边位置改变
页: 4 5 6 7 8 9 10 11 12 13 [14] 15
查看完整版本: MPV播放器火山封装库 - 专业媒体播放解决方案