Example app for immersive 360° (stereo 3D) video playback with Spectaculum
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Spectaculum Sample App: Immersive 360° video playback with ExoPlayer

This app demonstrates immersive video playback with Spectaculum and ExoPlayer 2 on Android. Spectaculum provides a native view widget for picture and video content, in contrast to alternatives building on WebViews.

By default, this app play back the stereoscopic 3D 360° video "House Demo". To switch to the monoscopic 360° high resolution test video "Orion360 Test Video", change MainActivity#mSelectedVideoSource to 0.


Logcat error "E/ShaderProgram: Error linking program"

Happens when the effect is activated (mSpectaculumView.selectEffect(0)) before the OpenGL surface is ready. This is not really a problem because the effect gets reinitialized later once the surface is ready, and works as expected. You can get rid of the error by activating the effect at a later time e.g. in onSurfaceCreated where the GL surface is guaranteed to be ready, or when the video is loaded.

This error happened in earlier versions of this example app where selectEffect was called from onCreate. The call was moved to onSurfaceCreated in commit 95705cc to fix this error.

EffectException: java.util.ConcurrentModificationException

This exception comes from a concurrent modification of the list of parameters that the shader effect manages internally. This list is modified during initialization of the effect, and when a viewport navigation method (e.g. viewport touch navigation) is attached. Initialization happens when selecting the effect for the first time (with selectEffect(index)), or when it is automatically reinitialized because the surface changes (e.g. surface size change when video rendering starts).

To avoid a collision of these events, it is best to not select the effect until the surface is ready (onSurfaceCreated).


Copyright (C) 2016 Mario Guggenberger mg@protyposis.net. Released under the Apache 2.0 license.