SiliSili

Rating: 
5
Your rating: None Average: 5 (2 votes)

silisili

为 Sailfish OS 重新实现的原生哔哩哔哩客户端,采用 AI 辅助编程,基于大量现有开源项目。

silisili 使用 Qt Quick、Sailfish Silica 和原生 C++ 数据模型重新实现手机端界面与播放链路。当前原生版不再是把电视端 UI 缩放到手机屏幕:页面栈、菜单、对话框、Cover、横竖屏布局、触控手势和后台呈现均按 Sailfish OS 的交互方式设计。

当前原生包仍是开发版本,并非哔哩哔哩官方客户端。接口、清晰度和账号内容会受到登录状态、账号权益、地区与上游服务变化影响。

项目

github:https://github.com/ZeroX-S/silisili/tree/native-pip-overlay

主要功能

浏览与账户

  • 首页推荐、分区排行、番剧/影视、直播列表与连续分页。
  • 视频关键词、标题和 UP 主搜索,支持搜索历史与结果分页。
  • 将视频动态与图文、专栏、转发等非视频动态分开浏览,并可打开动态正文。
  • UP 主空间、头像、投稿和动态;图片请求带正确的来源信息并使用有界缓存,降低头像首次加载失败的概率。
  • 二维码登录。Sailfish OS 5.2+ 运行时优先使用 Amber.Barcode 1.0,5.1 优先使用 QrShareImage 1.0,组件不可用时自动尝试另一实现。
  • 二维码不会因轮询状态自行刷新;只有用户主动刷新或二维码 URL 确实改变时才重建。
  • 历史记录、收藏夹、订阅合集、追番、追剧和稍后再看。
  • 从历史记录进入视频时恢复到已记录位置,播放过程中持续上报进度。
  • 主评论、回复楼层、发布评论、回复、点赞与取消点赞。

视频、番剧与直播

  • 普通视频、番剧/影视、直播和多 P 视频;当前分 P 播放完成后自动续播下一 P。
  • 展示接口实际返回的全部清晰度档位,并按选择的精确 qn 请求 DASH 媒体;清晰度面板可滑动,不会因切换到低清后丢失高画质选项。
  • 画质标签来自实际解析结果。1080P、1080P+ 和高帧率档位仍取决于账号权益及服务端是否返回对应视频轨道。
  • 弹幕分段加载、透明度、字号、速度和安全轨道布局。
  • 播放/暂停、精确跳转、倍速、音量、亮度、进度条与当前/总时长同步。
  • 横竖屏与全屏自适应,保持视频原始比例,不把横屏直播或后续视频过度拉伸。
  • 一个进程级播放会话在详情页、全屏、应用内小窗、Cover 与系统小窗之间复用,切换界面时不重新加载或隐藏定位。

Sailfish OS 集成

  • 使用 ApplicationWindow、PageStack、SilicaListView、PullDownMenu、ContextMenu 和原生 Dialog。
  • 支持 Sailfish 边缘返回、Maliit 输入法、设备方向传感器和前台播放保持亮屏。
  • 后台显示可在“Cover 播放”和“系统小窗播放”之间配置,两种模式不会同时绘制。
  • Cover 在播放时显示实时视频画面;未播放时显示轻量的品牌斜纹背景和状态信息。
  • 系统小窗使用 Lipstick notification 表面:可拖动、记忆位置、跟随设备方向,点按返回播放页;视频之外的透明区域保持点击穿透。
  • 锁屏、熄屏、停止播放或自然播放完成时自动隐藏系统小窗;关闭按钮停止播放并保留足够的触控区域。

兼容性

当前 RPM 仅面向 AArch64 Sailfish OS 设备。

环境当前状态Sailfish OS 5.0.0.62 SDK原生包的最低编译、依赖与 ABI 基线;尚未声明 5.0 真机完整验证Pixel 3a XL / Sailfish OS 5.1.0.11当前完整实机开发和回归环境Sailfish OS 5.2已实现 Amber.Barcode/QrShareImage 运行时兼容;完整设备回归仍需按具体机型执行

硬件解码依赖设备提供可用的 Android 媒体栈、droidmedia 与 libhybris EGL/GLES;硬解条件不满足时由播放器使用软件解码兼容路径。系统 PiP 另行依赖 Lipstick notification 表面和软件包声明的权限,不可用时应选择 Cover。

Screenshots: 
Application versions: 
Changelog: 

SiliSili Native 1.1.0-1.59

自 1.58 以来的完整变更

