• 二手科莱

    本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

    - 我的帖子已经打上 开源推广 标签: 是

    - 我的开源项目完整开源,无未开源部分: 是

    - 我的开源项目已链接认可 LINUX DO 社区: 是

    - 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是

    - 以上选择我承诺是永久有效的,接受社区和佬友监督: 是

    以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


    我最近搞了一个 Android 开源项目 SurfSave,想发出来给佬友们试试看:

    在一个 Android 浏览器的基础上。

    - 浏览网页时自动检测符合条件的媒体请求

    - 检测到视频后,可以直接使用内置播放器或者自己已有的播放器在线播放

    - 也可以选择检测到的资源和清晰度下载

    - 支持普通直链、HLS / DASH、yt-dlp 等不同下载方式

    差不多就是:

    浏览网页 → 检测视频 → 内置在线播放 / 外部播放器 / 下载保存

    对默认播放器的小窗进行了一些优化,除了常见的暂停、放大、关闭之外,还有快进和后退等。(很难想象,很多小窗根本不支持这一点。这一部分也是我做这个项目的初始原因。)

    项目使用 GPL-3.0 开源,支持 Android 7.0 及以上。

    GitHub:

    github.com

    图片

    GitHub - songsongshuo785-art/SurfSave: Local-first Android video saver with built-in...

    Local-first Android video saver with built-in browser and realtime media detection

    图片

    从浏览器首页、网页媒体检测,到在线播放和下载入口。


    接下来是详细介绍


    为什么会做这个东西

    起因其实挺简单的。

    我平时会直接在手机浏览器里看一些网页视频,但是很多网站自带的播放器体验实在一言难尽。

    有的不能左右滑动进度,有的全屏逻辑很奇怪,有的播放器操作起来就是手感不好。

    而我自己又有几个比较固定的习惯:

    - 遇到喜欢的视频会想下载下来收藏

    - 有时候想直接用手机里已经安装好的播放器看视频

    - 经常使用小窗,一边看小说或者漫画,一边在旁边播放视频或者听声音

    结果找了一圈,能同时比较顺手地完成:

    浏览网页 → 检测视频 → 播放 / 外部播放器 / 下载 / 小窗

    这一整套操作的软件,好像还真不多。

    所以最后干脆自己折腾了一个,于是就有了 SurfSave。

    SurfSave 也是我的一个 Vibe Coding 实验项目。没啥创新点,更多是把一些现有的架构整合了一下。目前肯定还有不少粗糙的地方和奇奇怪怪的 Bug,先发出来让大家帮忙踩踩坑。


    SurfSave 是怎么使用的

    它首先还是一个 Android 浏览器。

    在正常浏览网页时,SurfSave 会尝试检测页面加载过程中出现的媒体请求。

    检测到视频以后,可以进入媒体详情,查看候选资源,然后选择:

    - 使用 SurfSave 内置播放器在线播放;

    - 调用设备上已经安装的外部播放器;

    - 选择候选资源和清晰度加入下载队列。

    不需要自己手动寻找 m3u8 或媒体直链。

    一个围绕网页视频,重新把浏览、检测、播放、下载和画中画串起来的浏览器壳。


    在线播放和播放器选择

    这是我自己比较需要的功能。

    检测到网页视频以后,可以直接使用 SurfSave 内置播放器在线播放,不需要先把视频下载下来。

    如果不喜欢内置播放器,也可以通过在线播放按钮旁边的小箭头,选择手机上已经安装的播放器。

    第一次添加外部播放器时,会调用 Android 系统的播放器选择界面。使用过的播放器会记录在 SurfSave 的播放器列表中,之后可以直接切换。

    比如平时习惯使用 VLC、MX Player、mpv 或其他播放器,就不必一直被网页自带的播放器绑住。


    视频下载和下载队列

    目前针对普通媒体直链、HLS / DASH、直播流和 yt-dlp 页面解析,分别做了不同的下载处理。

    也支持部分 HLS AES-128 加密流、播放列表和批量解析。

    下载任务有独立队列,可以:

    - 调整并发数量;

    - 对任务排序;

    - 稍后下载;

    - 检查重复任务;

    - 查看每个任务的日志和具体报错。

    另外还做了 Cookie 配置导入和导出。一些登录以后才能访问的视频,可以尝试携带 Cookie 下载。

    下载完成后,视频会进入 SurfSave 的视频库,可以直接管理、播放或者分享。

    图片

    下载任务、本地视频库和多标签页管理。


    内置播放器和小窗

    内置播放器既可以播放检测到的在线媒体,也可以播放已经下载到本地的视频。

    目前支持:

    - 在线和离线播放;

    - 双击左右区域快退或快进;

    - 水平滑动调整播放进度;

    - 拖动时显示缩略图预览;

    - 倍速播放;

    - 字幕和音轨切换;

    - 画面比例调整;

    - Picture-in-Picture。

    画中画不是下载完成以后才能使用。

    只要在线媒体能够通过 SurfSave 内置播放器正常播放,就可以直接进入画中画;本地视频同样支持。

    PiP 是我自己用得比较多的功能。

    特别是看小说或者漫画的时候,我很喜欢在旁边挂个小窗播放视频或者听东西。

    不知道有没有佬友和我一样有这种奇怪习惯。

    图片

    左侧是网页视频在线画中画,右侧是内置播放器横屏播放。


    浏览器本身的功能

    为了让它不只是一个专门用来粘贴链接的下载器,浏览器本身也补了一些基础功能。

    目前包括:

    - 多标签页

    - 历史记录和书签

    - Cookie

    - Google、Bing、百度和 DuckDuckGo等不同引擎的选择

    - 长按链接后台打开

    - 页面语言检测和 ML Kit 翻译

    - DoH

    - 可选的 Xray/libv2ray 代理

    - 应用数据备份和恢复

    目标还是尽量让它能够同时作为一个正常浏览器使用。


    目前明确做不到的东西

    这里提前说明一下,免得产生误解。

    不支持下载 DRM / Widevine 内容这块有点难搞。

    另外还有这些限制:

    - 网站修改结构、接口或者登录策略后,媒体检测和 yt-dlp 解析可能暂时失效;

    - 某些登录内容需要 WebView Cookie 或手动导入 Cookie;

    - 外部播放器只能拿到媒体 URL 和标题,不会自动继承 WebView 中的 Cookie、Referer 或 Authorization;

    - 因此,一些登录保护或者强防盗链媒体可能只能使用内置播放器;

    - 直播只能从开始下载以后实时捕获,不能获取此前已经播出的部分;

    - 在线播放效果还会受到网络、媒体编码和手机解码能力的影响。

    所以它肯定不是个“全网万能视频下载神器”,我这还得学。


    关于项目本身

    项目使用 Kotlin / Android 开发。

    播放器基于 Media3,媒体解析和处理涉及 yt-dlp、FFmpeg / FFmpegKit 等组件。

    SurfSave 是在很多开源项目的基础上继续开发和重构出来的,同时也参考了 youtube-dl-android、youtubedl-android 和 Seal 等项目。

    完整来源和第三方开源声明都保存在仓库中。

    项目使用 GPL-3.0 开源。


    最后

    我自己平时已经在使用 SurfSave,但网页媒体的实现方式千奇百怪,一个人很难覆盖所有网站、Android 版本和设备型号。

    如果遇到:

    - 网页媒体检测不到;

    - 下载失败;

    - 在线或本地播放异常;

    - 标签页、画中画或者横竖屏出现问题;

    - UI 有奇怪的地方;

    - 有什么特别需要补充的功能;

    都可以直接在帖子下面反馈,或者提交 GitHub Issue:

    图片

    GitHub

    图片

    Issues · songsongshuo785-art/SurfSave

    Local-first Android video saver with built-in browser and realtime media detection - Issues · songsongshuo785-art/SurfSave

    如果反馈下载问题,可以附上 SurfSave 版本、Android 版本、网页地址和任务错误日志。

    日志中如果包含 Cookie、账号或者其他隐私信息,记得先删除。

    合理而且我有能力实现的功能,我会慢慢往里面加。

    也欢迎各位大佬直接肘击代码。

    主楼
  • 二手科莱

    本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

    - 我的帖子已经打上 开源推广 标签: 是

    - 我的开源项目完整开源,无未开源部分: 是

    - 我的开源项目已链接认可 LINUX DO 社区: 是

    - 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是

    - 以上选择我承诺是永久有效的,接受社区和佬友监督: 是

    以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


    我最近搞了一个 Android 开源项目 SurfSave,想发出来给佬友们试试看:

    在一个 Android 浏览器的基础上。

    - 浏览网页时自动检测符合条件的媒体请求

    - 检测到视频后,可以直接使用内置播放器或者自己已有的播放器在线播放

    - 也可以选择检测到的资源和清晰度下载

    - 支持普通直链、HLS / DASH、yt-dlp 等不同下载方式

    差不多就是:

    浏览网页 → 检测视频 → 内置在线播放 / 外部播放器 / 下载保存

    对默认播放器的小窗进行了一些优化,除了常见的暂停、放大、关闭之外,还有快进和后退等。(很难想象,很多小窗根本不支持这一点。这一部分也是我做这个项目的初始原因。)

    项目使用 GPL-3.0 开源,支持 Android 7.0 及以上。

    GitHub:

    github.com

    图片

    GitHub - songsongshuo785-art/SurfSave: Local-first Android video saver with built-in...

    Local-first Android video saver with built-in browser and realtime media detection

    图片

    从浏览器首页、网页媒体检测,到在线播放和下载入口。


    接下来是详细介绍


    为什么会做这个东西

    起因其实挺简单的。

    我平时会直接在手机浏览器里看一些网页视频,但是很多网站自带的播放器体验实在一言难尽。

    有的不能左右滑动进度,有的全屏逻辑很奇怪,有的播放器操作起来就是手感不好。

    而我自己又有几个比较固定的习惯:

    - 遇到喜欢的视频会想下载下来收藏

    - 有时候想直接用手机里已经安装好的播放器看视频

    - 经常使用小窗,一边看小说或者漫画,一边在旁边播放视频或者听声音

    结果找了一圈,能同时比较顺手地完成:

    浏览网页 → 检测视频 → 播放 / 外部播放器 / 下载 / 小窗

    这一整套操作的软件,好像还真不多。

    所以最后干脆自己折腾了一个,于是就有了 SurfSave。

    SurfSave 也是我的一个 Vibe Coding 实验项目。没啥创新点,更多是把一些现有的架构整合了一下。目前肯定还有不少粗糙的地方和奇奇怪怪的 Bug,先发出来让大家帮忙踩踩坑。


    SurfSave 是怎么使用的

    它首先还是一个 Android 浏览器。

    在正常浏览网页时,SurfSave 会尝试检测页面加载过程中出现的媒体请求。

    检测到视频以后,可以进入媒体详情,查看候选资源,然后选择:

    - 使用 SurfSave 内置播放器在线播放;

    - 调用设备上已经安装的外部播放器;

    - 选择候选资源和清晰度加入下载队列。

    不需要自己手动寻找 m3u8 或媒体直链。

    一个围绕网页视频,重新把浏览、检测、播放、下载和画中画串起来的浏览器壳。


    在线播放和播放器选择

    这是我自己比较需要的功能。

    检测到网页视频以后,可以直接使用 SurfSave 内置播放器在线播放,不需要先把视频下载下来。

    如果不喜欢内置播放器,也可以通过在线播放按钮旁边的小箭头,选择手机上已经安装的播放器。

    第一次添加外部播放器时,会调用 Android 系统的播放器选择界面。使用过的播放器会记录在 SurfSave 的播放器列表中,之后可以直接切换。

    比如平时习惯使用 VLC、MX Player、mpv 或其他播放器,就不必一直被网页自带的播放器绑住。


    视频下载和下载队列

    目前针对普通媒体直链、HLS / DASH、直播流和 yt-dlp 页面解析,分别做了不同的下载处理。

    也支持部分 HLS AES-128 加密流、播放列表和批量解析。

    下载任务有独立队列,可以:

    - 调整并发数量;

    - 对任务排序;

    - 稍后下载;

    - 检查重复任务;

    - 查看每个任务的日志和具体报错。

    另外还做了 Cookie 配置导入和导出。一些登录以后才能访问的视频,可以尝试携带 Cookie 下载。

    下载完成后,视频会进入 SurfSave 的视频库,可以直接管理、播放或者分享。

    图片

    下载任务、本地视频库和多标签页管理。


    内置播放器和小窗

    内置播放器既可以播放检测到的在线媒体,也可以播放已经下载到本地的视频。

    目前支持:

    - 在线和离线播放;

    - 双击左右区域快退或快进;

    - 水平滑动调整播放进度;

    - 拖动时显示缩略图预览;

    - 倍速播放;

    - 字幕和音轨切换;

    - 画面比例调整;

    - Picture-in-Picture。

    画中画不是下载完成以后才能使用。

    只要在线媒体能够通过 SurfSave 内置播放器正常播放,就可以直接进入画中画;本地视频同样支持。

    PiP 是我自己用得比较多的功能。

    特别是看小说或者漫画的时候,我很喜欢在旁边挂个小窗播放视频或者听东西。

    不知道有没有佬友和我一样有这种奇怪习惯。

    图片

    左侧是网页视频在线画中画,右侧是内置播放器横屏播放。


    浏览器本身的功能

    为了让它不只是一个专门用来粘贴链接的下载器,浏览器本身也补了一些基础功能。

    目前包括:

    - 多标签页

    - 历史记录和书签

    - Cookie

    - Google、Bing、百度和 DuckDuckGo等不同引擎的选择

    - 长按链接后台打开

    - 页面语言检测和 ML Kit 翻译

    - DoH

    - 可选的 Xray/libv2ray 代理

    - 应用数据备份和恢复

    目标还是尽量让它能够同时作为一个正常浏览器使用。


    目前明确做不到的东西

    这里提前说明一下,免得产生误解。

    不支持下载 DRM / Widevine 内容这块有点难搞。

    另外还有这些限制:

    - 网站修改结构、接口或者登录策略后,媒体检测和 yt-dlp 解析可能暂时失效;

    - 某些登录内容需要 WebView Cookie 或手动导入 Cookie;

    - 外部播放器只能拿到媒体 URL 和标题,不会自动继承 WebView 中的 Cookie、Referer 或 Authorization;

    - 因此,一些登录保护或者强防盗链媒体可能只能使用内置播放器;

    - 直播只能从开始下载以后实时捕获,不能获取此前已经播出的部分;

    - 在线播放效果还会受到网络、媒体编码和手机解码能力的影响。

    所以它肯定不是个“全网万能视频下载神器”,我这还得学。


    关于项目本身

    项目使用 Kotlin / Android 开发。

    播放器基于 Media3,媒体解析和处理涉及 yt-dlp、FFmpeg / FFmpegKit 等组件。

    SurfSave 是在很多开源项目的基础上继续开发和重构出来的,同时也参考了 youtube-dl-android、youtubedl-android 和 Seal 等项目。

    完整来源和第三方开源声明都保存在仓库中。

    项目使用 GPL-3.0 开源。


    最后

    我自己平时已经在使用 SurfSave,但网页媒体的实现方式千奇百怪,一个人很难覆盖所有网站、Android 版本和设备型号。

    如果遇到:

    - 网页媒体检测不到;

    - 下载失败;

    - 在线或本地播放异常;

    - 标签页、画中画或者横竖屏出现问题;

    - UI 有奇怪的地方;

    - 有什么特别需要补充的功能;

    都可以直接在帖子下面反馈,或者提交 GitHub Issue:

    图片

    GitHub

    图片

    Issues · songsongshuo785-art/SurfSave

    Local-first Android video saver with built-in browser and realtime media detection - Issues · songsongshuo785-art/SurfSave

    如果反馈下载问题,可以附上 SurfSave 版本、Android 版本、网页地址和任务错误日志。

    日志中如果包含 Cookie、账号或者其他隐私信息,记得先删除。

    合理而且我有能力实现的功能,我会慢慢往里面加。

    也欢迎各位大佬直接肘击代码。

    后续计划着手增加网页去广的功能。(大概会是对特殊网站特殊处理的方式)

    #1

发表回复

登录后回复