From 7357085fdf65a2735f8336b23b8f08f63efa35b6 Mon Sep 17 00:00:00 2001 From: Raymond Yang Date: Fri, 19 May 2023 15:37:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5TextureView=E6=94=AF=E6=8F=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/mainScreen/SplitViewFragment.kt | 19 ++++------ .../ui/mainScreen/VideoView.kt | 6 ++- app/src/main/res/layout/item_video_view.xml | 2 +- .../hisharp/gstreamer_player/GstLibrary.kt | 38 +++++++++++++++++-- 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt index ca207f6..a343aff 100644 --- a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt +++ b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/SplitViewFragment.kt @@ -22,8 +22,6 @@ import kotlin.math.sqrt class SplitViewFragment : Fragment() { - val viewModel: SplitViewModel by activityViewModels() - private var mPageNum: Int = 0 private var splitMode = Constants.SPLIT_MODE_SINGLE private var streamType = VideoView.SUB_STREAM @@ -213,32 +211,31 @@ class SplitViewFragment : Fragment() { fun playAll() = MainScope().launch(Dispatchers.Main) { if (videoViews.isEmpty()) return@launch - delay(splitMode * Constants.CONF_DELAY_BASE_MILLIS) + //delay(splitMode * Constants.CONF_DELAY_BASE_MILLIS) for (index in data.indices) { if (!videoViews[index].isReady) continue videoViews[index].resetRetryCount() videoViews[index].play() - //delay(300) + delay(300) } }.start() - fun stopAll() = MainScope().launch(Dispatchers.Main) { - if (videoViews.isEmpty()) return@launch + fun stopAll() { + if (videoViews.isEmpty()) return for (index in data.indices) { videoViews[index].stopRetryCount() if (!videoViews[index].isPlaying || videoViews[index].isLoading) continue videoViews[index].pause() - //delay(300) } - }.start() + } - fun destroyAll() = MainScope().launch(Dispatchers.Main) { - if (videoViews.isEmpty()) return@launch + fun destroyAll() { + if (videoViews.isEmpty()) return for (index in data.indices) { //videoViews[index].destroy() videoViews[index].destroySurface() } - }.start() + } companion object { private val TAG = SplitViewFragment::class.java.simpleName diff --git a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt index 40f30f7..f690a5a 100644 --- a/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt +++ b/app/src/main/java/com/ray650128/gstreamer_demo_app/ui/mainScreen/VideoView.kt @@ -9,6 +9,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.SurfaceHolder import android.view.SurfaceView +import android.view.TextureView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import com.hisharp.gstreamer_player.GstCallback @@ -62,7 +63,7 @@ class VideoView : ConstraintLayout, GstCallback { } } - private val videoView: SurfaceView by lazy { view.videoView } + private val videoView: TextureView by lazy { view.videoView } private lateinit var gstLibrary: GstLibrary @@ -77,7 +78,8 @@ class VideoView : ConstraintLayout, GstCallback { //videoView.holder.addCallback(this) gstLibrary = GstLibrary(context) - gstLibrary.setSurfaceHolder(videoView.holder) + //gstLibrary.setSurfaceHolder(videoView.holder) + gstLibrary.setTextureView(videoView) gstLibrary.setOnStatusChangeListener(this) // View 預設狀態 diff --git a/app/src/main/res/layout/item_video_view.xml b/app/src/main/res/layout/item_video_view.xml index 71ff508..5f14a2a 100644 --- a/app/src/main/res/layout/item_video_view.xml +++ b/app/src/main/res/layout/item_video_view.xml @@ -7,7 +7,7 @@ android:background="@drawable/bg_video_view" android:outlineProvider="background"> -