如何在 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 设置为livetype 设置为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 视图中加载更多视频

如何在 YouTube api v3 中获取 YouTube 视频的 cc 字幕

如何在 Android 的后台播放 YouTube 视频?

Youtube API v3 使用 webView 在 Android 上创建 Youtube 频道