Android liverstream YouTube的球员



我对Android Dev, Java和一般情况都很陌生-所以请原谅我。我一直在尝试GitHubPierfrancescoSoffrittiAndroid - 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,然后将其用作PierfrancescoSoffrittiandroid-youtube-player中的字符串videoId = "xxxx";?

public void onReady(@NonNull YouTubePlayer youTubePlayer) {
String videoId = "xxxx";
youTubePlayer.loadVideo(videoId, 0);

你基本上已经回答了你自己的问题。

首先,你需要得到你的直播的视频oid,为此,你需要一个youtube beapi密钥,你不需要为pierfrancesco的库。下面的视频解释了如何获得它。请注意您对API密钥的限制,因为如果限制太大,它将无法工作(最好一开始就不要限制它)。然后填写channelIDandAPI key到您好心提供的网址

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)最有可能的是,然而,pierfrancesco的一个错误捕获回调方法(如onError())将被触发,允许你无缝地重新启动一个请求,并在新的videoID下以最小的中断重新加载视频。

让我知道这是否适合你

最新更新