播放加载与快进定位

  • 当同一媒体轨道的首选地址为 peer/非标准端口时,优先使用接口给出的常规
    HTTPS 备选地址;常规首选保持原样。保留签名、编码、画质和账号策略,
    不通过降低分辨率换取速度,也不改变直播解析。
  • 新定位可以取消过期的 FFmpeg 读取和定位操作;连续拖动按最后目标处理,
    在同一个解复用器/解码器内继续,不把取消误当成播放结束。
  • 目标帧实际进入队列后才确认就绪;定位时释放旧 GPU 槽位并保留共享纹理宿主,
    避免音频已定位、视频仍等待时误触发重建。正常冻结恢复继续保留。

界面数据加载

  • 取消详情页评论等待 3 秒、推荐等待 7 秒,以及逐条延迟显示;详情就绪即请求,
    用有界异步预览分摊界面创建工作,返回页面复用已有或在途请求。
  • 首页、直播、评论/回复、搜索、动态、番剧、个人内容和消息列表统一提前约一屏
    预取,合并滚动/布局通知,支持短页与旋转后的分页;失败后等待明确重试。
  • 推荐/热门保存页面快照与游标,切回分类直接恢复;同一资源刷新保留已有内容,
    账户、分类和收藏夹之间继续隔离数据。
  • UP 空间改为按行插入的虚拟列表,减少追加作品/动态时重建全部卡片的开销。
  • 封面、头像和配图按显示尺寸请求 CDN 缩略图并复用缓存;保留签名 URL、已有
    转换、动画和其他域名,减少正常取消图片请求时的日志开销。

字体、卡片和横屏排版

  • 统一内容字号、1.12 倍行高、截断和文字层级,保留小/中/大三档选择。
  • 修复相关推荐固定行高导致标题、UP 主、播放量与相邻卡片压叠的问题。
  • 列表行按封面和文字的实际高度留白;图片、文字均在整行内对齐。消息按完整
    行数裁切,分集长标题可换行并撑高点击区域。
  • 首页和直播网格按真实字体高度预留文字空间;横屏采用左图右文,保留单/双列
    设置,让标题和作者信息能与封面同时显示。
  • 导航说明和较长正文增加合理换行、宽度边界及间距。布局专项没有改动播放器、
    账户和接口事件处理;本版本同时包含上面列出的已验证播放和加载修改。

构建与验证

  • 新增独立启播/定位计时和界面加载探针,补充 URL 选择、分页及请求去重检查。
  • 在 Pixel 3a XL / Sailfish OS 5.2.0.16 上检查三档字号、横竖屏、单/双列及新截图;
    验证普通启播、暂停/播放中定位、连续拖动、360P/480P/720P/1080P/1080P60 切换。
  • 正式包的问题片源首帧约 1.48 秒,定位约 1.34~1.62 秒;1080P60 参考片源
    首帧约 1.30 秒,定位约 1.95~2.36 秒,连续拖动最后目标约 0.26~0.35 秒。测试以请求/目标帧计时,
    不包含整段应用冷启动,也不是所有片源或网络的速度承诺。
  • 正式包的 1080P60 全屏连续播放超过 60 秒,视频呈现窗口最低约 56.8 FPS,
    无低于 45 FPS 的窗口;正式附件的身份和复测结果见下方发布验证记录。

本附件面向 Sailfish OS 5.1/5.2 AArch64,原生开发包继续标记为 prerelease。
标准 RPM 不适用于 5.0;5.0 仍需独立 SDK 实验包与对应真机验证。
搜索可能受到上游 HTTP 412 限制,本轮未绕过认证或风控;并非所有账号内容接口、
设备及 UHD 解码均已完成实际验证。

SiliSili Native 1.1.0-1.58

自 1.57 以来的完整变更

首页与列表

  • 首页卡片改为静止 350ms 后预取播放地址,不再因创建卡片、按压、滑动或恢复
    前台而启动隐藏视频解码。预取最多并发 2 个请求,缓存最多 16 条、有效期 5 分钟。
  • 修复解码器启动/取消时访问尚未完成初始化的 codec 的竞态。
  • 首页、搜索和直播分页先完成数据、错误和页号更新,再通知加载结束,避免
    快速滚动在中间状态重复分页;失败后可明确刷新恢复。

启播与定位

  • 普通零秒启播也等待当前文件、起点和首帧纹理确认后再放行音频,修复声音
    已播放而画面仍在等待的问题;加载中按暂停会保留暂停意图。
  • 硬解首个目标帧不等待被暂停的音频时钟,避免互相等待。
  • 暂停时定位可以解码并显示目标画面,音频继续保持暂停。
  • 过滤旧定位序号和旧时间线帧,处理部分适配层在 flush 返回后仍交付旧输出
    的情况,修复从较后位置返回时误显示旧帧、恢复后长时间等待的问题。

