Add HLS playback
parent
403e4404a7
commit
d7b550e85a
|
@ -43,5 +43,5 @@ dependencies {
|
|||
implementation 'androidx.exifinterface:exifinterface:1.3.6'
|
||||
implementation "androidx.media3:media3-exoplayer:$mediaVersion"
|
||||
implementation "androidx.media3:media3-ui:$mediaVersion"
|
||||
implementation "androidx.media3:media3-exoplayer-dash:$mediaVersion"
|
||||
implementation "androidx.media3:media3-exoplayer-hls:$mediaVersion"
|
||||
}
|
|
@ -4,15 +4,15 @@ import android.annotation.SuppressLint
|
|||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebResourceResponse
|
||||
import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
import android.webkit.*
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.media3.common.MediaItem
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
import androidx.media3.common.util.Util
|
||||
import androidx.media3.datasource.DefaultDataSource
|
||||
import androidx.media3.datasource.DefaultHttpDataSource
|
||||
import androidx.media3.exoplayer.ExoPlayer
|
||||
import androidx.media3.exoplayer.hls.HlsMediaSource
|
||||
import gallery.memories.databinding.ActivityMainBinding
|
||||
|
||||
@UnstableApi class MainActivity : AppCompatActivity() {
|
||||
|
@ -110,16 +110,34 @@ import gallery.memories.databinding.ActivityMainBinding
|
|||
player = null
|
||||
}
|
||||
|
||||
// Prevent re-creating
|
||||
playerUri = uri
|
||||
playerUid = uid
|
||||
|
||||
// Add cookies from webview to data source
|
||||
val cookies = CookieManager.getInstance().getCookie(uri.toString())
|
||||
val httpDataSourceFactory =
|
||||
DefaultHttpDataSource.Factory()
|
||||
.setDefaultRequestProperties(mapOf("cookie" to cookies))
|
||||
.setAllowCrossProtocolRedirects(true)
|
||||
val dataSourceFactory = DefaultDataSource.Factory(this, httpDataSourceFactory)
|
||||
|
||||
// Create media item from local or remote uri
|
||||
val mediaItem = MediaItem.fromUri(uri)
|
||||
|
||||
// Build exoplayer
|
||||
player = ExoPlayer.Builder(this)
|
||||
.build()
|
||||
.also { exoPlayer ->
|
||||
binding.videoView.player = exoPlayer
|
||||
binding.videoView.visibility = View.VISIBLE
|
||||
val mediaItem = MediaItem.fromUri(uri)
|
||||
exoPlayer.setMediaItems(listOf(mediaItem), mediaItemIndex, playbackPosition)
|
||||
|
||||
val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory)
|
||||
.createMediaSource(mediaItem);
|
||||
exoPlayer.addMediaSource(hlsMediaSource)
|
||||
|
||||
// val mediaItem = MediaItem.fromUri(uri)
|
||||
// exoPlayer.setMediaItems(listOf(mediaItem), mediaItemIndex, playbackPosition)
|
||||
exoPlayer.playWhenReady = playWhenReady
|
||||
exoPlayer.prepare()
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package gallery.memories
|
|||
|
||||
import android.R
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
|
@ -117,6 +118,14 @@ import java.net.URLDecoder
|
|||
}.start()
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
fun playVideoHls(fileId: String?, url: String?) {
|
||||
if (fileId == null || url == null) return
|
||||
mActivity.runOnUiThread {
|
||||
mActivity.initializePlayer(Uri.parse(url), fileId)
|
||||
}
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
fun destroyVideo(fileId: String?) {
|
||||
if (fileId == null) return;
|
||||
|
|
Loading…
Reference in New Issue