JKVideo README

The project's README from github.com/tiajinsha/JKVideo. As one markdown file: README.md.

JKVideo

JKVideo

高颜值第三方 B 站 React Native 客户端

A feature-rich Bilibili-like app with DASH playback, real-time danmaku, WBI signing & live streaming


React Native Expo TypeScript License: MIT Platform

English · 快速开始 · 功能亮点 · 贡献


⚠️ 重要公告

本项目已收到哔哩哔哩(bilibili)律师函,要求停止对 B 站 API 的调用及相关仿制行为。

为尊重知识产权及相关法律法规,本仓库即日起停止后续维护与更新,不再接受新的 Issue 和 Pull Request。

现有代码仅作学习参考保留,请勿将本项目用于任何商业或违法用途。

感谢所有支持过本项目的朋友。


截图预览


首页热门 · 内联视频 · 穿插直播

首页直播 · 关注房间· 分区筛选

直播详情 · 4K HDR · 多清晰度

下载管理 · 局域网分享二维码

直播详情 ·实时弹幕 · 清晰度切换

视频弹幕 · 同步加载

演示视频

https://github.com/tiajinsha/JKVideo/releases/download/v1.0.0/6490dcd9dba9a243a7cd8f00359cc285.mp4


功能亮点

🎬 DASH 完整播放 Bilibili DASH 流 → buildDashMpdUri() 生成本地 MPD → ExoPlayer 原生解码,支持 1080P + 4K HDR杜比视界

💬 完整弹幕系统 视频弹幕 XML 时间轴同步 + 5 车道飘屏覆盖;直播弹幕 WebSocket 实时接收 + 舰长标记 + 礼物计数

🔐 WBI 签名实现 纯 TypeScript 手写 MD5,无任何外部加密依赖,nav 接口 12h 自动缓存

🏠 智能首页排布 BigVideoCard 内联 DASH 静音自动播放 + 水平手势快进 + 直播卡片穿插 + 双列混排

📺 全局迷你播放器 切换页面后底部浮层续播,VideoStore 跨组件状态同步

🔑 扫码登录 二维码生成 + 2s 轮询 + 响应头 Cookie 自动提取 SESSDATA

📥 下载 + 局域网分享 多清晰度后台下载,内置 HTTP 服务器生成局域网 QR 码,同 Wi-Fi 设备扫码直接播放

🌐 跨平台运行 Android · iOS · Web,Expo Go 扫码 5 分钟运行,Dev Build 解锁完整 DASH 播放


技术架构

层 技术
框架 React Native 0.83 + Expo SDK 55
路由 expo-router v4(文件系统路由,Stack 导航)
状态管理 Zustand
网络请求 Axios
本地存储 @react-native-async-storage/async-storage
视频播放 react-native-video(DASH MPD / HLS / MP4)
降级播放 react-native-webview(HTML5 video 注入)
页面滑动 react-native-pager-view
图标 @expo/vector-icons(Ionicons)

快速开始

方式一:Expo Go(5 分钟,无需编译)

部分清晰度受限,视频播放降级为 WebView 方案

git clone https://github.com/tiajinsha/JKVideo.git
cd JKVideo
npm install
npx expo start

用 Expo Go App(Android / iOS)扫描终端二维码即可运行。

方式二:Dev Build(完整功能,推荐)

支持 DASH 1080P+ 原生播放、完整弹幕系统

npm install
npx expo run:android   # Android
npx expo run:ios       # iOS(需 macOS + Xcode)

方式三:Web 端

npm install
npx expo start --web

Web 端图片需本地代理服务器绕过防盗链:node scripts/proxy.js(端口 3001)

直接安装(Android)

前往 Releases 下载最新 APK,无需编译,安装即用。

需在 Android 设置中开启「安装未知来源应用」


项目结构

app/
  index.tsx            # 首页(PagerView 热门/直播 Tab)
  video/[bvid].tsx     # 视频详情(播放 + 简介/评论/弹幕)
  live/[roomId].tsx    # 直播详情(HLS 播放 + 实时弹幕)
  search.tsx           # 搜索页
  downloads.tsx        # 下载管理页
  settings.tsx         # 设置页(画质 + 退出登录)

