Android YouTube 播放器直播
Android YouTube Player Livestream
我是 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 可以以某种方式 return 来自 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);
你基本上已经在回答你自己的问题了。
首先,您需要获取直播的视频 ID,为此您需要一个 youtubeAPI 密钥,据悉您不需要 pierfrancesco 的库。下面video说明获取方法。请注意您对 API 键设置的限制,因为如果它太受限制,它将无法工作(最好一开始根本不限制它)。
然后将 channelID 和 API key 填入您好心提供的 url
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={CHANNEL_ID}&eventType=live&type=video&key={YOUR_API_KEY}
您可能已经知道这一点,但您可以使用诸如 Volley 之类的东西来发出 http 请求。在 return 中,您将获得如下所示的 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 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 可以以某种方式 return 来自 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);
你基本上已经在回答你自己的问题了。
首先,您需要获取直播的视频 ID,为此您需要一个 youtubeAPI 密钥,据悉您不需要 pierfrancesco 的库。下面video说明获取方法。请注意您对 API 键设置的限制,因为如果它太受限制,它将无法工作(最好一开始根本不限制它)。 然后将 channelID 和 API key 填入您好心提供的 url
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={CHANNEL_ID}&eventType=live&type=video&key={YOUR_API_KEY}
您可能已经知道这一点,但您可以使用诸如 Volley 之类的东西来发出 http 请求。在 return 中,您将获得如下所示的 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 下重新加载视频,而中断最少。
让我知道这是否适合你