Entwicklung eines nativen Video -Plugins für Unity for Android - Surface ist immer schwarz. Was mache ich falsch?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Entwicklung eines nativen Video -Plugins für Unity for Android - Surface ist immer schwarz. Was mache ich falsch?

Post by Anonymous »

Ich entwickle ein nationales Android-Plugin (C ++ und Kotlin), um die integrierte Videoplayer von Unity zu ersetzen, die in AR schlecht abschneidet (Audio und Video sind nicht synchron, nachverfolgt und niedrig). Ziel ist es, Hochleistungs-Videoinhalte auf eine Einheitstextur zu streamen, die in AR-Szenen verwendet werden kann (auf AR-Markierungen gerendert). Texturzeiger und verwenden Sie
texture2d.crereexternaltexture (), um es an ein Material zu binden. /> In C ++ (GL -Textur+ JNI -Schnittstelle):
Ich erstelle eine Textur mit GL_TEXTURE_EXTERNAL_OESS verwendet OpenGL im Render -Thread und rufe dann mit < /code> JNI in Kotlin auf

Code: Select all

to configure a
MediaCodec

Code: Select all

decoder and attach it to a Surface wrapping the
surfacetexture```. Decodieren und Rendernrahmen
i rufen update)
I bind the texture using CreateExternalTexture() with the pointer from the plugin
I assign the texture to a material on a quad (shader is Unlit/Texture)
I also tried UpdateExternalTexture() every frame
Logs show decoding works (audio plays, MediaCodec queues and veröffentlicht Puffer)
Texturzeiger ist ungleich Null < /p>

Code: Select all

SurfaceTexture.updateTexImage()< /code> heißt
, aber nichts wird gerendert; Der Bildschirm bleibt schwarz. Surfacetexture.setonframeAvailableListener () 
(aber feuert nicht)
Gibt es eine bessere Möglichkeit, die native OES -Textur an das Surfacetextur zu binden. longptr.toint () In Kotlin korrumpieren Sie den Texturzeiger?
C ++:

Code: Select all

glGenTextures(1, &g_VideoTextureId);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, g_VideoTextureId);
glTexParameteri(...);
< /code>
Kotlin: < /p>
globalSurfaceTexture = SurfaceTexture(longPtr.toInt())
surface = Surface(globalSurfaceTexture)
< /code>
Einheit C#: < /p>
IntPtr ptr = new IntPtr(_longPtrValue);
videoTexture = Texture2D.CreateExternalTexture(width, height, TextureFormat.RGBA32, false, false, ptr);
targetRenderer.material.mainTexture = videoTexture;

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post