components/            # UI 组件(播放器、弹幕、卡片等)
hooks/                 # 数据 Hooks(视频列表、播放流、弹幕等)
services/              # Bilibili API 封装(axios + Cookie 拦截)
store/                 # Zustand 状态(登录、下载、播放、设置)
utils/                 # 工具函数(格式化、图片代理、MPD 构建)

已知限制

限制 原因
4K / 1080P+ 需要大会员账号登录 B 站 API 策略限制
FLV 直播流不支持 HTML5 / ExoPlayer 均不支持 FLV,已自动选 HLS
Web 端需本地代理 B 站图片防盗链(Referer 限制)
动态流 / 投稿 / 点赞 需要 bili_jct CSRF Token,暂未实现
二维码 10 分钟过期 关闭登录弹窗重新打开即可刷新

贡献

欢迎提交 Issue 和 PR!请先阅读 CONTRIBUTING.md。


免责声明

本项目仅供个人学习研究使用,不得用于商业用途。 所有视频内容版权归原作者及哔哩哔哩所有。 本项目与哔哩哔哩官方无任何关联。


License

MIT © 2026 JKVideo Contributors


如果这个项目对你有帮助,欢迎点一个 ⭐ Star!


请作者喝杯咖啡 ☕

如果这个项目对你有所帮助,欢迎请作者喝杯咖啡,你的支持是持续开发的最大动力,感谢每一位愿意打赏的朋友!


微信支付

支付宝

JKVideo (tiajinsha/JKVideo)

Searching Database…

这是什么?JKVideo 是一个基于 React Native 开发的第三方 Bilibili 客户端,功能精致,支持 DASH 视频播放、实时弹幕、WBI 请求签名以及直播。
这是原生移动应用,还是在浏览器里运行的程序?这是一个基于 Expo SDK 55 构建的 React Native 应用(导航使用 expo-router,状态管理使用 Zustand),可原生运行于 Android 和 iOS,也可以作为 Web 版本启动。
我要怎么让它跑起来?用 Expo Go 应用扫描终端中的二维码,五分钟即可体验(部分播放功能会退回到 WebView 方案);构建 Dev Build 可获得完整的原生 DASH 播放;也可以通过本地代理以 Web 应用的方式运行;或者直接从 Releases 下载预构建的 APK。
我需要自己编译什么吗,还是只用 Expo Go 就够了?只想快速试用的话,Expo Go 就够了;但要获得完整的 DASH 1080p+ 播放和全部弹幕功能,需要 Dev Build。Web 版本还需要一个本地代理服务器(在 3001 端口运行 `node scripts/proxy.js`),以绕过 Bilibili 的图片防盗链保护。
这个项目还在持续开发吗?不再开发了。JKVideo 收到了 Bilibili 的律师函,要求其停止调用 Bilibili 的 API,因此该仓库已停止所有维护,也不再接受新的 issue 和 PR,代码仅供学习参考。此外,4K/1080p+ 需要 Bilibili 大会员账号,不支持 FLV 直播流,发帖和点赞功能也从未实现。
它只能在 Android 上运行,还是 iOS 和 Web 也可以?它是跨平台的:Android、iOS 和 Web 都基于同一套 Expo 代码库,另外还提供可直接安装的 Android APK,无需任何构建步骤。
弹幕(滚动评论)系统是如何工作的?视频弹幕通过 XML 时间轴进行同步,并以滚动浮层的形式渲染在 5 条弹道上;直播间弹幕则通过 WebSocket 实时推送,并带有舰长标识和礼物计数。
WBI 签名功能是做什么用的?WBI 是 Bilibili API 的请求签名方案;JKVideo 使用纯 TypeScript 重新实现了该方案,并手写了 MD5(不依赖任何外部加密库),同时将签名所需的 nav 数据缓存 12 小时。
我可以下载视频并分享到其他设备吗?可以。它支持多清晰度的后台下载,并内置了一个 HTTP 服务器,会生成二维码,同一 Wi-Fi 下的任何设备扫码后即可直接播放该文件。
离开视频页面后,播放会怎样?全局迷你播放器会在屏幕底部的悬浮栏中继续播放视频,播放状态通过共享的 Zustand VideoStore 在各组件之间保持同步。
Creator
tiajinsha
Size
7.3 MB
Stars
5K
Age
7mo
Commits · 90 Days