锁屏媒体控制

  • 新增标准 MPRIS 服务,共用现有播放会话,支持锁屏播放/暂停、媒体标题与
    封面信息、停止、点播定位和倍速;与详情页、Cover 和小窗同步状态。
  • 直播正确声明不可定位、速率固定为 1;停止播放或退出应用后释放媒体服务。
  • Desktop Entry 与安装的 cn.silisili.native.desktop 保持一致。

二维码与 5.0 实验性兼容

  • 保留 5.2 的 Amber.Barcode、5.1 的 QrShareImage 优先级;私有系统组件均
    不可用时,自动使用应用内 QR 编码和绘制,避免空白/黑色二维码区域。
  • 新增 5.0 SDK 准备和独立构建入口。5.0 默认采用软件解码,规避旧设备侧
    droidmedia BufferQueue 的兼容问题,并保留明确的硬解诊断开关。

构建与测试

  • 将实际使用的 VM 构建入口纳入仓库,集成 MPRIS、QR 源码、MOC 与许可证,
    从当前源码生成兼容 shim;源文件/头文件内容和版本变化会使对应对象失效。
  • 添加启播检查和真机探针,保留首页、播放同步、锁屏及生命周期验证记录。

验证范围与下载说明

  • 本附件为 Sailfish OS 5.1/5.2 AArch64 开发包,真机验证设备为 Pixel 3a XL /
    Sailfish OS 5.2.0.16;原生开发版继续标记为 prerelease。
  • 完整画质矩阵:360P、480P、720P、1080P、1080P60;另验证软解启播、历史
    续播、加载中暂停、暂停前后定位和倍速。
  • 发布包 1080P60 横屏连续 60 秒复测,66 个约一秒视频呈现窗口最低 51.74 FPS,
    没有低于 45 FPS 的窗口。该结果仅针对本次视频、设备和测试区间。
  • 验证两次前后台往返、Cover、系统小窗拖动、应用内小窗关闭停止播放,
    以及小窗存在时退出应用后的窗口、解码缓冲和 MPRIS 服务回收。
  • 实际锁屏截图和物理播放/暂停点击通过;直播画面、暂停恢复及能力声明通过。
  • 首页第二页请求失效后,64 次继续分页未卡住,显式刷新在同进程恢复。
  • 本标准 RPM 不适用于 5.0。 5.0 需使用独立 SDK 构建实验包,尚未完成
    5.0 真机回归;本次也不宣称 UHD 硬解或所有设备、账号接口均已验证。

SiliSili Native 1.1.0-1.57

Changes since 1.56

In-application mini-player lifecycle

  • Changed the in-application mini-player close action to stop the complete shared playback session instead of only detaching the visible compact surface.
  • Stopping from the mini-player now stops mpv, releases the shared video texture and direct host, hides the compact player, and returns Cover to its idle logo and tiled-watermark state.
  • Cover retains its Sailfish 5.2-compatible lifetime-stable action list while clearing all three action icon sources, so no playback controls remain visible or triggerable after close.
  • Removed the obsolete dismissCompactSurface() API to prevent the old hide-without-stop behavior from returning.

Engineering and regression coverage

  • Added a focused real-device compact-close probe that loads a real 1080P VOD, requires a live shared texture, reads the current close-button center from runtime geometry, and physically taps it.
  • The device result passed 12/12: session_active=0, playing=0, compact=0, cover=idle, actions=0, unchanged PID/start time, clean runtime error scan, and clean rpm -V.
  • Revalidated full-surface mini-player dragging with unchanged geometry, no accidental system brightness or media-volume changes, the same process, and clean package verification.
  • Updated source gates to require the stop route and post-stop state marker and to reject any reintroduction of dismissCompactSurface.

SiliSili Native 1.1.0-1.56

Changes since 1.47

System controls and interface

  • Added persistent small, medium, and large application font-size modes across lists, details, comments, settings, Cover, and player hints.
  • Changed player vertical gestures to Sailfish system brightness on the left and system media volume on the right, with the original values saved at playback start and restored after stop, end, or application exit.
  • Routed media volume through the Sailfish PulseAudio x-maemo StreamRestore entry, with bounded sink and active-stream fallbacks for devices without that interface.
  • Limited brightness and volume gestures to detail, full-screen, PGC, and live players. The movable in-app mini-player no longer intercepts dragging with these gestures.
  • Reduced comment body text by one theme size and made two-column video/live lists the default while preserving saved user preferences.

