Big update: Recording is here — plus radio tags, last-channel resume and a long list of fixes
Headent Client 1.0.4 is out. This is the release that adds recording. Until now the app could only play back recordings that already existed on your server — that was the biggest gap left, and it is what this release is built around.
The gap since the last update was longer than usual. Work kept me busy, but it was also deliberate: rather than pushing builds out quickly, I spent the time testing properly and working through what testers reported here and on GitHub. Almost everything below either came from a request in this thread, from a GitHub issue, or from a bug I only found because someone described exactly what they were seeing.
Source & releases: MikrotikExe/headentclient
Google Play: https://play.google.com/store/apps/details?id=sk.tvhclient
Website: https://headentclient.com
As always, the Play Store update takes about 24–36 hours to reach everyone after publishing. APKs on GitHub are available immediately.
Recording
- Schedule and cancel from the programme guide, from a channel's programme detail, and from the player itself — the classic control bar, the modern TV overlay and the info window all have it. The button switches between Record and Cancel depending on the state of the current programme.
- Stop a running recording and delete a finished one from the archive — long press on a phone, long OK and then down to the delete entry on TV.
- Duplicate detection — scheduling a programme that is already being recorded on another channel now gives a clear message instead of the server's raw "Could not add dvrEntry".
- Indicators everywhere — a badge in the programme detail shows whether a programme is recording, already recorded or merely scheduled, and channels currently being recorded carry a red dot in the channel lists, in the player's channel bar and in the full channel list.
- DVR profile per server — choose which recording profile the server should use. Leaving it empty lets the server decide, which is what most setups want. Note that Tvheadend only publishes the profiles an account is allowed to use, so the list can be shorter than the one in the web interface.
Recording requires an account with DVR rights on the server. If the button does not appear at all, that is the first thing to check.
Living with a set-top box
- Start with the last channel. After startup the app loads the channel list and resumes the TV channel or radio station you were last watching, so a box comes back to where you left off rather than to a menu. It loads the full playlist and groups first, so channel up/down works immediately. On by default, switchable in Settings.
- Groups are remembered. The last selected tag group is stored separately for TV and radio, per server, and it applies both to the lists and to the player. This also covers the earlier request in this thread about the app always defaulting to "All".
Radio
- Tag filtering — the radio list now has the same tag chips as the channel list, so if you sort your stations by genre or country you can finally use it.
- Radio and TV are told apart properly. The split used to rely on tag names, which failed whenever tags were named in another language or radio stations had no tags at all. The app now reads the DVB service type from the server, the same way pvr.hts does it.
EPG language
Tvheadend merges OTA and XMLTV data into a single event and keeps the different texts as language variants. Which one a client receives depends on the language preference it sends — and the app was sending none, so it always got the server default. That is why some users saw sparse OTA text where Kodi showed their richer XMLTV data.
The app now sends its language preference on every path: hello, enableAsyncMetadata and getEvents over HTSP, and the lang parameter over HTTP. This applies to every EPG module, not just XMLTV.
Playback fixes
- Seeking in archive recordings — the clock and progress bar could fall back to zero after a jump.
- Matroska recordings played as a black screen. The app forced the MPEG-TS demuxer on every recording regardless of container, which works for
pass and fails for everything else. It no longer forces one — libVLC detects the container from the file, as Kodi lets ffmpeg probe it — so matroska, mp4 and webm recordings play as well as pass does.
- Timeshift rewind window now comes from what the server actually reports (
timeshiftStatus) instead of an estimate. If your server has on-demand timeshift enabled, the buffer only starts when a client asks for it, and seeking into a buffer that does not exist yet used to freeze the picture.
- HDR switching is off by default. Automatic refresh-rate switching now only changes the rate seamlessly, without an HDMI re-sync. Turn it back on in Settings if your setup handles mode changes well.
Other fixes
- Recording unavailable over HTTP —
api/access/whoami returns the rights as numbers rather than a list of strings, so the app always concluded the account could not record. Both forms are accepted now.
- The recording button showed the wrong state — it was read before the channel index had changed, so it reflected the channel you had just left.
- Wrong length on stopped recordings — a recording stopped early kept the planned programme length instead of the real file length.
- The archive did not show newly finished recordings until the app was restarted; it now refreshes on open, and the TV archive has a refresh button.
- Crash after reinstalling. The encrypted settings file survives a reinstall while its key in the Android Keystore does not, and the mismatch crashed the app before its first screen. The store is now rebuilt when that happens, and it is excluded from Android's automatic backup.
- Focus in the TV archive no longer flashes through the left rail when you open a folder.
- The home screen could get stuck when switching tiles quickly.
- Various string and grammar corrections across the 31 languages.
Known issues
- On older 32-bit boxes, 1080p50 10-bit HEVC channels may still stutter over HTSP. The HTTP path with the
pass profile works around it.
- Timeshift is an HTSP feature — it is not available over HTTP, and Tvheadend does not report timeshift status for radio channels.
What's next
Releases will come more slowly from here, and that is on purpose. The focus will be stability and correctness, with new features only where they clearly earn their place. Quality over quantity — a release that works everywhere is worth more than a longer changelog.
The project carries on, and every question and report gets read and thought through properly, whether it lands here, on GitHub or by email. Several of the fixes above exist only because someone pushed back when my first explanation was wrong. That is genuinely how this gets better, so please keep it coming.
Thanks again to the Tvheadend project, and to everyone who has tested and reported so far.