SiliSili

Rating: 
5
Your rating: None Average: 5 (1 vote)

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.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版本