Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/development'
Browse files Browse the repository at this point in the history
  • Loading branch information
dsilhavy committed Jan 25, 2024
2 parents 7331bd2 + 88e3ac3 commit 53a4050
Show file tree
Hide file tree
Showing 9 changed files with 590 additions and 63 deletions.
2 changes: 1 addition & 1 deletion .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ android {
minSdk 29
targetSdk 32
versionCode 1
versionName "1.0.2"
versionName "1.1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand All @@ -37,7 +37,7 @@ publishing {
release(MavenPublication) {
groupId = 'com.fivegmag'
artifactId = 'a5gmsmediastreamhandler'
version = '1.0.2'
version = '1.1.0'
afterEvaluate {
from components.release
}
Expand Down Expand Up @@ -65,7 +65,9 @@ dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.fivegmag:a5gmscommonlibrary:1.0.2'
implementation 'com.fivegmag:a5gmscommonlibrary:1.1.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.1'
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.12.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package com.fivegmag.a5gmsmediastreamhandler

import android.content.Context
import android.telephony.CellInfo
import android.telephony.TelephonyManager
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.fivegmag.a5gmscommonlibrary.models.CellIdentifierType
import com.fivegmag.a5gmscommonlibrary.models.TypedLocation

import org.junit.Test
import org.junit.runner.RunWith
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ class ExoPlayerAdapter() {

private lateinit var playerInstance: ExoPlayer
private lateinit var playerView: PlayerView
private lateinit var activeMediaItem: MediaItem
private var activeMediaItem: MediaItem? = null
private lateinit var activeManifestUrl: String
private lateinit var playerListener: ExoPlayerListener
private lateinit var bandwidthMeter: DefaultBandwidthMeter
private lateinit var mediaSessionHandlerAdapter: MediaSessionHandlerAdapter
Expand Down Expand Up @@ -69,32 +70,49 @@ class ExoPlayerAdapter() {
bandwidthMeter = DefaultBandwidthMeter.Builder(context).build()
playerView = exoPlayerView
playerView.player = playerInstance
playerListener = ExoPlayerListener(mediaSessionHandlerAdapter, playerInstance, playerView)
playerListener =
ExoPlayerListener(playerInstance, playerView)
playerInstance.addAnalyticsListener(playerListener)
}

fun attach(url: String, contentType: String = "") {
val mediaItem : MediaItem
val mediaItem: MediaItem
when (contentType) {
ContentTypes.DASH -> {
mediaItem = MediaItem.Builder()
.setUri(url)
.setMimeType(MimeTypes.APPLICATION_MPD)
.build()
}

ContentTypes.HLS -> {
mediaItem = MediaItem.Builder()
.setUri(url)
.setMimeType(MimeTypes.APPLICATION_M3U8)
.build()
}

else -> {
mediaItem = MediaItem.fromUri(url)
}
}

playerInstance.setMediaItem(mediaItem)
activeMediaItem = mediaItem
activeManifestUrl = url
}

fun handleSourceChange() {
// Send the final consumption report
if (activeMediaItem != null) {
mediaSessionHandlerAdapter.sendConsumptionReport()
}
playerListener.resetState()
mediaSessionHandlerAdapter.resetState()
}

fun getCurrentManifestUri(): String {
return activeManifestUrl
}

fun preload() {
Expand All @@ -109,7 +127,6 @@ class ExoPlayerAdapter() {
playerInstance.pause()
}


fun seek(time: Long) {
TODO("Not yet implemented")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,32 @@ https://drive.google.com/file/d/1cinCiA778IErENZ3JN52VFW-1ffHpx7Z/view

package com.fivegmag.a5gmsmediastreamhandler

import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.media3.common.PlaybackException
import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.exoplayer.analytics.AnalyticsListener
import androidx.media3.exoplayer.source.LoadEventInfo
import androidx.media3.exoplayer.source.MediaLoadData
import androidx.media3.ui.PlayerView
import com.fivegmag.a5gmscommonlibrary.eventbus.DownstreamFormatChangedEvent
import com.fivegmag.a5gmscommonlibrary.eventbus.LoadStartedEvent
import com.fivegmag.a5gmscommonlibrary.eventbus.PlaybackStateChangedEvent
import com.fivegmag.a5gmscommonlibrary.helpers.PlayerStates
import com.fivegmag.a5gmsmediastreamhandler.helpers.mapStateToConstant
import org.greenrobot.eventbus.EventBus


const val TAG = "ExoPlayerListener"

// See https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/Player.Listener.html for possible events
@UnstableApi
class ExoPlayerListener(
private val mediaSessionHandlerAdapter: MediaSessionHandlerAdapter,
private val playerInstance: ExoPlayer,
private val playerView: PlayerView
private val playerView: PlayerView,
) :
AnalyticsListener {

Expand All @@ -38,8 +45,9 @@ class ExoPlayerListener(
val state: String = mapStateToConstant(playbackState)

playerView.keepScreenOn = !(state == PlayerStates.IDLE || state == PlayerStates.ENDED)
mediaSessionHandlerAdapter.updatePlaybackState(state)
EventBus.getDefault().post(PlaybackStateChangedEvent(eventTime, state))
}

override fun onIsPlayingChanged(eventTime: AnalyticsListener.EventTime, isPlaying: Boolean) {
var state: String? = null
if (isPlaying) {
Expand All @@ -48,17 +56,37 @@ class ExoPlayerListener(
state = PlayerStates.PAUSED
}
if (state != null) {
mediaSessionHandlerAdapter.updatePlaybackState(state)
EventBus.getDefault().post(PlaybackStateChangedEvent(eventTime, state))
}
}

@RequiresApi(Build.VERSION_CODES.R)
override fun onDownstreamFormatChanged(
eventTime: AnalyticsListener.EventTime,
mediaLoadData: MediaLoadData
) {
EventBus.getDefault().post(DownstreamFormatChangedEvent(mediaLoadData))
EventBus.getDefault().post(DownstreamFormatChangedEvent(eventTime, mediaLoadData))
}

override fun onLoadStarted(
eventTime: AnalyticsListener.EventTime,
loadEventInfo: LoadEventInfo,
mediaLoadData: MediaLoadData
) {
EventBus.getDefault().post(LoadStartedEvent(eventTime, loadEventInfo, mediaLoadData))
}

override fun onPlayerError(eventTime: AnalyticsListener.EventTime, error: PlaybackException) {
Log.d("ExoPlayer", "Error")
}

/**
* Removes all entries from the consumption reporting list
*
*/

fun resetState() {
Log.d(TAG, "Resetting ExoPlayerListener")
}

}

0 comments on commit 53a4050

Please sign in to comment.