Skip to content

opoojkk/Podium

Repository files navigation

Podium - 跨平台播客播放器

一个现代化的跨平台播客播放器,支持 Android、iOS 和桌面端

Kotlin Compose Multiplatform License

中文 | English

📱 项目简介

Podium 是一个使用 Kotlin Multiplatform 和 Compose Multiplatform 技术构建的泛用播客播放器。它采用单一代码库实现多平台支持,提供了一致且原生的用户体验。

平台状态: ✅ Android 正常使用 | ✅ iOS 可用 | ✅ Desktop 可用

✨ 核心特性

  • 🎯 跨平台架构 - Android、iOS、Desktop (JVM) 三端统一代码库
  • 🎨 现代化 UI - Material 3 设计 + Spotify 风格深色主题
  • 🎵 完整播放功能 - 播放控制、进度管理、倍速播放、睡眠定时器
  • 📡 RSS 订阅 - 支持标准 RSS/Atom 播客源订阅与解析
  • 💾 本地存储 - SQLDelight 跨平台数据持久化
  • 📥 离线下载 - 单集下载与管理
  • 🔄 播放进度同步 - 自动保存和恢复播放进度

🛠 技术栈

核心框架

架构模式

  • MVVM + Repository Pattern - 清晰的架构分层
  • Kotlin Coroutines + Flow - 异步编程与响应式数据流
  • expect/actual 机制 - 跨平台差异化处理

核心组件(Rust 实现)

RSS 解析器 (rust-rss-parser)

  • 高性能 XML/RSS/Atom 解析
  • 零拷贝设计,低内存占用

音频播放器 (podium-audio-core)

  • 跨平台音频播放核心(FFmpeg Native)
  • 平台实现:Android / iOS(通过 ffmpeg-native 集成)

平台集成

  • Android: Jetpack Compose + Media3 媒体会话
  • iOS: SwiftUI + AVFoundation 音频管理
  • Desktop: Compose for Desktop + Spotify 风格主题

🚧 近期计划

最近完成

  • 播放队列与列表(队列管理和自定义播放列表)
  • 搜索功能(全局搜索播客和单集)
  • 播客发现(推荐和热门播客)
  • 收藏功能(收藏单集)
  • 章节支持(RSS 章节解析与跳转)
  • OPML 导入/导出(订阅数据迁移)

进行中 / 待办

  • 多设备同步(云端数据同步,可选)
  • 主题切换 - 浅色/深色/自动主题
  • 音频均衡器 - 音效调节

🚀 快速开始

环境要求

  • JDK 11+
  • Android Studio Ladybug (2024.2.1)+
  • Xcode 14.0+ (macOS, iOS 开发)
  • Rust 1.70+ (自动编译原生组件)
    • 安装: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    • iOS 开发: rustup target add aarch64-apple-ios

平台版本要求:

  • Android: 最低 API 24 (Android 7.0), 目标 API 36 (Android 14)
  • iOS: 最低 iOS 15.0

构建与运行

Android

./gradlew :composeApp:assembleDebug

Desktop

./gradlew :composeApp:run

iOS

# 在 Xcode 中打开 iosApp 目录,或使用命令行
cd iosApp
xcodebuild -scheme iosApp -configuration Debug

💡 首次构建时,Gradle 会自动编译 Rust 组件,可能需要几分钟。

📐 架构设计

Podium 采用分层架构,结合 Kotlin Multiplatform 和 Rust 原生组件:

┌─────────────────────────────────────────────────┐
│            UI Layer (Compose MP)                │
└────────────────────┬────────────────────────────┘
                     │ StateFlow / Flow
┌────────────────────▼────────────────────────────┐
│      Presentation (ViewModel / Controller)      │
└────────────────────┬────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────┐
│         Repository (Data Abstraction)           │
└──────┬───────────────────┬──────────────────┬───┘
       │                   │                  │
   ┌───▼────┐       ┌─────▼──────┐      ┌────▼────┐
   │  RSS   │       │  Database  │      │ Player  │
   │ (Rust) │       │(SQLDelight)│      │ (Rust)  │
   └────────┘       └────────────┘      └─────────┘

Rust 组件通过 JNI/FFI 桥接:Android/Desktop 使用 JNI,iOS 使用 FFI,为 Kotlin/Swift 提供统一接口。

📄 许可证

本项目采用 GPLv3 许可证 - 查看 LICENSE 了解详情

🙏 致谢

感谢开源社区和以下项目:JetBrains (Kotlin & Compose MP) · Rust · SQLDelight · Ktor · Coil · cpal · XYZRank (热门播客数据)

⭐ 如果这个项目对你有帮助,请给个 Star! ⭐

Made with ❤️ using Kotlin Multiplatform

GitHub · Issues

About

一个Compose Multiplatform实现的跨平台泛型播客应用。A cross-platform generic podcast app built with Compose Multiplatform.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors