vdatanet 1644 Posted July 27 Posted July 27 (edited) Hi everyone, I'm the developer of Embeat, a native iOS music player for Emby, and it just went live on the App Store today. Full disclosure up front: it's my own app and it's a paid subscription (€9.99/year, one month free) — I'd rather say that in the first paragraph than bury it. Why I built it I have a large, carefully tagged FLAC/ALAC collection on my own server, and I kept running into the same thing: the general-purpose media-center apps treat music as a second-class citizen. What I wanted was the Plexamp-style experience — but for Emby. Reading this forum, it turns out I'm far from the only one who's been asking for that, so I built it. Embeat does music and nothing else. No video, no photos, no library management. It talks straight to your server; there is no cloud service of mine in the middle. What it does Gapless playback — lossless direct play of FLAC and ALAC, with no audible gap between tracks on live albums and continuous mixes. HLS/AAC on mobile — when the network gets shaky, the server transcodes to adaptive HLS/AAC. Instant seek, and it recovers from dropouts without skipping the track. Mobile data now streams MP3, and the HLS/AAC path is on hold. The reason is gapless: over HLS, iOS plays through AVPlayer, and AVPlayer does not chain one track into the next without a gap, so on mobile data every track change cost a pause you could count in seconds. So gapless on capped quality works now, on any network. Over HLS it never did. Offline downloads — tracks, albums or whole playlists onto the device, playable with the server unreachable. Original quality or AAC to save space, with a screen to see and clear what you've got stored. Embeat Connect (DLNA/UPnP) — automatic discovery of renderers on your network, then playback, volume and position control from the phone. Playlist management — create, rename, delete, add/remove tracks and reorder. Written back to the server. Library browsing — artists, albums, tracks, genres and playlists, as a list or a grid per collection type, with sorting (name, date added, year, artist) and filters (genre, favorites). Long-press context menu — play next, add to queue, add to a playlist, start a radio, jump to album/artist, toggle favorite. Editable queue, persistent shuffle/repeat, customizable home carousels, global search grouped by type. Multi-server — add as many servers as you like and switch between them without logging in again. Siri — "Play <artist> on Embeat" via App Intents. Lock screen / Control Center artwork and controls, background playback, and playback reporting to the server so recently played, play counts and now playing stay correct. Interface in English, Catalan and Spanish, following the system language. Requirements and honest caveats iPhone, iOS 18.4 or later. No iPad-specific layout yet, no CarPlay yet. No Android version yet. It's actively in development — the app is built on a shared Kotlin Multiplatform core, so all the server, library and playback logic is already cross-platform. I'm not going to promise a date. Not there yet: lyrics, scrobbling to Last.fm/ListenBrainz, crossfade, ReplayGain, AirPlay/Chromecast, and automatic server discovery on the LAN (you enter the server URL manually the first time). It also works with Jellyfin, since the two share an API surface. I mention it for completeness, not to start anything — most of the driver code is common, with the handful of genuine endpoint differences verified against real servers of both kinds. Privacy Embeat only talks to your server. Credentials are stored encrypted in the device Keychain. No analytics, no tracking, no account with me — the App Store handles the subscription and I never see your library. Links App Store: https://apps.apple.com/app/embeat/id6788410988 Site (features, pricing, FAQ, privacy policy and terms): https://embeat.media I'd genuinely like feedback from people running big libraries — that's where the interesting edge cases live (odd tag layouts, mixed sample rates, huge playlists, slow remote connections). Bug reports and feature requests are welcome here or by email, and I read everything. Thanks to the Emby team and this community — the server does the hard part. Not affiliated with or endorsed by Emby. Emby is a trademark of its respective owner. Edited 10 hours ago by vdatanet 3
vdatanet 1644 Posted July 27 Author Posted July 27 16 minutes ago, ebr said: Planned? Thanks for the suggestion! CarPlay is planned — I'm just wrapping up the Android version first, and it's almost done. CarPlay will follow shortly after. 3
vdatanet 1644 Posted Saturday at 06:42 PM Author Posted Saturday at 06:42 PM (edited) Update — version 1.1.0 is out: Embeat is now native on iPad Quick recap for anyone landing on this thread for the first time: Embeat is a native iOS music-only player for Emby — gapless FLAC/ALAC direct play, offline downloads, DLNA, playlist management. €9.99/year, one month free. It talks straight to your server, with nothing of mine in the middle. Apple approved 1.1.0 today and it's rolling out now. On iPad (the point of this release) - A sidebar instead of the tab bar: Home, Artists, Albums, Songs, Genres and Playlists, always in view. - Two panes when there's room — the list on the left, the detail on the right, without losing your place. - Two-column player, with the full editable queue beside it. - Search shows the results and the selected item at the same time. - Rotating the device keeps both your selection and your place in the list. And for everyone, iPhone included - Tapping a song in Songs, on Home or in search now plays it, with the queue taken from that same list. - Shuffle in the playlist detail and in Songs now runs across the whole library rather than just what's loaded. - New playlists appear under Playlists without pulling to refresh. - Gone: the double back arrow in Genres and Playlists. - Home sections no longer disappear after you reorder them. Requirements are unchanged: iPhone or iPad, iOS/iPadOS 18.4 or later. What's next I had the audio engine independently audited last week and it turned up a handful of genuine playback bugs: a brief dropout at the start of a track, failures on cellular data, opens that never completed, a pause that could get stuck on "loading", and FLAC seeking that made the progress bar lie. Those are fixed and going through TestFlight now, so the next update is mostly playback reliability. Also worth saying here, since it's the thing people have asked for most since launch: Apple has granted me the CarPlay entitlement, so it's no longer blocked on their side. Nothing is built yet and I'm not going to promise a date, but it's coming. Android is still in development and not out. App Store: https://apps.apple.com/app/embeat/id6788410988 Site: https://www.embeat.media Feedback and bug reports: here or joan@vdata.net — I read everything. Thanks again to everyone who tried it and wrote in; several of the iPhone fixes above came straight from this thread. Edited Saturday at 06:42 PM by vdatanet 1
jasonmcroy 325 Posted 17 hours ago Posted 17 hours ago This looks promising. However, I just installed on my iphone and I can connect on my wifi directly to my Emby server with my local IP address but I can't get it to connect if I use my tailscale IP. This same IP works fine on the Narjo app but I wanted to take yours for a spin to see if it could work out for me. Is there any particular reason it shouldn't connect? 1
vdatanet 1644 Posted 16 hours ago Author Posted 16 hours ago 1 hour ago, jasonmcroy said: This looks promising. However, I just installed on my iphone and I can connect on my wifi directly to my Emby server with my local IP address but I can't get it to connect if I use my tailscale IP. This same IP works fine on the Narjo app but I wanted to take yours for a spin to see if it could work out for me. Is there any particular reason it shouldn't connect? Found it — and it's a bug on my side, not your setup. Thanks for the report, it was a good one. Embeat's iOS Info.plist allowed cleartext HTTP, but it also carried NSAllowsLocalNetworking. On iOS 10 and later that second key silently cancels the first one: App Transport Security falls back to its default and only permits cleartext to .local names and private ranges (192.168/16, 10/8, 172.16/12). Tailscale hands out addresses in 100.64.0.0/10, which iOS does not consider local — so http://100.x.y.z:8096 was blocked before it ever left the phone, while your 192.168.x.x address went through. That's exactly the asymmetry you saw, and why Safari and other clients had no trouble with the same IP. I reproduced it against my own Emby over Tailscale and the fix is in: removing that one key makes the connection work. It'll ship in the next update. Note it wasn't Tailscale-specific — any VPN, and any plain-HTTP server outside those private ranges, hit the same wall. In the meantime, if your Emby has HTTPS on 8920 with a certificate valid for a hostname you can resolve over Tailscale, that route works today. 1
vdatanet 1644 Posted 15 hours ago Author Posted 15 hours ago Update — Embeat Connect now plays to Sonos Version 1.2.0 is out. Short recap for anyone new to the thread: Embeat is a native iOS music-only player for Emby — gapless FLAC/ALAC direct play, offline downloads, DLNA, playlist management. €9.99/year, one month free, and it talks straight to your server with nothing of mine in between. Sonos, through Embeat Connect Embeat Connect (DLNA/UPnP) now finds Sonos speakers on your network and plays your library to them: queue, volume, position, and gapless across track boundaries, all driven from the phone. This took longer than I expected because a Sonos doesn't behave the way the UPnP spec suggests. It plays from its own queue rather than from the transport — which is why casting appeared to work while the Sonos app showed nothing playing — it announces itself twice under two different UDNs, and it silently ignores a stream that arrives without a Content-Length. Each of those was measured on a real speaker rather than reasoned about; every theory I had before measuring turned out to be wrong. Two limits worth knowing before you try it: Sonos accepts audio up to 48 kHz. Anything at 44.1 or 48 goes to the speaker untouched, as FLAC. Hi-res tracks are resampled by the server and streamed to the speaker as uncompressed PCM through a small proxy inside the app. There's no lossy re-encode, but it is a sample-rate conversion — I'd rather write that here than call the whole thing "lossless" and let you find out. The cap applies only on the way to the speaker. Playing on the phone itself is unchanged: direct play, whatever your files are. Playback fixes I had the audio engine independently audited and it turned up a set of real bugs, all fixed in this version: A short dropout at the start of a track, and playback failures on cellular data. Tracks that could hang while opening and never start, and a pause that could get stuck on "loading". Stream headers that weren't reaching the server on some requests. Seeking in FLAC reporting the wrong position, so the progress bar lied afterwards. Plugging in headphones mid-track could stop playback instead of switching output. Transferring to a DLNA renderer while paused could fail silently. Plus a handful of iPad interface fixes on top of the iPad support that shipped in 1.1.0. Requirements are unchanged: iPhone or iPad, iOS/iPadOS 18.4 or later. App Store: https://apps.apple.com/app/embeat/id6788410988 Site: https://embeat.media Bug reports and feedback: here or joan@vdata.net — I read everything. If you have a Sonos and a hi-res library, I'd particularly like to hear how it goes: that combination is the one with the most moving parts, and I've tested it on the speakers I own rather than on every model Sonos has ever shipped. Not affiliated with or endorsed by Emby or Sonos. Emby and Sonos are trademarks of their respective owners. 1
r5yk5 18 Posted 14 hours ago Posted 14 hours ago On 27/07/2026 at 10:24, vdatanet said: No Android version yet. It's actively in development — the app is built on a shared Kotlin Multiplatform core, so all the server, library and playback logic is already cross-platform. I'm not going to promise a date. I've subscribed to this thread and put £10 in my piggy bank in anticipation 1
vdatanet 1644 Posted 14 hours ago Author Posted 14 hours ago Just now, r5yk5 said: I've subscribed to this thread and put £10 in my piggy bank in anticipation Thanks, Android is in its final stretch — full feature parity with the iOS release, running on real devices, heading for Play review. No date promised, but it's close.
jasonmcroy 325 Posted 7 hours ago Posted 7 hours ago 8 hours ago, vdatanet said: Found it — and it's a bug on my side, not your setup. Thanks for the report, it was a good one. Embeat's iOS Info.plist allowed cleartext HTTP, but it also carried NSAllowsLocalNetworking. On iOS 10 and later that second key silently cancels the first one: App Transport Security falls back to its default and only permits cleartext to .local names and private ranges (192.168/16, 10/8, 172.16/12). Tailscale hands out addresses in 100.64.0.0/10, which iOS does not consider local — so http://100.x.y.z:8096 was blocked before it ever left the phone, while your 192.168.x.x address went through. That's exactly the asymmetry you saw, and why Safari and other clients had no trouble with the same IP. I reproduced it against my own Emby over Tailscale and the fix is in: removing that one key makes the connection work. It'll ship in the next update. Note it wasn't Tailscale-specific — any VPN, and any plain-HTTP server outside those private ranges, hit the same wall. In the meantime, if your Emby has HTTPS on 8920 with a certificate valid for a hostname you can resolve over Tailscale, that route works today. Excellent. Thanks for the quick response.
jasonmcroy 325 Posted 56 minutes ago Posted 56 minutes ago Trying out the app today on my local network while waiting for the update to test again with tailscale. (I assume version 1.2.0 doesn't include that update) I am trying to get it to connect with my homepods but it never finds any device to connect to when hit the cast to button. Per the website it looks like perhaps that isn't implemented? I see you can connect to Sonos or any DLNA device. Looks like it connects to homepods via airplay. (sorry, not too tech savvy in some areas).
vdatanet 1644 Posted 47 minutes ago Author Posted 47 minutes ago 7 minutes ago, jasonmcroy said: Trying out the app today on my local network while waiting for the update to test again with tailscale. (I assume version 1.2.0 doesn't include that update) I am trying to get it to connect with my homepods but it never finds any device to connect to when hit the cast to button. Per the website it looks like perhaps that isn't implemented? I see you can connect to Sonos or any DLNA device. Looks like it connects to homepods via airplay. (sorry, not too tech savvy in some areas). The VPN issue. Correct: 1.2.0 doesn't have that fix. I found the cause on Sunday and it wasn't where I expected. The app carried two conflicting App Transport Security keys in its config, and on iOS the "local network" exception silently cancels out the "allow plain HTTP" one — so the app could only reach http:// servers inside the classic private ranges (192.168.x, 10.x, 172.16.x). Tailscale hands out addresses in 100.64.0.0/10, which isn't one of them, so iOS blocked the connection before it ever left the phone — and the app just said "couldn't connect to the server", which is why it looked like a server problem when it wasn't. Same story for WireGuard/ZeroTier. It's fixed in 1.2.1, submitted to Apple today, and the error message now names the real cause instead of being generic. 1.2.1 also fixes casting when your phone isn't on the same network as your server — worth knowing if you combine Tailscale and speakers. HomePods. Your read is exactly right. The button in the app is Embeat Connect, which is DLNA/UPnP casting: Sonos, WiiM, network streamers, many AV receivers and TVs. HomePods don't speak DLNA at all — they're AirPlay only — so they'll never appear in that list. You can still play to them today, just through iOS rather than through the app: start playback in Embeat, open Control Center (swipe down from the top-right), tap the AirPlay icon on the audio card, and pick your HomePod. Everything the phone plays goes there, Embeat included. The practical difference between the two: AirPlay — the phone does the work and streams the audio to the speaker. Your phone has to stay on the network and in range; walk out and the music stops. Great for HomePods and Apple TV. Embeat Connect — a real handoff. The speaker fetches the music from your Emby/Jellyfin server directly, and the phone becomes just a remote: play/pause, volume, seek. Lock the phone, take a call, walk out of the room — the music keeps going. (One exception: with Sonos and hi-res files the phone does help out mid-stream, so it stays involved there.) Both devices need to be on the same local network. So: HomePods and Apple TV → AirPlay from Control Center. Sonos and DLNA gear → the Connect button in the app. If you ever do add a DLNA device and the list stays empty, check that Embeat has Local Network permission in iOS Settings — that's the usual culprit. I've noted the idea of putting the system AirPlay picker right next to the Connect list, so you wouldn't have to leave the app for HomePods. Thanks for the report — the VPN one was genuinely useful. 1
vdatanet 1644 Posted 33 minutes ago Author Posted 33 minutes ago 16 minutes ago, jasonmcroy said: I assume version 1.2.0 doesn't include that update Also, 1.2.1 followed it the same day with two fixes for when you're not on your own LAN: servers reachable only over a VPN (Tailscale, WireGuard) on plain HTTP now connect — an App Transport Security mistake on my side that had been there since 1.0 — and casting no longer stalls at 0:00 when your phone isn't on the same network as your server.
jasonmcroy 325 Posted 31 minutes ago Posted 31 minutes ago Excellent. Thanks for the explanation. Simple enough for now to handoff the sound via control center. Looking forward to testing out the vpn setup. For now I will download a few playlists for offline when I go out. I am always listening to music in my car when I drive so I have usually dowloaded the playlists I frequently listen to with the other apps. Just makes it easier sometimes. Currently using Audio-Muse AI to generate some mix type playlists and importing them into Emby. thanks for your work on this app. It looks really great and very easy to navigate. Sorry to bring up another item that I find useful - If I start a song and it plays about 1/2 way through, hit pause, close the app (and quit it completely by swiping up so it's not still running in the background), re-open the app and it doesn't save where you were in the song. This is especially useful in playlists where I usually start a playlist and like to continue listening to it later. But I also usually keep my running apps clean on the phone by completely closing them out every now and then.
vdatanet 1644 Posted 30 minutes ago Author Posted 30 minutes ago Just now, jasonmcroy said: Looking forward to testing out the vpn setup 1.2.1 is alive 1
jasonmcroy 325 Posted 13 minutes ago Posted 13 minutes ago Just update to 1.2.1 - can confirm tailscale is working perfectly now. 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now