1. Where it comes from
Android TVs and boxes decode video with a hardware unit inside the processor (SoC). It is fast and does not heat the device, but it can be picky. The most common problem is 1080i - interlaced video, where each frame is sent as two half-pictures. Many stations in Europe still broadcast this way, and some IPTV providers pass it on unchanged.
Some hardware decoders accept such a stream without an error - the player sees it as "playing" - but deliver no frames to the screen, or only every so often. Hence the frozen picture with working sound: audio is decoded separately and has no such problem.
VLC does not suffer from this because by default it decodes in software, with the FFmpeg library, on the main CPU. The same library is built into IPappTV as the backup decoder.
2. What the app does on its own
Every channel start runs through a ladder of attempts. The loading screen tells you which stage you are at: "Connecting…", "Reconnecting…", "Switching decoder…".
- Attempt 1 - hardware decoder. The default start, lowest load.
- Attempt 2 - reconnect with the same decoder. Many IPTV panels spin up the transcoder only on the first request, and the first connection hits an empty playlist. That is not a decoder problem yet, so the decoder is not changed prematurely.
- Attempt 3 - the other decoder. If the channel still will not start, the app switches to FFmpeg. When the channel then plays steadily for a few seconds, the choice is remembered for that channel - next time it starts in software right away, without the ladder.
Separately there is a freeze watchdog. From the player's point of view a frozen picture is not an error - the state is "playing", data flows. So every two seconds the app checks the counter of actually rendered frames. If for six seconds not a single new frame has arrived while playback formally continues, it switches the decoder and immediately saves the choice for the channel. Six seconds is a compromise: shorter produced false alarms on channels that simply start slowly.
The ladder works both ways. If you chose FFmpeg globally and a stream comes along that the software decoder cannot keep up with (typically 4K HEVC), the app tries hardware and remembers that.
3. What to do manually
If the picture is frozen and the app has not switched by itself (for example six seconds have not passed yet, or the stream delivers single frames now and then, which resets the counter):
- In the player press the down arrow - the function bar appears.
- Move to the decoder icon and press OK.
- Choose "Always software (FFmpeg)". The channel restarts and this setting is remembered for this channel only.
If there are many such channels - a whole list from one provider - change the starting point globally: Settings → "Video decoding (default)" → "Software (FFmpeg)". The ladder will still rescue with hardware those channels FFmpeg cannot handle.
The per-channel "Always hardware" and "Always software" settings disable the ladder for that channel. That is deliberate: whoever picks them wants a predictable start, not a dozen seconds of attempts.
4. The cost of the software decoder
FFmpeg decodes on the main CPU. On Chromecast with Google TV, Shield or newer TVs, 1080i and 1080p go without trouble. On weaker boxes and older TVs a high-resolution, high-frame-rate stream may drop frames in FFmpeg - smooth in hardware, stuttering in software. We have no measurements for specific models; it depends on the processor and the stream. That is why the app starts in hardware by default and moves to FFmpeg only when it has to.
Software decoding also uses more energy - on a phone it shortens battery life noticeably. On a TV that does not matter.
5. Remembered decoders - how to undo
The app stores one decision per channel: "hw" or "sw". If you changed provider, the provider started transcoding channels differently, or channels began starting with the wrong decoder, clear everything with one button: Settings → "Clear remembered decoders". For a single channel, pick "Automatic" from the bar.
6. When it does not help
- A black screen rather than a frozen picture is a different problem - turn off tunneled playback in Settings. On some TVs tunneling gives sound without picture.
- Stuttering in FFmpeg too - check the channel in VLC on the same device. If it stutters there as well, the device is too weak for that stream or the connection is the problem; if VLC is smooth, write to us.
- Stuttering on all channels, including 720p - not a decoder issue. Raise the player buffer in Settings (default 2.5 s) and check the connection.
Write to kontakt@ipapptv.com with the device model, Android version and whether the channel works in VLC. No stream addresses.
