Sre*_*h K 3 kotlin android-youtube-api youtube-iframe-api youtubeplayer android-jetpack-compose
YouTube Android 播放器 API SDK 已完全弃用。YouTube 不再支持或维护它。因此需要在Android中实现YouTube IFrame Player API。
播放 YouTube 视频时,显示“初始化 YouTube 播放器时出错”消息。
根据developer.google文档https://developers.google.com/youtube/iframe_api_reference ,我使用Kotlin和jetpack compose使用适用于Android的IFrame YouTube播放器创建了一个示例应用程序。
使用以下依赖项
实现“androidx.webkit:webkit:1.4.0”
在 Manifest.xml 中授予互联网权限
使用权限 android:name="android.permission.INTERNET"
创建撰写函数
@Composable
fun YoutubeVideoPlayer(videoId: String) {
val webView = WebView(LocalContext.current).apply {
settings.javaScriptEnabled = true
settings.loadWithOverviewMode = true
settings.useWideViewPort = true
webViewClient = WebViewClient()
}
val htmlData = getHTMLData(videoId)
Column(Modifier.fillMaxSize()) {
AndroidView(factory = { webView }) { view ->
view.loadDataWithBaseURL(
"https://www.youtube.com",
htmlData,
"text/html",
"UTF-8",
null
)
}
Button(onClick = {
webView.loadUrl("javascript:playVideo();")
}) {
Text(text = "Play Video")
}
Button(onClick = {
webView.loadUrl("javascript:pauseVideo();")
}) {
Text(text = "Pause Video")
}
Button(onClick = {
webView.loadUrl("javascript:seekTo(60);")
}) {
Text(text = "Seek Video")
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用 getHTMLData 函数加载包含 IFrame 的 HTML 页面
fun getHTMLData(videoId: String): String {
return """
<html>
<body style="margin:0px;padding:0px;">
<div id="player"></div>
<script>
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '450',
width: '650',
videoId: '$videoId',
playerVars: {
'playsinline': 1
},
events: {
'onReady': onPlayerReady
}
});
}
function onPlayerReady(event) {
player.playVideo();
// Player is ready
}
function seekTo(time) {
player.seekTo(time, true);
}
function playVideo() {
player.playVideo();
}
function pauseVideo() {
player.pauseVideo();
}
</script>
<script src="https://www.youtube.com/iframe_api"></script>
</body>
</html>
""".trimIndent()
}
Run Code Online (Sandbox Code Playgroud)
在 Main 活动中调用 compose 函数
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Column {
YoutubeVideoPlayer(videoId = "bHQqvYy5KYo")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2773 次 |
| 最近记录: |