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" />
+
+
+
+
diff --git a/example/src/main/res/values/strings.xml b/example/src/main/res/values/strings.xml
index 6208334..20d34f0 100644
--- a/example/src/main/res/values/strings.xml
+++ b/example/src/main/res/values/strings.xml
@@ -87,7 +87,9 @@
开始播放
关闭
点播播放
- 请输入 MP4 / HLS URL
+ 请输入播放地址(URL、本地路径、asset:///...)
+ 选择本地文件
+ 播放包内示例
RTMP
RTC