如何在 android 的 Youtube API V3 中按频道 ID 获取 Youtube 直播?
Posted
技术标签:
【中文标题】如何在 android 的 Youtube API V3 中按频道 ID 获取 Youtube 直播?【英文标题】:How to get Youtube Live Stream by Channel Id in Youtube API V3 in android? 【发布时间】:2016-09-28 01:24:18 【问题描述】:我可以得到直播列表:https://developers.google.com/youtube/v3/live/docs/liveStreams/list#examples 但是如何在android中使用youtube v3 api获取特定频道的直播状态和直播链接或id?
【问题讨论】:
您收到任何 ANS 了吗? 如果你有任何请分享它。 我也在找这个。但是如何废弃 youtube 频道并获取直播的 url 呢? 还是没有答案?你找到解决方案了吗?我还需要从频道 ID 获取可用的直播视频。 @hsantos 如果您仍在寻找解决方案,我已经添加了相同的答案。 【参考方案1】:这将返回直播 ID
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=CHANNEL_ID&eventType=live&type=video&key=YOUR_API_KEY
您还可以将查询传递给 YouTube,以便 YouTube 为您提供所有直播活动
https://www.googleapis.com/youtube/v3/search?part=snippet&q=YOUR_SEARCH_QuERY&eventType=live&type=video&key=YOUR_YOUTUBE_API
这就是我在我的应用中获取直播视频的方式
private void initVolley(String[] urls)
for (String url : urls)
if (url.startsWith("https://www.googleapis.com/youtube/v3/"))
jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
try
JSONArray jsonArray = response.getJSONArray("items");
if (jsonArray.length() > 0)
for (int getItem = 0; getItem < jsonArray.length(); getItem++)
JSONObject jsonObject = jsonArray.getJSONObject(getItem).getJSONObject("id");
String videoID = jsonObject.getString("videoId");
Log.d(TAG, "void id " + videoID);
mUrlList.add(new video(jsonArray.getJSONObject(getItem).getJSONObject("snippet").getString("title"), jsonArray.getJSONObject(getItem).getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("medium").getString("url"), " ", "https://www.youtube.com/watch?v=" + videoID, true));
if (mAdapter != null)
mAdapter.notifyDataSetChanged();
Log.d(TAG, videoID + jsonArray.length() + jsonArray.getJSONObject(getItem).getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("default").getString("url"));
catch (Exception e)
e.printStackTrace();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
);
requestQueue.add(jsonObjectRequest);
如果你有 YouTube 链接,也许你将你的链接存储在数据库中,那么这将返回一些有用的信息,而无需 API 密钥
https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=lUOhCtXPN40&format=json
以及下面的代码
JsonObjectRequest obreq = new JsonObjectRequest(Request.Method.GET, JsonURL, null,
new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
try
// mVideo = new video(response.getString("title"), response.getString("thumbnail_url"), response.getString("author_name"));
// mVideoDataSet.add(mVideo);
mVideo = new video(url);
mVideo.setVideoTitle(response.getString("title"));
mVideo.setVideoThimailUrl(response.getString("thumbnail_url"));
mVideo.setVideoChannalName(response.getString("author_name"));
mVideo.setLiveNow(false);
mVideoDataSet.add( mVideo);
Log.d(TAG, "inside the volly" + mVideo.getVideoTitle());
// Log.d(TAG, mVideoDataSet.get(i).getVideoStreemUrl());
if (mAdapter != null)
mAdapter.notifyDataSetChanged();
// if(mSwipeRefreshLayout.isRefreshing())
// mSwipeRefreshLayout.setRefreshing(false);
else
Log.d(TAG, "setingAdupter");
// if(mSwipeRefreshLayout.isRefreshing())
// mSwipeRefreshLayout.setRefreshing(false);
mAdapter = new CustomAdapter(mVideoDataSet);
mRecyclerView.setAdapter(mAdapter);
i++;
if (i != mUrlList.size())
initVolly();
catch (JSONException e)
e.printStackTrace();
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
// if(error)
i++;
initVolly();
Log.e("Volley", "Error");
);
// Adds the JSON object request "obreq" to the request queue
requestQueue.add(obreq);
如果您想在此处查看源代码,请最后is link
【讨论】:
这仅适用于 PUBLIC 直播。不适用于 UNLISTED 或 PRIVATE 直播。 我认为这是有道理的,因为它们是私有的【参考方案2】:我遇到了同样的问题,并设法找到了解决方案。 YouTube 实际上为此提供了一个 API。如果您有频道 ID,则可以使用搜索 API 获取当前活动的直播视频 ID。
使用以下 API:
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=YOUR_CHANNEL_ID&eventType=live&type=video&key=YOUR_API_KEY
这里的关键因素是您必须将eventType
设置为live
和type
设置为video
。
如果您有频道的用户名,可以使用以下请求获取频道 ID。
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=CHANNEL_USER_NAME&key=YOUR_API_KEY
【讨论】:
这仅适用于 PUBLIC 直播。不适用于 UNLISTED 或 PRIVATE 直播。 我的直播是 PUBLIC 和 LISTED 但 API 请求仍然没有结果 prnt.sc/p8qce3 @GastonCoroleu 我遇到了类似的问题。我使用上面的代码 sn-p 有一段时间了,直到它在大约一周前停止工作。不太清楚为什么 @GastonCorole 请验证是否有任何超出限制的问题。我只是在看到这些 cmets 后尝试过,它仍然对我有用。检查了 API 文档,那里也没有变化。 @SteppingHat 请同时验证以上是关于如何在 android 的 Youtube API V3 中按频道 ID 获取 Youtube 直播?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android Studio中使用YouTube API在Android应用中列出视频
如何在 Youtube Player android API 中隐藏控件、全屏按钮?
如何使用 youtube data api v3 中的 nextPageToken 在 android recycler 视图中加载更多视频