diff --git a/app/build.gradle b/app/build.gradle index 0d948ff6..c6d93377 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" } \ No newline at end of file diff --git a/app/src/main/java/gallery/memories/MainActivity.kt b/app/src/main/java/gallery/memories/MainActivity.kt index 5093e302..fc2582a7 100644 --- a/app/src/main/java/gallery/memories/MainActivity.kt +++ b/app/src/main/java/gallery/memories/MainActivity.kt @@ -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() } diff --git a/app/src/main/java/gallery/memories/NativeX.kt b/app/src/main/java/gallery/memories/NativeX.kt index fa951b1f..c3a01944 100644 --- a/app/src/main/java/gallery/memories/NativeX.kt +++ b/app/src/main/java/gallery/memories/NativeX.kt @@ -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;