Как очистить SurfaceTexture после использования с MediaPlayer?

Я использую ListView с детьми TextureView. TextureView использует MediaPlayer для воспроизведения видео. Когда TextureView перерабатывается, последний кадр остается на поверхности, пока следующий MediaPlayer не использует его.

Каков самый простой способ «очистить» поверхность TextureView (например, черный), чтобы старые кадры не отображались?

Solutions Collecting From Web of "Как очистить SurfaceTexture после использования с MediaPlayer?"

После того как я боролся с этим некоторое время, я придумал пару возможных решений:

A) очистить поверхность, используя GLES. Вы можете увидеть пример в Grafika (проверьте метод clearSurface ()). Я лично не поклонник этого, потому что я не думаю, что резкий переход к черному выглядит особенно хорошо, и это довольно немного технических издержек, если вы еще не используете код GL. Кроме того, это похоже на работу с API 17+.

Б) Мое выбранное решение состояло в том, чтобы просто создать новый TextureView и добавить его в соответствующее представление каждый раз, когда я захочу воспроизвести видео, вместо повторного использования старого. Я бы не стал называть это хорошим решением, но это наименее ужасное, что я мог найти.

C) Одна вещь, которую вы, возможно, сможете сделать, если снова воспроизводить одно и то же видео, – это попытаться найти первый кадр видео, когда он будет воспроизводиться. Затем в следующий раз, когда будет мигать последний кадр, он не будет виден, так как он будет тем же самым кадром, что и начало видео. У меня был некоторый успех в этом, но я не мог заставить его работать надежно на всех устройствах. Это также довольно ясно взломать.

Удачи, это было очень сложно, чтобы попытаться исправить.