TuggsBunny
Forum Noob
Hey everyone,
I've been building a native Jellyfin client for PS3 from scratch called JellyFin PS3 and wanted to share where it's at and hopefully connect with some experienced PS3 homebrew devs.
For those who don't know, Jellyfin is a free open source self-hosted media server. Think your own personal Netflix running on your home PC or NAS. The goal of this project is a proper native PS3 client that browses your Jellyfin library and streams video directly to the console over your local network.
I'm aware there's an existing Jellyfin plugin for Movian but this project is a dedicated standalone client rather than a plugin bolted onto another app. That means a purpose-built UI designed around Jellyfin, direct control over the entire video pipeline, no dependency on Movian being installed or maintained, and a lot more room to add Jellyfin-specific features down the road like resume playback, watched status, and proper metadata display. If you're already happy with the Movian plugin that's totally fine, but this aims to be a better experience for Jellyfin users specifically.
Speaking of Movian, throughout development I've been using it as the reference implementation for PS3 media playback. It's the gold standard and I've been studying its approach to RSX vsync scheduling, the YUV shader pipeline, jitter buffer design, and audio DMA to guide the architecture of this client. If anyone here was involved with Movian development or knows anyone who was, I'd love to get in touch, there are some specific questions about the audio pipeline and PTS-driven vsync scheduling I haven't been able to fully figure out from the source alone.
Current state:
- MPEG-TS stream demuxing and H.264 hardware decoding via cellVdec
- Automatic FPS detection from the VDEC frame_rate_code (23.976, 25, 29.97, 50, 59.94)
- GPU-accelerated video output via RSX vertex + fragment shaders — PPU does zero per-pixel work
- Double-buffered RSX texture upload on a dedicated thread so the display loop only submits RSX commands
- Stable ~23.976fps playback for 24fps content on a 60Hz display
- Jellyfin library browser UI browse movies, TV shows, seasons and episodes
Still working on:
- Audio — the PS3 audio DMA ring buffer write logic is currently broken/silent, this is the next thing to fix
- 2:3 pulldown judder need PTS-driven vsync scheduling to lock the 24fps cadence on 60Hz properly
- Seeking
- Re-adding the network thread with proper volatile indices
Open source on GitHub:
github.com
Any advice on PS3 audio DMA (sysAudioPortOpen, DMA ring buffer write tracking, sysEventQueueReceive), RSX vsync-driven frame scheduling, or general PSL1GHT tips would be hugely appreciated. Also happy to chat about the pipeline if anyone's curious.
Cheers
I've been building a native Jellyfin client for PS3 from scratch called JellyFin PS3 and wanted to share where it's at and hopefully connect with some experienced PS3 homebrew devs.
For those who don't know, Jellyfin is a free open source self-hosted media server. Think your own personal Netflix running on your home PC or NAS. The goal of this project is a proper native PS3 client that browses your Jellyfin library and streams video directly to the console over your local network.
I'm aware there's an existing Jellyfin plugin for Movian but this project is a dedicated standalone client rather than a plugin bolted onto another app. That means a purpose-built UI designed around Jellyfin, direct control over the entire video pipeline, no dependency on Movian being installed or maintained, and a lot more room to add Jellyfin-specific features down the road like resume playback, watched status, and proper metadata display. If you're already happy with the Movian plugin that's totally fine, but this aims to be a better experience for Jellyfin users specifically.
Speaking of Movian, throughout development I've been using it as the reference implementation for PS3 media playback. It's the gold standard and I've been studying its approach to RSX vsync scheduling, the YUV shader pipeline, jitter buffer design, and audio DMA to guide the architecture of this client. If anyone here was involved with Movian development or knows anyone who was, I'd love to get in touch, there are some specific questions about the audio pipeline and PTS-driven vsync scheduling I haven't been able to fully figure out from the source alone.
Current state:
- MPEG-TS stream demuxing and H.264 hardware decoding via cellVdec
- Automatic FPS detection from the VDEC frame_rate_code (23.976, 25, 29.97, 50, 59.94)
- GPU-accelerated video output via RSX vertex + fragment shaders — PPU does zero per-pixel work
- Double-buffered RSX texture upload on a dedicated thread so the display loop only submits RSX commands
- Stable ~23.976fps playback for 24fps content on a 60Hz display
- Jellyfin library browser UI browse movies, TV shows, seasons and episodes
Still working on:
- Audio — the PS3 audio DMA ring buffer write logic is currently broken/silent, this is the next thing to fix
- 2:3 pulldown judder need PTS-driven vsync scheduling to lock the 24fps cadence on 60Hz properly
- Seeking
- Re-adding the network thread with proper volatile indices
Open source on GitHub:
GitHub - Tuggs-Bunny/JellyFin---PS3: A homebrew Jellyfin client for the PlayStation 3
A homebrew Jellyfin client for the PlayStation 3. Contribute to Tuggs-Bunny/JellyFin---PS3 development by creating an account on GitHub.
Any advice on PS3 audio DMA (sysAudioPortOpen, DMA ring buffer write tracking, sysEventQueueReceive), RSX vsync-driven frame scheduling, or general PSL1GHT tips would be hugely appreciated. Also happy to chat about the pipeline if anyone's curious.
Cheers