我正在编写一个Android应用程序,其主代码库使用NDK(使用SDL,特别是SDL_gpu)以本机代码编写 . 该应用程序需要实时流式传输和解码高清视频,理想情况下,它将被合成为许多2D GPU纹理之一 .

我已经看过解码视频的完全原生解决方案(比如这个:https://github.com/googlesamples/android-ndk/blob/master/native-media/app/src/main/cpp/native-media-jni.c),但是我很想避免在本机代码中编写网络流等的额外复杂性 .

我想要做的是在SDL世界及其GLES纹理和ExoPlayer(https://github.com/google/ExoPlayer)之间共享GPU纹理,它存在于Java世界中,并具有我需要的所有流和解码功能 . 通过这种方式,我要么在OpenGL(或SDL_gpu)中创建一个纹理,并以某种方式告诉ExoPlayer渲染它并在帧更新时给出回调,或者以某种方式获取Android Surface ExoPlayer的句柄然后进行渲染并合成它与我在SDL中的其他纹理和OpenGL代码一起使用 .

我也可以使用灵活的“原生”解决方案来完全避免使用Java(我甚至更喜欢它),但我已经完全放弃了这个想法 .