一个基于 MPC-BE 播放器开发的网页端控制器,可通过网页界面便捷地操作 MPC-BE 的各项播放控制功能。
注意!MPC-BE的接口没有任何保护,请谨慎开放使用,以免被他人利用漏洞!
如果你想找适用于 MPC-HC 的网页控制器,请转到 MPC-HC 网页控制器
测试时的版本:1.8.9
- 视频预览
- 自动更新的播放状态
- 可拖动进度条
- 片头片尾跳过规则
- 全功能控制按钮
- 可更换控制地址
- 页面颜色模式可切换
- 可自行添加自定义命令
- 支持mediaSession(可以让系统检测到播放)
从 Releases 中下载mpc-be-web-controller.7z文件,解压全部文件至一个文件夹中。
打开MPC-BE,点击查看>选项>Web 接口
打开监听端口,启用预览(如果想在页面内显示画面的话),服务页面来自。
复制刚才解压文件到那个文件夹的路径,粘贴到服务页面来自下的输入框中。
点击“应用”,点在网页浏览器中打开即可看到页面。
注意:即使已经使用web worker来保证页面可以在后台运行(即最小化页面),但各个浏览器的支持却不相同。
本页面的调试均在Firefox上进行。如果后台运行不能正常使用(特别是跳过片头片尾功能),尝试一直保持处于该页面,不要最小化,还是不行的话考虑换个浏览器或在其它设备上尝试!
Warning
如果你使用Edge浏览器,请在浏览器设置中的性能区域:
(以下方法二选一)
- 将页面地址添加到“使这些站点保持活动状态”站点列表中,如:
http://localhost:13579 - 关闭“自动将标签页置于睡眠状态”
以上是防止Edge浏览器会限制后台运行导致一些功能无法使用。如果其它浏览器也出现后台运行无法使用,请参考类似步骤排查,仍有问题请提出issue!
注意:设计之初就是要下载后在本地使用的,能够在线使用风险更高!请自己做好防护!
因MPC-BE自己的服务没有CORS(可在控制台看到相关错误),浏览器会出现同源策略禁止的相关错误,请自己找另外的方法解决CORS才能在线使用
打开在线地址,找到“杂项控制”,填写“控制地址”并设置。
页面底部有[debug]字样是正常的,该设计在本地使用时如果开启了MPC-BE调试信息就会在此显示。但在线使用时MPC-BE无法替换为调试信息。
强烈推荐下载后使用,在线使用方法较为复杂
Warning
如果你使用Edge浏览器,也请按照上面所述步骤进行设置!
所有配置均会保存至LocalStorage中,如想清除所有配置可到“杂项控制”中点击“清除本页LocalStorage”
该功能为实验性功能,各个浏览器兼容性不一致,实际效果会有差别!
实现原理:在index.htmml中添加一个看不见的空白音频在后台播放,引入media.js实现功能,播放控制仍由页面控制,再结合状态接口和mediaSession信息的写入。
该功能默认启用,由于浏览器的限制,使用该功能前必须与页面交互一次(如点击暂停后再播放)才能正常显示媒体控制。
不想使用可以到“杂项控制”,把“禁用媒体控制”的✓变为✕(也就是绿色变红色)
在移动端上会有点问题,如没有上下一个按钮,预览图会一直更新,进度条总时长为0。我也没有好的解决办法,将就着用吧。
该功能会在短时间内大量请求,请合理设置目标帧率。
默认不开启。
原理是请求/snapshot.jpg单帧图片,通过短时间内大量请求实现类似视频播放效果。
通过预览目标帧率可控制请求数量。
播放状态默认实时更新,可通过进度条调节进度。
注意!本功能不是MPC-BE原生支持的,需保持页面打开状态才生效
点击添加规则,输入片头时间,片尾时间,支持下面的时间格式:
- 单时间,如片头结束时间设置为02:32,片尾开始时间设置为25:47,则一开始播放时会直接跳到02:32来跳过片头,播放到25:47直接播放下一文件来跳过片尾。
- 时间区间,如片头时间设置为02:32-05:26,片尾时间设置为25:47-35:12,则播放到02:32(或区间内)会跳到05:26来跳过片头片段,播放到25:47(或区间内)会跳到35:12来跳过片尾片段。
规则按文件夹分类,设置好文件夹的规则后对同文件夹下所有可播放文件有效。
如果想在所有情况下生效,请将文件夹路径留空。
因与程序查询播放进度会有些许延迟,跳过的时间点可能会有1-2秒的误差
MIT
尊重成果,请注意表明来源和署名,不允许将署名抹掉后重新发布!
Respect the results, please be careful to indicate the source and attribution, and republishing after erasing the attribution is not allowed!
能够实现这么多的功能,离不开下面的文件:
https://github.com/Aleksoid1978/MPC-BE/blob/master/src/apps/mplayerc/resource.h
程序源代码中定义的命令ID,有些是无效的。
只选了#define ID_开头的数值当作命令ID
MPC-BE内置的HTML页面
所有可用的命令或方法均来自于此:
/controls.html中的Goto control提供了时间点跳转方法:wm_command=-1&position=00:05:48POST表单到/command.html
/player.html页面提供/snapshot.jpg视频预览帧,同时提供进度条跳转方法:GET方式(好像使用POST表单也行)到/command.html?wm_command=-1&percent=10.3535353535353
/status.html提供播放状态等信息,UTF-8编码,可以通过下面文件:
https://github.com/Aleksoid1978/MPC-BE/blob/master/src/apps/mplayerc/WebClient.cpp
bool CWebClientSocket::OnStatus(CStringA& hdr, CStringA& body, CStringA& mime)部分知道各部分的作用:
OnStatus('title', 'status', pos, 'posstr', dur, 'durstr', IsMuted(), GetVolume(), 'file')
'title':title = m_pMainFrame->GetWindowTextW(title),即MPC-BE 播放器的窗口标题。
'status':当前播放器的播放状态。代码中通过OAFilterState fs判断状态,此处fs = State_Stopped,对应ResStr(IDS_CONTROLS_STOPPED)(资源文件中定义的中文 “已停止”)
pos:当前播放位置的毫秒值。pos = (int)(m_pMainFrame->GetPos()/10000)
'posstr':当前播放位置的直观时间显示。posstr是对pos(毫秒)的格式化时间字符串:posstr.Format(L"%02d:%02d:%02d", (pos/3600000), (pos/60000)%60, (pos/1000)%60);
dur:当前播放文件的总时长毫秒值。dur = (int)(m_pMainFrame->GetDur()/10000)
'durstr':当前播放文件的总时长直观时间显示,格式化规则和posstr一致。
IsMuted():整数 0 表示未静音,1 表示已静音。m_pMainFrame->IsMuted()
GetVolume():播放器的音量值。m_pMainFrame->GetVolume()该值为百分比制,0 为静音,100 为最大音量。
'file':播放的文件的实际存储路径。file = m_pMainFrame->m_wndPlaylistBar.GetCurFileName()
因命令过多,页面只放了一些能用且大概率会用到的按钮,其余的做成了自定义命令。
这些文件不包含在Releases的压缩文件中,自行从仓库获取。
不保证能用,点击自定义命令的导入JSON来添加。
mpc-be-cmds.json:从内置页面的/index.html中提取,去除了已经在页面中的命令。
mpc-be-cmds-define.json:从resource.h中提取#define ID_开头的数值当作命令,去除了已经在页面中,mpc-be-cmds.json中的命令。名称是直接翻译的。
mpc-be-langset.json:MPC-BE软件界面语言。
以下文件为后续更新使用:
mpc-be-define-ID_.txt:当前版本所使用的#define ID_开头的数值。
tools文件夹:辅助工具,只在开发时使用,平常用不到。


