Мне удалось воспроизвести видео с помощью TextureView и MediaPlayer на Android. Я сделал это так: Я создал поверхность с SurfaceTexture:Как сделать TextureView воспроизведение видео с закругленными углами и эффектом пузыря
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int w, int h)
{
mSurface = new Surface(surfaceTexture);
...
...
}
Attatch Поверхность для MediaPlayer:
try
{
mMediaPlayer.setDataSource(mPlayUrl);
mMediaPlayer.setSurface(mSurface);
...
...
}
Это нормально, но не достаточно для меня. Я ожидаю, что TextureView быть с закругленными углами и выглядит как пузырь (с углом), смотрите на рисунке ниже:
Я нашел статью (Round video corners on Android), который является очень полезным, но автор выбрал GLSurfaceView и только реализованы круглые углы. Я считаю, что TextureView также подходит для реализации моего эффекта, обработка SurfaceTexure - это ключ. Но я не знаком с opengl, кто может дать мне несколько советов?
Это действительно хорошая статья. Вы можете использовать тот же подход путем рендеринга с OpenGL ES в SurfaceTexture TextureView. Создание бокового выпуклости потребует либо бритья с правого края видео, либо растяжения содержимого в сторону. В любом случае вам нужно выяснить, как работает отображение текстур OpenGL. – fadden
Собственно, за то, что вы делаете, его подход № 1 может работать нормально. Создайте представление, которое находится поверх TextureView, которое в основном прозрачно, и просто маскирует углы и правый край, используя тот же цвет, что и фон. – fadden
@fadden Автор этой хорошей статьи дал 3 подхода, но он сказал, что TextureView не подходит для этого. Его слова: «Первые два, конечно, самые удобные, но мы не имеем никакого контроля над тем, как видео отображается на экране (было бы замечательно, если TextureView позволял бы вам определять свою собственную геометрию + шейдеры), и мы не получаем доступ к тому, где хранятся фреймы, поэтому мы можем их модифицировать ». Вы имеете в виду, что он был неправ? – dragonfly