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 密钥的限制,因为如果它太受限制,它将无法工作(最好一开始就不要限制它)。 然后您将 channelIDAPI 密钥 填写到您提供的网址中

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直播视频流

如何统一加载 YouTube 直播视频流? [关闭]

在 iOS 上使用 YouTube 进行直播

Android YouTube API“初始化 YouTube 播放器时出错”

Android : youtube 播放器已发布