我的目標是有ExoPlayer顯示彩色視頻爲黑色和白色。如何「將片段着色器應用於GLSurfaceView/TextureView」?
根據這一this Github issue我應該能夠與Open GL來實現這一目標:
ExoPlayer會使視頻在任何表面。您可以使用SurfaceTexture,此時您將視頻渲染爲OpenGL ES紋理。一旦你有,你可以做任何事情,OpenGL的 讓你做,包括使用像素着色器將視頻轉換爲 黑色和白色。
在an older, but related, discussion in the Android Developers Google group羅曼蓋伊給出了一些細節,如何這要做到:
- 創建OpenGL上下文
- 生成一個OpenGL紋理名
- 與紋理創建表面紋理命名
- 傳遞表面紋理到相機
- 聽FO [R更新在表面紋理更新,使用着色器繪製 的OpenGL紋理你想
簡單:)
,並通過與Google's Cardboard example project玩弄我已經確定了一個片段着色器類似以下應大約右:
precision mediump float;
varying vec4 v_Color;
void main() {
float grayscale = v_Color[0] * 0.3 + v_Color[1] * 0.59 + v_Color[2] * 0.11;
gl_FragColor = vec4(grayscale, grayscale, grayscale, 0.1);
}
我也設法把ExoPlayer渲染成TextureView
而不是通常的SurfaceView
:
mPlayer.sendMessage(
videoRenderer,
MediaCodecVideoTrackRenderer.MSG_SET_SURFACE,
new Surface(mVideoTextureView.getSurfaceTexture())
);
現在,我該如何連接到一起的一切嗎?
在哪裏可以「着色」着色器到TextureView
?這甚至可能,或者我應該使用GLSurfaceView
而不是?我需要在Renderer
做什麼?
你見過這樣的:https://github.com/google/ExoPlayer/issues/1220及其中的鏈接? –
謝謝,鏈接的博客確實提供了一個工作解決方案!非常感謝! –
嘿大衛,我也試圖做同樣的事情,但我堅持在過去2天這一點。我看了VidEffect的VideoSurfaceView代碼,但是當我整合了exoplayer時,視頻呈現黑色,但是有音頻。如果你仍然有工作解決方案,如果你可以分享這個解決方案,這意味着很多。 –