diff --git a/example/libs/sellycloudsdk-1.0.0.aar b/example/libs/sellycloudsdk-1.0.0.aar index ebbd862..667fb32 100644 Binary files a/example/libs/sellycloudsdk-1.0.0.aar and b/example/libs/sellycloudsdk-1.0.0.aar differ diff --git a/example/src/main/AndroidManifest.xml b/example/src/main/AndroidManifest.xml index 1d88338..4a1a767 100644 --- a/example/src/main/AndroidManifest.xml +++ b/example/src/main/AndroidManifest.xml @@ -15,6 +15,8 @@ + + + uri?.let { pendingVodUrlInput?.setText(it.toString()) } + } + private lateinit var aliveAdapter: AliveStreamAdapter private val allAliveItems: MutableList = mutableListOf() private var currentPage = 0 @@ -469,6 +478,9 @@ class FeatureHubActivity : AppCompatActivity() { dialog.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) dialog.setCancelable(true) + pendingVodUrlInput = dialogBinding.etVodUrl + dialog.setOnDismissListener { pendingVodUrlInput = null } + dialogBinding.btnClose.setOnClickListener { dialog.dismiss() } dialogBinding.btnStartVod.setOnClickListener { val input = dialogBinding.etVodUrl.text?.toString()?.trim().orEmpty() @@ -479,6 +491,13 @@ class FeatureHubActivity : AppCompatActivity() { dialog.dismiss() startActivity(VodPlayActivity.createIntent(this, input)) } + dialogBinding.btnPickLocalFile.setOnClickListener { + vodFilePicker.launch("video/*") + } + dialogBinding.btnPlayAssetSample.setOnClickListener { + dialog.dismiss() + startActivity(VodPlayActivity.createIntent(this, "asset:///vod/sample.mp4")) + } dialog.show() } diff --git a/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt b/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt index 15f7a3a..6fb5302 100644 --- a/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt +++ b/example/src/main/java/com/demo/SellyCloudSDK/vod/VodPlayActivity.kt @@ -30,6 +30,7 @@ import androidx.core.content.ContextCompat import com.demo.SellyCloudSDK.R import com.demo.SellyCloudSDK.databinding.ActivityVodPlayBinding import com.demo.SellyCloudSDK.live.util.GalleryImageSaver +import com.sellycloud.sellycloudsdk.SellyCloudManager import com.sellycloud.sellycloudsdk.SellyLiveError import com.sellycloud.sellycloudsdk.SellyPlayerState import com.sellycloud.sellycloudsdk.SellyVodPlayer @@ -123,6 +124,8 @@ class VodPlayActivity : AppCompatActivity() { finish() return } + // VOD 模式始终走直连,不使用 Kiwi 代理替换路径。 + SellyCloudManager.setProxyAddress(null) initPlayer(url) } @@ -143,7 +146,21 @@ class VodPlayActivity : AppCompatActivity() { } } + private fun classifySource(url: String): String { + return when { + url.startsWith("content://", ignoreCase = true) -> "Content URI" + url.startsWith("android.resource://", ignoreCase = true) -> "Raw Resource" + url.startsWith("asset:///", ignoreCase = true) -> "Asset" + url.startsWith("file://", ignoreCase = true) -> "File URI" + url.startsWith("http://", ignoreCase = true) || url.startsWith("https://", ignoreCase = true) -> "Network" + url.startsWith("/") -> "Local Path" + else -> "Unknown" + } + } + private fun initPlayer(url: String) { + logEvent("播放源类型: ${classifySource(url)}") + logEvent("播放地址: $url") val vodPlayer = SellyVodPlayer.initWithUrl(this, url).also { client -> client.autoPlay = true client.delegate = object : SellyVodPlayerDelegate { diff --git a/example/src/main/res/layout/dialog_vod_input.xml b/example/src/main/res/layout/dialog_vod_input.xml index 968ac32..af2f36a 100644 --- a/example/src/main/res/layout/dialog_vod_input.xml +++ b/example/src/main/res/layout/dialog_vod_input.xml @@ -70,5 +70,25 @@ android:textColor="@color/brand_primary_text_on" android:textSize="16sp" android:textStyle="bold" /> + +