Created
June 17, 2020 01:42
-
-
Save jmarsican/a510ccefa0374f4377d90de8e37c47e0 to your computer and use it in GitHub Desktop.
Sample app for an easy Virtual Reality integration with ExoPlayer. This is achieved playing 360 videos (spherical) and using device motion sensors to navigate within them
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class VRActivity : AppCompatActivity() { | |
private var player: SimpleExoPlayer? = null | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.video_player_layout) | |
(player_view.videoSurfaceView as SphericalGLSurfaceView) | |
.setDefaultStereoMode(C.STEREO_MODE_TOP_BOTTOM) | |
} | |
override fun onStart() { | |
super.onStart() | |
if (Build.VERSION.SDK_INT > 23) { | |
initializePlayer() | |
} | |
} | |
override fun onResume() { | |
super.onResume() | |
if ((Build.VERSION.SDK_INT <= 23 || player == null)) { | |
initializePlayer() | |
} | |
} | |
override fun onPause() { | |
super.onPause() | |
if (Build.VERSION.SDK_INT <= 23) { | |
releasePlayer() | |
} | |
} | |
override fun onStop() { | |
super.onStop() | |
if (Build.VERSION.SDK_INT > 23) { | |
releasePlayer() | |
} | |
} | |
private fun buildMediaSource(uri: Uri): MediaSource { | |
val dataSourceFactory = DefaultDataSourceFactory(this, "javiermarsicano-VR-app") | |
// Create a media source using the supplied URI | |
return ProgressiveMediaSource.Factory(dataSourceFactory) | |
.createMediaSource(uri) | |
} | |
private fun initializePlayer() { | |
player = SimpleExoPlayer.Builder(this).build() | |
val uri = Uri.parse("https://storage.googleapis.com/exoplayer-test-media-1/360/congo.mp4") | |
val mediaSource = buildMediaSource(uri) | |
player?.prepare(mediaSource) | |
player_view.player = player | |
player_view.onResume() | |
} | |
private fun releasePlayer() { | |
player_view.onPause() | |
player?.release() | |
player = null | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment