1. 项目定位与用途
JKVideo 是一款面向 B 站用户的高颜值视频播放器客户端,基于 React Native 与 Expo 框架开发,旨在提供超越官方 App 的移动端观影体验。项目定位为功能丰富的第三方客户端,不仅支持常规视频播放,还整合了直播观看、弹幕互动、下载管理等模块,满足用户多样化的内容消费需求。作为学习研究项目,它展示了如何利用跨平台技术构建复杂的媒体应用,同时遵循 MIT 许可证,允许自由修改与分发。
JKVideo 是一款基于 React Native 开发的高颜值 B 站视频播放器客户端,支持 DASH 高清播放、实时弹幕、直播观看、下载管理与局域网分享。适用于 Android、iOS 和 Web 平台,提供完整的安装指南、使用说明及技术架构解析。
JKVideo 是一款基于 React Native 和 Expo 开发的高颜值 B 站视频播放器客户端,支持 DASH 流媒体播放、实时弹幕、WBI 签名验证和直播功能,跨平台运行于 Android、iOS 和 Web。
JKVideo 是一款面向 B 站用户的高颜值视频播放器客户端,基于 React Native 与 Expo 框架开发,旨在提供超越官方 App 的移动端观影体验。项目定位为功能丰富的第三方客户端,不仅支持常规视频播放,还整合了直播观看、弹幕互动、下载管理等模块,满足用户多样化的内容消费需求。作为学习研究项目,它展示了如何利用跨平台技术构建复杂的媒体应用,同时遵循 MIT 许可证,允许自由修改与分发。
项目核心功能涵盖 DASH 完整播放、实时弹幕系统、WBI 签名实现、智能首页排布、全局迷你播放器、扫码登录、下载管理与局域网分享。DASH 播放通过构建本地 MPD 文件驱动 ExoPlayer 原生解码,支持 1080P 及 4K HDR 杜比视界;弹幕系统实现视频 XML 时间轴同步与直播 WebSocket 实时接收,包含舰长标记与礼物计数;WBI 签名纯 TypeScript 手写 MD5 实现,接口缓存 12 小时;下载模块支持多清晰度后台下载并可通过 HTTP 服务器生成局域网二维码分享。
技术栈以 React Native 0.83 和 Expo SDK 55 为基础,采用 TypeScript 确保类型安全。路由使用 expo-router v4 的文件系统路由,状态管理依赖 Zustand,网络请求由 Axios 封装并集成 Cookie 拦截与 WBI 签名。视频播放核心为 react-native-video,支持 DASH MPD、HLS 和 MP4 格式,降级方案通过 react-native-webview 注入 HTML5 player。其他关键依赖包括 @react-native-async-storage/async-storage 用于本地存储、pako 处理弹幕压缩、react-native-pager-view 实现页面滑动,以及 @expo/vector-icons 提供图标资源。
项目提供三种安装方式:Expo Go 方式最快,克隆仓库后运行 npm install 和 npx expo start,用 Expo Go App 扫码即可运行,但部分清晰度受限且视频播放降级为 WebView 方案;Dev Build 方式推荐,通过 npx expo run:android 或 npx expo run:ios 编译完整版,支持原生 DASH 播放与完整弹幕;Web 端需执行 npx expo start --web 并额外运行 node dev-proxy.js 启动本地代理以绕过图片防盗链。此外,用户可直接从 Releases 页面下载 APK 文件安装到 Android 设备。
启动应用后,首页展示热门视频与直播卡片,支持内联静音自动播放与水平手势快进。用户可通过搜索或点击卡片进入视频详情页,使用 DASH 播放器切换清晰度(包括 4K HDR),播放时实时接收同步弹幕。直播详情页提供 HLS 播放与 WebSocket 实时弹幕,显示舰长标记与礼物计数。下载管理页面可查看多清晰度后台下载任务进度,局域网分享功能生成二维码供同 Wi-Fi 设备扫码直接播放已下载视频。设置页面可调整画质偏好与退出登录。
项目存在以下已知限制:4K/1080P+ 画质需要大会员账号登录;FLV 直播流不支持,已自动切换为 HLS;Web 端需本地代理服务器绕过 B 站图片防盗链;动态流、投稿、点赞等功能需要 bili_jct CSRF Token,暂未实现;登录二维码 10 分钟过期,需重新打开登录弹窗刷新。项目仅供个人学习研究使用,不得用于商业用途,所有视频内容版权归原作者及相关平台所有。
提供三种方式:① Expo Go:克隆仓库后运行 npm install 和 npx expo start,用 Expo Go App 扫码运行(功能受限,视频降级为 WebView);② Dev Build:运行 npx expo run:android 或 npx expo run:ios 编译完整版,支持原生 DASH 播放;③ Web:运行 npx expo start --web 并配合 node dev-proxy.js 启动本地代理。也可直接从 Releases 下载 APK 文件安装到 Android 设备。
项目基于 React Native 和 Expo 开发,支持 Android、iOS 和 Web 三平台。Expo Go 方式可快速体验基础功能;Dev Build 编译后获得完整功能(包括 DASH 原生播放与完整弹幕系统);Web 端需本地代理绕过 B 站图片防盗链限制。
因为 B 站 API 策略限制,高清晰度流媒体仅对大会员开放。JKVideo 遵循平台规则,播放 4K/1080P+ 画质时需先登录大会员账号,否则自动降级至可用清晰度。此限制源自 B 站服务端,客户端无法绕过。
B 站图片资源设有防盗链机制(Referer 限制),Web 端直接请求会被阻止。项目提供的 dev-proxy.js 脚本在本地 3001 端口启动代理,为请求添加合法 Referer 头,从而绕过限制,确保图片正常加载。这是 Web 端特有的必要步骤。
下载管理页面内置 HTTP 服务器(基于 @dr.pogodin/react-native-static-server),启动后生成局域网访问二维码。同一 Wi-Fi 网络下的设备扫码即可通过浏览器直接播放已下载的视频文件,无需额外传输或上传。该功能仅支持同网络环境,且依赖设备 IP 可达性。