Android YouTube 播放器直播
Posted
技术标签:
【中文标题】Android YouTube 播放器直播【英文标题】:Android YouTube Player Livestream 【发布时间】:2021-11-21 18:15:29 【问题描述】:我对 android Dev、Java 和一般来说都是新手 - 请耐心等待。我一直在尝试GitHub PierfrancescoSoffritti
android-youtube-player,它作为一个可定制的 Android 开源 YouTube 播放器非常有效,但有一个例外。
主要代码使用videoID
来玩:
YouTubePlayerView youTubePlayerView = findViewById(R.id.youtube_player_view);
getLifecycle().addObserver(youTubePlayerView);
youTubePlayerView.addYouTubePlayerListener(new AbstractYouTubePlayerListener()
@Override
public void onReady(@NonNull YouTubePlayer youTubePlayer)
String videoId = "xxxx";
youTubePlayer.loadVideo(videoId, 0);
);
问题是,我想将它用于 YouTube 直播,如果重新创建流,videoId
可以更改。
如果您要嵌入网页,YouTube 提供了一种解决方法,即不使用videoID
,而是使用channelID
。这样,它将始终嵌入正确的当前正在播放的直播,而无需使用 VideoID
。
https://www.youtube.com/embed/live_stream?channel=ChannelID
我知道有一个 YouTube API 可以通过以下方式从 channelID
返回当前正在播放的直播 videoID
:
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=CHANNEL_ID&eventType=live&type=video&key=YOUR_API_KEY
但这就是我卡住的地方。知道如何从channelId
获取更新的直播videoId
,然后在PierfrancescoSoffritti
android-youtube-player 中将其用作字符串videoId = "xxxx";
?
public void onReady(@NonNull YouTubePlayer youTubePlayer)
String videoId = "xxxx";
youTubePlayer.loadVideo(videoId, 0);
【问题讨论】:
【参考方案1】:你基本上已经在回答你自己的问题了。
首先,您需要获取直播的 videoID,为此您需要一个 youtubeAPI 密钥,而 pierfrancesco 的库不需要该密钥。以下video 解释了如何获取它。请注意您对 API 密钥的限制,因为如果它太受限制,它将无法工作(最好一开始就不要限制它)。 然后您将 channelID 和 API 密钥 填写到您提供的网址中
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=CHANNEL_ID&eventType=live&type=video&key=YOUR_API_KEY
您可能已经知道这一点,但您可以使用诸如 Volley 之类的东西来发出 http 请求。作为回报,您将获得如下所示的 JSONObject:
"kind": "youtube#searchListResponse",
"etag": "kmbaHcb5CMLZ5VevVM",
"regionCode": "NI",
"pageInfo":
"totalResults": 1,
"resultsPerPage": 1
,
"items": [
"kind": "youtube#searchResult",
"etag": "RkUpUQpSKztQlA",
"id":
"kind": "youtube#video",
"videoId": "GLdex45V_RQ"// <------------------------- HERE IT IS
,
"snippet":
"publishedAt": "2021-10-14T21:05:37Z",
"channelId": "UCeY0bbntWzzVIaj2z3QigXg",
"title": "LIVE: NBC News NOW - October 15",
"description": "NBC News NOW is live, reporting breaking news and developing stories in real time. We are on the scene, covering the most important stories of the day and ...",
"thumbnails":
"default":
"url": "https://i.ytimg.com/vi/GLdex45V_RQ/default_live.jpg",
"width": 120,
"height": 90
,
"medium":
"url": "https://i.ytimg.com/vi/GLdex45V_RQ/mqdefault_live.jpg",
"width": 320,
"height": 180
,
"high":
"url": "https://i.ytimg.com/vi/GLdex45V_RQ/hqdefault_live.jpg",
"width": 480,
"height": 360
,
"channelTitle": "NBC News",
"liveBroadcastContent": "live",
"publishTime": "2021-10-14T21:05:37Z"
]
您可以通过深入研究该对象找到您正在寻找的 videoID。
之后,您只需将其传递给 pierfrancescos 的 loadVideo()
方法,瞧。如果 liveStream 失败或被重新创建(我敢打赌这不会经常发生),用户可以通过简单地重新打开应用程序来修复它(从那时起向 googleapi.com 发起一个新请求)然而,最有可能的是 pierfrancescos 错误捕获回调之一方法(如 onError()
)将被触发,允许您无缝地重新启动请求并在新的 videoID 下重新加载视频,而不会造成干扰。
让我知道这是否适合你
【讨论】:
以上是关于Android YouTube 播放器直播的主要内容,如果未能解决你的问题,请参考以下文章
Windows Phone 8:播放 YouTube 直播活动流
为啥qt webengine不能播放youtube直播视频流