google / google/ExoPlayer

Pulldown algorithm when playing 50 fps content on 60 hz

Open
#8,774 6 comments 0 reactions 1 assignee Assigned to @microkatz View on GitHub
bug: device specific needs triage question
Dominant language
Java
Stars
21.9k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

Hi all!
We were recently upgrading the ExoPlayer in a project and we experienced some weird behavior. Earlier we were using 2.10.8, and after the upgrade we have 2.12.1. I know it is still not the newest version, but in the business world these things take time, so for the sake of the example, let's just not focus on this part of the issue for now. (I would be more interested in understanding the reason behind the issue).

As mentioned in the title, we have a 50 fps live stream. We play it on a custom Android Tv device (dedicated hardware, android version and firmware, every test using the exact same setup). The display is on 60 hz.
With 2.10.8, it looked smooth, visually there was no stuttering, at least not something that the human eye would notice. With 2.12.1 however, sometimes there is a black frame displaying. Only one frame. The problem is not consistent, not happenning on every display (tv, monitor). So far we were not able to tell what kind of displays have this issue. We start playing the stream and after a while, the stream starts blinking. Blinking means that black frames are popping up at random.
The beginning of the problem can be delayed if we start playing around with some LoadControl parameter. If the buffer is bigger, the problem appears later, but after ~30 minutes, it is happening anyways and it is pretty frequent from that point on. Like there is a black frame in every ~30 seconds.

There are no exceptions like BehindLiveWindowException and also the frames are not dropped. Based on the logs, nothing bad is happening, and we also did not find anything worrying using Charles proxy. We used the same stream with the older player version, and it was working just fine on the problematic displays.

_Also if we switch the display to 50 Hz, the problem is solved, stream is playing smoothly._

Does anyone have a guess what can couse this issue? Did the pulldown algorithm change? Is there a way to solve this problem? Can we expect the latest version of the player to have improvements in this area? (yeah, I know, I should just test it, but it is not that easy because of some circumstances, but we are on it :) )

I can probably share some samples if needed, but first I would be just interested in some theoretical discussion, maybe somebody already knows the reason for this.

Hope I was clear enough, and thanks in advance!

Edit: here is a video demonstrating the problem:
https://drive.google.com/file/d/1Nqf4GKQy84oh8h5_MbRtygZlRo8rmYhG/view?usp=sharing

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.