Skip to content

Instantly share code, notes, and snippets.

View nazmulidris's full-sized avatar
🤙
❯ Write Rust 🦀 for r3bl-open-core ❯ rec 📹 live code vids developerlife YT chan

Nazmul Idris nazmulidris

🤙
❯ Write Rust 🦀 for r3bl-open-core ❯ rec 📹 live code vids developerlife YT chan
View GitHub Profile
<com.google.android.exoplayer2.ui.PlayerView
...
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/exoplayerview_activity_video"
app:use_artwork="true"
app:default_artwork="@drawable/loading"
app:show_timeout="5000"
app:fastforward_increment="10000"
app:rewind_increment="10000"
app:controller_layout_id="@layout/custom_playback_control_minimal" />
<LinearLayout
...
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_gravity="center"
android:background="@#CC000000"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
override fun onCreate(savedInstanceState: Bundle?) {
...
playerHolder = PlayerHolder(this, exoplayerview_activity_video, state)
mediaSession = MediaSessionCompat(this, packageName)
connector = MediaSessionConnector(mediaSession)
}
override fun onStart() {
...
playerHolder.start()
override fun onCreate(savedInstanceState: Bundle?) {
...
mediaSession = MediaSessionCompat(this, packageName)
connector = MediaSessionConnector(mediaSession)
// If QueueNavigator isn't set, then mediaSessionConnector won’t handle
// MediaSession actions (they won't show up in the minimized PIP activity):
// [ACTION_SKIP_PREVIOUS], [ACTION_SKIP_NEXT], [ACTION_SKIP_TO_QUEUE_ITEM]
connector.setQueueNavigator(object : TimelineQueueNavigator(mMediaSession) {
override fun getMediaDescription(idx: Int): MediaDescriptionCompat {
return MediaCatalog.list.get(idx)
player = ExoPlayerFactory.newSimpleInstance(context, DefaultTrackSelector())
.apply {
...
}
fun buildMediaSource(): MediaSource {
val uriList = mutableListOf<MediaSource>()
MediaCatalog.list.forEach {
uriList.add(createExtractorMediaSource(it.mediaUri!!))
}
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val audioAttributes = AudioAttributesCompat.Builder()
.setContentType(AudioAttributesCompat.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributesCompat.USAGE_MEDIA)
.build()
class AudioFocusWrapper(private val audioAttributes: AudioAttributesCompat,
private val audioManager: AudioManager,
private val player: SimpleExoPlayer) : ExoPlayer by player, AnkoLogger {
private var shouldPlayWhenReady = false
private val audioFocusListener =
AudioManager.OnAudioFocusChangeListener { focusChange ->
when (focusChange) {
AudioManager.AUDIOFOCUS_GAIN -> {
if (shouldPlayWhenReady || player.playWhenReady) {
<application>
<activity
android:name="com.example.android.videoplayersample.VideoActivity"
android:supportsPictureInPicture="true"
...>
</activity>
...
</application>
override fun onUserLeaveHint() {
enterPictureInPictureMode(
with(PictureInPictureParams.Builder()) {
val width = 16
val height = 9
setAspectRatio(Rational(width, height))
build()
})
}
override fun onPictureInPictureModeChanged(
isInPIPMode: Boolean, newConfig: Configuration?) {
exoplayerview_activity_video.useController = !isInPictureInPictureMode
}