With great power comes great responsibility. OpenGL (while not a superpower per se) is still a mighty library capable of great things. However, like a Hulk temper tantrum, a lack of control can have bad results. With this in mind, we would like to share some tips about working with OpenGL and surface layers so… Continue reading Surface Layers and the Live Streaming Android SDK
With great power comes great responsibility. OpenGL (while not a superpower per se) is still a mighty library capable of great things. However, like a Hulk temper tantrum, a lack of control can have bad results.
With this in mind, we would like to share some tips about working with OpenGL and surface layers so you can harness that power. We want to help you build successful applications and don’t like it when you’re angry.
Notes about Android and Surface Layers:
- Surfaces, and related
GLSurfaces
, allow images to be drawn directly to the Android window. These surfaces are used by the Red5 Pro Android SDK to draw the camera preview. TheR5VideoView
draws the camera preview with aSurfaceView
and an incoming stream’s video with aGLSurfaceView
. - These
SurfaceView
objects are drawn separately from the Android UI. - They have multiple layers, specifying that only one surface ‘should’ be on each at any one time. From Top to Bottom they are:
- “OnTop” (Surface Layer)
- UI (Everything in layouts and non-surface views added programatically)
- “MediaOverlay” (Surface Layer)
- Default Surface Layer
- Having multiple
Surfaces
on one layer technically leads to undefined behavior. This effectively means that it’s up to the OEM’s discretion to decide how surface layering is handled. Most will have taken care of any issues that might arise from z-fighting.
Tips:
- Point of confusion:
- SurfaceViews added in layouts (ie – not added to view hierarchy by
addView()
) are drawn as normal parts of the UI layer only when they have a background. - Important note – This means if your app uses a background on any of its views or layouts in the same window as an
R5VideoView
. TheDebugView
will draw on the correct UI layer, but the stream view will be behind the background. - The stream will always be drawn under any alert or dialog views.
- Troubleshooting – if your stream isn’t displaying correctly, make sure there aren’t any backgrounds sharing its draw space.
The Red5 Team brings together software, DevOps, and quality assurance engineers, project managers, support experts, sales managers, and marketers with deep experience in live video, audio, and data streaming. Since 2005, the team has built solutions used by startups, global enterprises, and developers worldwide to power interactive real-time experiences. Beyond core streaming technology, the Red5 Team shares insights on industry trends, best practices, and product updates to help organizations innovate and scale with confidence.