Mini-player and Cover

  • Restored full-surface dragging for the in-app mini-player and kept its controls above the drag surface.
  • Closing the in-app mini-player now dismisses that surface without silently stopping the shared playback session, allowing Cover state to stay synchronized.
  • Made Cover content page-aware: playback details, full player, PGC, live player, and an active Home-page compact player show the live playback Cover; unrelated pages remain on the idle logo and tiled handheld background.
  • Kept one Sailfish 5.2-compatible CoverActionList for the process lifetime. Idle state clears all three icon sources in place and guards stale triggers, removing cached controls without breaking later playback actions.
  • Fixed the reported Home workflow: video detail -> Home mini-player -> physical background now retains live Cover content and all three actions with the same process and playback session.

Playback policy and stability

  • Anonymous VOD and PGC playback now start at real 720P (QN 64); signed-in sessions retain 1080P (QN 80), including cold starts before asynchronous account verification finishes.
  • Added a progressive 720P retry when an anonymous DASH response advertises QN 64 but exposes only a 480P representation.
  • Removed the redundant delayed foreground refresh pass so media-surface recovery has one owner and one cadence.
  • Hardened the droidmedia/minimedia compatibility service against boot-time ABBA races: an atomic startup guard, a settle window, native-service detection, and ordering after droid-hal-init.service prevent duplicate instances.

Engineering and regression coverage

  • Added checksum-closed fast deployment, final-state audit, system-control, compact-player, anonymous-quality, minimedia reboot, Cover lifecycle, and deterministic idle-action regression probes.
  • Expanded source verification to cover VM build inputs, CMake/qmake alignment, packaging assets, system-control wiring, quality policy, and the single Cover action-list lifetime.
  • Final device checks passed with exact RPM transfer SHA, expected NEVRA, clean rpm -V, physical Home-to-background Cover handling, content=playback, actions=3, and one unchanged process. No visual model was used.

SiliSili Native 1.1.0-1.47

Changes:

  • UI optimization.

SiliSili Native 1.1.0-1.40

Changes:

  • Promote live playback to the same full-screen framebuffer profile as VOD.
  • Report decoder, shared-texture and effective video-viewport geometry separately.
  • Reject live quality validation when final presentation downscales source pixels.
  • Retain full-screen aspect and control layout across VOD/live quality switches.

SiliSili Native 1.1.0-1.35

Changes:

  • Unify VOD, PGC and live playback under one persistent playback session while keeping their resolvers and transport semantics separate.
  • Add moving live video to both the Sailfish Cover and configurable system PiP presentation without creating a second decoder.
  • Cancel stale cross-kind requests and prevent live streams from inheriting VOD seek, speed, history or multipart state.
  • Harden hardware frame delivery, frame-stall recovery, startup synchronization and network-transition regression coverage.
  • Add device probes for 60-second live playback and live Cover/system-PiP continuity.

SiliSili Native 1.1.0-1.25

Changes:

  • Apply a non-zero initial/history position as a paused per-file start option,
    and release audio only after the new file confirms the target clock and the
    first real video texture. This removes audible time-zero playback, initial
    audio-only output and the later visible seek.
  • Treat a successfully decoded application-owned hardware texture as codec
    startup progress even while presentation waits for audio-position alignment,
    preventing the first-frame watchdog from forcing a redundant software load.

SiliSili Native 1.1.0-1.24

Changes:

  • Keep droidmedia frame callbacks nonblocking by dropping an excess incoming
    output under GUI pressure, preventing Binder transaction buildup from
    freezing video while the separate audio clock continues. Retain consecutive
    queued frames and move queue-sized sliding backpressure to the private demux
    thread so OMX cannot burst past the display queue or lose source cadence.
  • Detect a stopped hardware frame serial while audio advances and restart only
    the same-quality video decoder at the retained clock position; keep the
    audio load, shared texture, controls and media-load serial intact.

SiliSili Native 1.1.0-1.23

Changes:

  • Bound compressed droidmedia input to 1.5 seconds ahead of the audio clock so
    asynchronous OMX adaptations cannot queue an entire long video, exhaust CMA
    and leave the player stuck in loading.
  • Reconcile the internal hardware-to-software load serial, retain pause/seek
    intent during a quality transition, and keep transport controls interactive
    beneath a passive loading indicator.
  • Keep the 1200 ms first-frame safety deadline for verified UHD opt-in while
    allowing ordinary 1080P hardware startup 3500 ms before software fallback.

Comments

yun_L's picture

请问是否可以支持5· 0版本

Senjienly's picture

暂时没有5.0的设备,支持比较困难