2015-08-26 10 views
2

Мне удалось воспроизвести видео с помощью 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 быть с закругленными углами и выглядит как пузырь (с углом), смотрите на рисунке ниже: effect I expect

Я нашел статью (Round video corners on Android), который является очень полезным, но автор выбрал GLSurfaceView и только реализованы круглые углы. Я считаю, что TextureView также подходит для реализации моего эффекта, обработка SurfaceTexure - это ключ. Но я не знаком с opengl, кто может дать мне несколько советов?

+0

Это действительно хорошая статья. Вы можете использовать тот же подход путем рендеринга с OpenGL ES в SurfaceTexture TextureView. Создание бокового выпуклости потребует либо бритья с правого края видео, либо растяжения содержимого в сторону. В любом случае вам нужно выяснить, как работает отображение текстур OpenGL. – fadden

+0

Собственно, за то, что вы делаете, его подход № 1 может работать нормально. Создайте представление, которое находится поверх TextureView, которое в основном прозрачно, и просто маскирует углы и правый край, используя тот же цвет, что и фон. – fadden

+0

@fadden Автор этой хорошей статьи дал 3 подхода, но он сказал, что TextureView не подходит для этого. Его слова: «Первые два, конечно, самые удобные, но мы не имеем никакого контроля над тем, как видео отображается на экране (было бы замечательно, если TextureView позволял бы вам определять свою собственную геометрию + шейдеры), и мы не получаем доступ к тому, где хранятся фреймы, поэтому мы можем их модифицировать ». Вы имеете в виду, что он был неправ? – dragonfly

ответ

-1

Учитывая, что ваш фон является сплошным цветом, вы можете легко достичь этого эффекта с помощью mask. Если у вас есть какой-то фон, это не сработает.

+0

Да. Если фон изменится, появится маска. Это нехорошее решение. – dragonfly