[开源推广] SurfSave:集网页视频检测、下载和自选播放器于一体的 Android 浏览器

二手科莱 2026-08-29 12:45 1

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



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

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

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

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

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


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




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


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



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

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

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

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


差不多就是:


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


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


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


GitHub:





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




接下来是详细介绍




为什么会做这个东西


起因其实挺简单的。


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


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


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



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

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

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


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


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


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


所以最后干脆自己折腾了一个,于是就有了 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:




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


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


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


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

最新回复 (1)
  • 二手科莱 楼主 08-29 18:54
    1

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



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

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

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

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

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


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




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


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



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

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

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

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


    差不多就是:


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


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


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


    GitHub:





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




    接下来是详细介绍




    为什么会做这个东西


    起因其实挺简单的。


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


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


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



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

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

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


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


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


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


    所以最后干脆自己折腾了一个,于是就有了 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:




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


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


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


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


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

* 帖子来源Linux.do
返回