MediaHop 0.1.22 - Public Test
MediaHop 0.1.22 includes changes to M3U / IPTV playback, TV compatibility handling, Phone ↔ TV handoff, background playback, diagnostics, authentication, and server support.
This is a public test build. The features below describe the intended behaviour in the current version, but compatibility can vary between phones, TVs, networks, media formats, and IPTV sources.
If something does not work as expected, please include the MediaHop diagnostic log along with your phone model, Android version, TV model if relevant, what you were trying to play, and what happened.
What's New Since 0.1.15
M3U / IPTV
M3U playback has had a number of changes since 0.1.15.
- TV M3U playback uses the MediaHop phone proxy
- Added limited automatic reconnect handling for failed live streams
- Failed live streams retry twice before stopping cleanly
- Each retry uses a fresh playback generation so stale renderer errors from a failed attempt do not affect the next one
- Manual Stop, changing playback target, or starting another source cancels pending retries
- Selected TV remains available after a failed M3U stream
- Added support for duplicate-download filenames such as
.m3u (1)and.m3u (2) - M3U validation checks copied playlist contents instead of relying only on filename or MIME type
- Some oddly named files such as
.m3u.apkcan still be accepted when the copied contents are valid M3U text - Failed playback eventually returns to a clean stopped state rather than reconnecting indefinitely
Live stream reliability still depends on the source itself.
Phone ↔ TV Handoff
Normal server media can be moved between Phone and TV while keeping the current playback position.
- Phone → TV handoff captures the current Phone position
- TV → Phone handoff reads the current TV position
- Active playlists remain on the same item when switching targets
- Remaining playlist items continue on the newly selected target
- Playback target selection remains sticky during the current app session
- Discovered TVs remain available after Stop and normal handoff
- Live streams do not use timestamp resume
TV Playback and Compatibility
Additional DLNA / UPnP handling has been added for behaviour seen during testing.
- Added handling for some Samsung
701 Transition not availableresponses - Added stale TV position and playback-state protection
- Added conditional cleanup when switching away from MKV files with embedded subtitles on affected Samsung TVs
- Added Hisense time-seek handling where compatible metadata is available
- Added support for
TimeSeekRange.dlna.org - Added
-30and+30second TV seek controls - Rapid quick-seek presses can be combined into one larger seek
- Added background-safe TV natural-end detection
- Added screen-off completion handling for Recently Watched and playlist progression
TV behaviour can vary between brands, models, firmware versions, and supported media formats.
Playlist and Recently Watched
- Playlist auto-advance works on Phone and TV
- Recently Watched only records media after natural playback completion
- Screen-off TV completion can still be recorded
- Final playlist completion returns playback to
Nothing Playing - Playlist and Recently Watched rows can be tapped to start playback
- Previous / Next / Play / Pause / Stop controls remain available
- Recently Watched continues to store up to 14 completed items
Stopping or leaving playback early does not add an item to Recently Watched.
Phone Player
The Android player continues to use Media3 / ExoPlayer.
Changes include:
- Landscape playback supports both landscape directions
- Phone → TV handoff is available from the native player
- TV → Phone playback can resume from the TV position for normal files
- TV availability can be checked while Media3 remains open
- Seek, scrub, 15-second skip, fullscreen, and aspect-ratio controls remain available
Phone media compatibility depends on Media3 and the codecs supported by the Android device.
Network Status
MediaHop now shows a lightweight network-status line on the main screen.
Examples:
WI-FI - 5 GHz • ONLINE
WI-FI - 2.4 GHz • ONLINE
MOBILE - 5G • ONLINE
MOBILE - 4G • ONLINE
OFFLINE
This is intended only as a quick indication of the phone's current connection state.
It does not display SSID, carrier, phone number, signal strength, or IP address.
Authentication
MediaHop's optional authentication system now includes:
- 14-day MediaHop login tokens
- Lightweight login rate limiting
- Five failed login attempts within 10 minutes can trigger a 15-minute lockout
- Correct credentials are also rejected until the lockout expires
- Successful login clears the failed-login state
- HTTP Basic Authentication support
- MediaHop authentication and HTTP Basic Authentication can be used together
- Protected Phone playback
- Protected TV playback through the phone proxy
- Authentication continues through normal Phone ↔ TV handoff
Passwords are not written to the normal MediaHop server settings file.
Server Helper
The included media.php helper has been updated.
- Added login rate limiting
- MediaHop token lifetime is now 14 days
- Selected-file TV metadata can include duration when
ffprobeis available - Added metadata used for compatible TV time-seeking
- Long-running media streaming settings remain in place
- Supports HTTP
GET,HEAD, Range, and seek requests - The
apihelper folder is hidden from the returned media list - Additional folder exclusions can be configured
Samplefolders are excluded by default- PHP stream diagnostic logging is disabled
- No server-side transcoding is used
The public media.php uses safe default authentication settings and must be configured by the server owner if MediaHop login protection is required.
Diagnostic Logging
MediaHop includes playback diagnostics covering:
- Media source activity
- Phone proxy activity
- Media3 playback
- DLNA renderer state
- Playback-state transitions
- Failure and retry handling
Tested logging avoids exposing:
- MediaHop authentication tokens
- Authorization headers
- Bearer credentials
- Basic Authentication credentials
- Passwords
- Full protected remote playback URLs
Local network addresses and TV control information may still appear because they can be useful when troubleshooting local playback.
Send Diagnostic Log
A Send Diagnostic Log button has been added to Settings.
Pressing it:
- Finds the current MediaHop diagnostic log
- Attaches the file automatically
- Opens the Android share sheet
- Allows the user to choose Messenger, email, or another compatible app
- Includes the installed MediaHop version in the share message
This avoids having to manually search through Android app-data folders when reporting a problem.
Other Changes
- Multi-TV selection remains available when more than one compatible TV is discovered
- Added background TV natural-end monitoring
- Added server-folder scroll-position restoration
- Added stale playback-state protection in several TV paths
- Added cleanup handling for failed M3U retries
- Unity UI now targets 30 FPS
- Various smaller playback, compatibility, state-management, and regression fixes
Current Features
MediaHop currently supports:
- Browse media from a configured server
- Folder and nested-folder navigation
- Server-wide media search
- Open and browse local M3U playlists
- Search loaded M3U playlists
- Play media directly on Android through Media3 / ExoPlayer
- Stream server media to compatible TVs using DLNA / UPnP
- Stream M3U channels to compatible TVs through the MediaHop phone proxy
- Discover compatible TVs on the local network
- Automatically use a single discovered TV
- Select between multiple discovered TVs
- Phone / TV playback target selection
- Switch normal-file playback from Phone → TV
- Switch normal-file playback from TV → Phone
- Preserve playback position during normal-file Phone ↔ TV handoff
- Persistent playlist playback
- Tap playlist rows to start from a selected item
- Previous / Next controls
- Automatic playlist progression
- Recently Watched history
- Replay Recently Watched items
- Main-screen TV playback controls
- TV playback position and duration display
- TV seek slider
- 30-second TV skip controls
- Play / Pause / Stop controls
- Fullscreen Android playback
- Seek and scrub controls
- 15-second phone-player skip controls
- Landscape playback in either landscape direction
- Multiple aspect-ratio options
- Background TV streaming
- Background TV availability detection
- Screen-off TV completion detection
- Limited automatic M3U reconnect handling
- Main-screen network-status display
- Protected server authentication
- HTTP Basic Authentication support
- MediaHop login/token authentication
- Stop all active playback
- Share the latest diagnostic log directly from Settings
Server Setup
The Server browser uses the included MediaHop media.php helper.
Setup instructions and the PHP file are available in the MediaHop_Server folder of this repository.
You will need a web server with PHP enabled and an HTTP or HTTPS URL that your phone can access.
MediaHop does not require Plex, Jellyfin, Emby, Docker, a database, or server-side transcoding.
Testing
MediaHop is still in active development and compatibility testing.
Different phones, Android versions, TVs, networks, media files, and IPTV sources may behave differently.
I am especially interested in testing on different:
- Android phones
- Android versions
- Home networks and routers
- TV brands and models
- DLNA / UPnP compatible TVs
- Homes with multiple compatible TVs
- M3U / IPTV sources
Useful Server Test
- Install MediaHop
- Find your TV
- Select a TV if more than one is available
- Open the Server browser
- Select an episode or movie
- Let the file play normally
- Try pause, resume, seeking, or Phone ↔ TV switching if desired
- Let a file finish naturally
- Check whether the completed item appears in Recently Watched
Useful M3U Test
- Open an M3U playlist
- Select Phone or TV
- Start a channel
- Let it play normally
- Try changing channels
- If a stream fails, allow MediaHop to run through its retry behaviour
- Confirm failed playback eventually stops cleanly rather than endlessly reconnecting
Longer playback, playlist auto-advance, screen-off playback, background playback, seeking, and repeated Phone ↔ TV switching are also useful to test.
Reporting Problems
If something does not work as expected, please report it through the Issues section of this repository or send the diagnostic log if you are testing directly with the developer.
Useful information includes:
- Phone model
- Android version
- TV brand and model if relevant
- What you were trying to play
- Whether playback was on Phone or TV
- What happened
- What you expected to happen
- Whether the problem happens every time
Screenshots are also useful when relevant.
The Send Diagnostic Log button in Settings can attach the current MediaHop diagnostic log directly through the Android share menu.
Installation
Download the APK attached to this release.
Android may warn that the app is being installed from an external source because MediaHop is not currently distributed through the Google Play Store.
Only install builds downloaded directly from the official MediaHop repository.