Problem Statement
在当前实现中,视频选流链路只传递 VIDEO_SELECT_POLICY。对于 B 站这类音视频分离流(video + audio 独立轨道)的插件场景,插件无法从主流程拿到“音频音质策略”,因此无法基于用户的 AUDIO_SELECT_POLICY 选择音轨。
这会导致:
- 视频清晰度可按策略选;
- 但音频轨通常只能按插件内部固定逻辑选(例如默认最高或默认某一档);
- 用户设置的
AUDIO_SELECT_POLICY 在视频播放场景中不生效(或无法显式生效)。
Current Behavior (Code Path)
关键路径如下:
-
feeluown/player/playlist.py
_prepare_mv_media -> library.song_prepare_mv_media(song, self._app.config.VIDEO_SELECT_POLICY)
a_set_current_model -> library.video_prepare_media(video, self._app.config.VIDEO_SELECT_POLICY)
-
feeluown/library/library.py
song_prepare_mv_media(song, policy) -> video_prepare_media(mv, policy)
video_prepare_media(video, policy):
- provider 分支:
provider.video_select_media(video, policy)
- ytdl 分支:
self.ytdl.select_video(video_web_url, policy, source=video.source)
-
feeluown/library/provider_protocol.py
SupportsVideoMultiQuality.video_select_media(self, video, policy=None) 只有单一 policy 参数
-
feeluown/app/config.py
- 已存在
AUDIO_SELECT_POLICY(默认 hq<>)
- 已存在
VIDEO_SELECT_POLICY(默认 hd<>)
Why This Matters
对“单流视频”问题不明显,但对“分离流视频”(尤其 B 站)影响直接:
- 插件需要同时决策 video track 和 audio track;
- 但框架只给到视频策略,没有统一入口传音频策略;
- 插件作者若想遵循用户音质偏好,只能用私有约定或硬编码,难以通用。
Expected Behavior
视频选流接口可同时接收:
video_policy(来自 VIDEO_SELECT_POLICY)
audio_policy(来自 AUDIO_SELECT_POLICY)
从而让插件在返回 Media(VideoAudioManifest(...)) 时可以按“双策略”选流。
Backward Compatibility Requirements
希望采用“兼容旧插件”的渐进方案:
- 旧插件(只实现旧签名)不需要立即修改,继续可用;
- 新插件可选择实现新参数并利用
audio_policy;
- 未提供
audio_policy 时,行为与当前保持一致。
Suggested Direction (One Practical Option)
仅供讨论,目标是最小侵入:
-
在调用层引入双策略参数
playlist/library 调用 video_prepare_media(...) 时同时传:
video_policy=config.VIDEO_SELECT_POLICY
audio_policy=config.AUDIO_SELECT_POLICY
-
在 library/provider 层支持新参数
- 将
video_prepare_media(video, policy) 演进为可表达双策略(例如 video_policy + audio_policy)
- provider 侧
video_select_media(...) 增加可选 audio_policy
-
兼容分发
- 框架层对旧签名 provider 做兼容调用(避免一次性破坏生态)
Acceptance Criteria
若有人愿意修复,建议至少满足:
- 在视频播放链路里可以观测到
AUDIO_SELECT_POLICY 被传入插件层;
- 对旧插件无崩溃、无行为回退;
- 对支持新参数的插件,可根据
audio_policy 选择音轨;
- 有最小测试/示例覆盖(尤其分离流场景)。
Notes
这个 issue 主要是把“问题定义 + 修复方向”说清楚,方便社区按意愿接手实现,不预设具体实现细节。
Problem Statement
在当前实现中,视频选流链路只传递
VIDEO_SELECT_POLICY。对于 B 站这类音视频分离流(video + audio 独立轨道)的插件场景,插件无法从主流程拿到“音频音质策略”,因此无法基于用户的AUDIO_SELECT_POLICY选择音轨。这会导致:
AUDIO_SELECT_POLICY在视频播放场景中不生效(或无法显式生效)。Current Behavior (Code Path)
关键路径如下:
feeluown/player/playlist.py_prepare_mv_media->library.song_prepare_mv_media(song, self._app.config.VIDEO_SELECT_POLICY)a_set_current_model->library.video_prepare_media(video, self._app.config.VIDEO_SELECT_POLICY)feeluown/library/library.pysong_prepare_mv_media(song, policy)->video_prepare_media(mv, policy)video_prepare_media(video, policy):provider.video_select_media(video, policy)self.ytdl.select_video(video_web_url, policy, source=video.source)feeluown/library/provider_protocol.pySupportsVideoMultiQuality.video_select_media(self, video, policy=None)只有单一policy参数feeluown/app/config.pyAUDIO_SELECT_POLICY(默认hq<>)VIDEO_SELECT_POLICY(默认hd<>)Why This Matters
对“单流视频”问题不明显,但对“分离流视频”(尤其 B 站)影响直接:
Expected Behavior
视频选流接口可同时接收:
video_policy(来自VIDEO_SELECT_POLICY)audio_policy(来自AUDIO_SELECT_POLICY)从而让插件在返回
Media(VideoAudioManifest(...))时可以按“双策略”选流。Backward Compatibility Requirements
希望采用“兼容旧插件”的渐进方案:
audio_policy;audio_policy时,行为与当前保持一致。Suggested Direction (One Practical Option)
仅供讨论,目标是最小侵入:
在调用层引入双策略参数
playlist/library调用video_prepare_media(...)时同时传:video_policy=config.VIDEO_SELECT_POLICYaudio_policy=config.AUDIO_SELECT_POLICY在 library/provider 层支持新参数
video_prepare_media(video, policy)演进为可表达双策略(例如video_policy+audio_policy)video_select_media(...)增加可选audio_policy兼容分发
Acceptance Criteria
若有人愿意修复,建议至少满足:
AUDIO_SELECT_POLICY被传入插件层;audio_policy选择音轨;Notes
这个 issue 主要是把“问题定义 + 修复方向”说清楚,方便社区按意愿接手实现,不预设具体实现细节。