{"id":21098472,"url":"https://github.com/scarsty/smallpot","last_synced_at":"2025-04-05T02:05:25.256Z","repository":{"id":28850775,"uuid":"32374759","full_name":"scarsty/smallpot","owner":"scarsty","description":"小水壶播放器：一个轻量级播放器","archived":false,"fork":false,"pushed_at":"2025-03-27T02:38:26.000Z","size":3523,"stargazers_count":119,"open_issues_count":14,"forks_count":40,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-27T03:27:48.979Z","etag":null,"topics":["cross-platform","ffmpeg","media-player","sdl2"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scarsty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-03-17T06:06:39.000Z","updated_at":"2025-03-27T02:38:30.000Z","dependencies_parsed_at":"2023-10-12T13:25:53.181Z","dependency_job_id":"23746efd-48b0-4050-938a-b42e80389b04","html_url":"https://github.com/scarsty/smallpot","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scarsty%2Fsmallpot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scarsty%2Fsmallpot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scarsty%2Fsmallpot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scarsty%2Fsmallpot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scarsty","download_url":"https://codeload.github.com/scarsty/smallpot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247276163,"owners_count":20912288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cross-platform","ffmpeg","media-player","sdl2"],"created_at":"2024-11-19T22:55:16.571Z","updated_at":"2025-04-05T02:05:25.225Z","avatar_url":"https://github.com/scarsty.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# smallpot\n\u003cimg src=\"https://raw.githubusercontent.com/scarsty/bigpot/master/logo.png\" width = \"20%\" /\u003e\n\n## 简介\n\nSmallPot是一个轻量级播放器。\n\n该播放器的前身是金庸水浒传的片头动画播放子程。在整个游戏过程中该子程仅被调用了一次，但是为了做好这个部分，开发组使用了FFmpeg进行解码，BASS进行播放，SDL2进行输出，并成功将其移植到了其他平台。因此，金庸水浒传的片头实际支持相当多的格式。而大水壶播放器在设计阶段，也是使用类似的架构，但是在开发阶段发现音频难以控制，因此改为了使用SDL2播放。\n\n而水浒的谐音是水壶，同时新论坛叫大武侠，有个“大”字，所以该播放器起名“大水壶”，英文BigPot。至于跟著名的播放器PotPlayer有没有关系，答案是一点都没有，而且PotPlayer的功能远远强于大水壶，名字有点像只是巧合。\n\n另外据说叫大太嚣张，现在改叫小水壶了。\n\n## 架构\n\n程序语言是C++，使用FFmpeg进行解码，SDL2硬件输出，还有SDL_image、SDL_ttf等库。字幕部分使用libass，该库又依赖Fontconfig、freetype和fribidi。配置文件使用的是ini。\n\n该播放器的架构并未参考其他主流播放器，而是重新设计的单线程预解，原理如下图。在跳转的时候可能会稍慢于其他的主流播放器，但是相差并不明显。\n\n\u003cimg src=\"https://raw.githubusercontent.com/scarsty/smallpot/master/pic/ac.png\" width = \"50%\" /\u003e\n\n## 编译\n\n部分源码在mlcc和kys-cpp（Engine.h和Engine.cpp）中，需同时将这些工程放到同级别的目录。\n\n```shell\ngit clone https://github.com/scarsty/mlcc mlcc\ngit clone https://github.com/scarsty/kys-cpp kys-cpp\n```\n\n其余依赖库包括iconv，ffmpeg，libass，SDL2，SDL2-ttf等，推荐使用系统的包管理工具获取这些库，Windows下推荐使用vcpkg。\n\n\u003chttps://github.com/AutoItConsulting/text-encoding-detect\u003e直接包含代码到工程中。\n\n### Windows\n\n请使用Visual Studio编译。\n若编译为dll，可以嵌入其他程序的窗口播放。特别是基于SDL2的游戏，用法非常简单。\n建议使用vcpkg安装依赖库。\n\n### MacOS\n\n推荐使用homebrew安装依赖库。\n\n使用CMake生成Makefile。\n\n脚本a.sh可以自动编译和处理动态库的依赖修正。\n\n**由于Mac上App目录的参数传递非常SB，目前无法直接打开文件。**\n\n### Linux\n\n与上面方法类似，但是通常不需要打包为app，因此比Mac要简单。\n\n### 单文件版\n\n如果需要编译单文件（全静态链接）版，导入库比动态链接版要多出很多，建议使用vcpkg之类解决。\n\n以下为参考。其中fribidi及以下是动态链接不需要的，winmm.lib及以下是Windows自带的库：\n\n```\nsdl2.lib\nsdl2_ttf.lib\nsdl2_image.lib\nsdl2main.lib\nass.lib\nlibiconv.lib\navutil.lib\navcodec.lib\navformat.lib\nswresample.lib\nswscale.lib\nfribidi.lib\nharfbuzz.lib\nfreetype.lib\nbz2.lib\nlibpng16.lib\nzlib.lib\nlibcharset.lib\nwinmm.lib\nversion.lib\nimm32.lib\nbcrypt.lib\nsecur32.lib\nws2_32.Lib\nmfplat.lib\nmfuuid.lib\nstrmiids.lib\n```\n\n若是需要编译dll文件，用于在其他基于SDL2的游戏中播放视频时，则SmallPot和游戏均不应静态链接SDL。因为SDL的动态库中含有全局变量，多次静态链接后该变量会有多个副本，其中一个很可能是不正确的。\n\n## 使用方法\n\n因为没有制作配置的图形界面，所以仅能将文件拖到图标或者窗口上进行播放，或者设置为文件类型默认的打开方式。\n\n### 支持的格式\n\nFFmpeg能解什么格式它就能放什么格式，FFmpeg不能解的，它也放不出来。而且也不考虑调用其他的解码器，因为作者不会。\n\n特别地，不能播放WAV，以及WAV为音频流的视频文件，因为WAV是没有压缩的，谈不上解码。也不推荐用它播放纯音频，因为它的音频没有经过处理，只是把解码的结果原样放出来，远不及专门的播放器。\n\n### 字幕\n\n打开文件的时候，会先判断有没有字幕，有的话会自动载入。或者播放的时候拖一个字幕进去也会载入字幕，而字幕的扩展名必须是ass、ssa、srt、txt其中之一。其他文件都会当成媒体文件处理，能否播放看解码器的。\n\n查找字幕的方式是先依次将媒体文件的扩展名替换为ass、ssa、srt，并在媒体所在目录下以及subs子目录中寻找，即可以将字幕集中放到subs子目录。\n\n### 字幕的字体文件\n\nlibass的字体文件只能设置一个目录，所以如果字体显示不正常请将其安装进系统。\n\n### 功能键\n\n| 按键               | 功能                   |\n| ------------------ | ---------------------- |\n| 方向左右，鼠标滚轮  | 跳过几秒               |\n| 方向上下             | 音量                   |\n| 空格               | 暂停                   |\n| 回车               | 全屏切换               |\n| 退格               | 回到视频开头           |\n| Delete             | 删除播放记录           |\n| 1                  | 切换音频流             |\n| 2                  | 切换字幕流             |\n| ,(\u003c)               | 上一个文件             |\n| .(\u003e)               | 下一个文件             |\n| 0                  | 窗口大小调整为视频尺寸 |\n| -                  | 减小窗口               |\n| =(+)               | 增大窗口               |\n\n鼠标放在音量时，滚轮可以控制音量。\n\n直接点击音量部分也可以控制音量。\n\n### ini中的设置\n\n| 设置             | 功能                     |\n| ---------------- | ------------------------ |\n| volume           | 音量                     |\n| auto_play_recent | 自动播放上次关闭时的文件 |\n| record_name      | 是否记录文件名           |\n| sys_encode       | 系统字串编码             |\n| ui_font          | 显示界面的字体           |\n| sub_font         | 显示字幕的默认字体       |\n\n## 遗留问题\n\n因为是单线程架构，所以在一些文件跳转时会出现马赛克。一般来说这个可以通过清除解码器状态来解决，但是单线程架构下这个操作会导致后面一帧的解码卡顿，故没有这么做。\n\n通常RM和RMVB，以及从流媒体服务器直接下载的MP4可能有此问题。\n\n## 播放效果\n\n\u003cimg src=\"https://raw.githubusercontent.com/scarsty/smallpot/master/pic/1.png\" width = \"80%\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscarsty%2Fsmallpot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscarsty%2Fsmallpot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscarsty%2Fsmallpot/lists"}