You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过YouTube Data API v3获取直播短链接

如何通过YouTube Data API v3获取直播短链接

嘿,别担心,我来帮你理清这个问题!你现在拿到的是推流用的streamName(流密钥),但直播的观看短链接其实和Live Broadcast资源绑定,而不是Live Stream——前者才是直播间的“门面”,包含观看链接、标题这些观众能看到的核心信息。

核心思路

YouTube的短链接(https://youtu.be/XXX)本质就是用直播的broadcast ID替换XXX,所以只要通过API拿到你的直播broadcast ID,就能直接生成这个观众可访问的短链接。

具体步骤

  1. 调用正确的API接口:你需要调用liveBroadcasts.list接口,而不是之前用的liveStreams.list。这个接口会返回你账号下的直播广播信息,里面包含我们需要的broadcast ID。
  2. 权限确认:你当前使用的https://www.googleapis.com/auth/youtube.readonly权限完全足够获取自己的直播广播信息,不用额外申请更高权限。
  3. 生成短链接:拿到broadcast ID后,直接拼接成https://youtu.be/{broadcastId}格式即可,这就是观众可以直接点击进入的短链接。

修改后的代码示例

我帮你调整了代码,拆分了获取流密钥和直播短链接的逻辑,这样你能更清晰地拿到需要的信息:

function authenticate() {
  return gapi.auth2.getAuthInstance()
    .signIn({scope: "https://www.googleapis.com/auth/youtube.readonly"})
    .then(function() { console.log("Sign-in successful"); },
          function(err) { console.error("Error signing in", err); });
}
function loadClient() {
  gapi.client.setApiKey("YOUR_API_KEY");
  return gapi.client.load("https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest")
    .then(function() { console.log("GAPI client loaded for API"); },
          function(err) { console.error("Error loading GAPI client for API", err); });
}
// 获取直播短链接的函数
function getLiveBroadcastShortLink() {
  return gapi.client.youtube.liveBroadcasts.list({
    "part": [ "id,snippet,status" ],
    "mine": true,
    "broadcastStatus": "active,upcoming" // 只筛选正在直播或即将开始的直播
  })
  .then(function(response) {
    if (response.result.items.length === 0) {
      alert("当前没有正在直播或即将开始的直播哦!");
      return;
    }
    // 取第一个直播(如果有多个,你可以根据标题/时间筛选)
    const broadcast = response.result.items[0];
    const broadcastId = broadcast.id;
    const shortLink = `https://youtu.be/${broadcastId}`;
    alert(`直播短链接:${shortLink}`);
    console.log("直播详情:", broadcast);
  }, function(err) {
    console.error("获取直播信息出错", err);
  });
}
// 保留你原来的获取流密钥的函数
function getStreamKey() {
  return gapi.client.youtube.liveStreams.list({
    "part": [ "snippet,cdn,contentDetails,status" ],
    "mine": true
  })
  .then(function(response) {
    if (response.result.items.length === 0) {
      alert("当前没有可用的推流!");
      return;
    }
    const stream = response.result.items[0];
    const streamName = stream.cdn.ingestionInfo.streamName;
    alert(`流密钥:${streamName}`);
    console.log("推流详情:", stream);
  }, function(err) {
    console.error("获取推流信息出错", err);
  });
}
gapi.load("client:auth2", function() {
  gapi.auth2.init({client_id: "YOUR_CLIENT_ID"});
});

对应的HTML按钮也可以分开,方便你单独调用:

<script src="https://apis.google.com/js/api.js"></script>
<button onclick="authenticate().then(loadClient)">授权并加载API</button>
<button onclick="getStreamKey()">获取推流密钥</button>
<button onclick="getLiveBroadcastShortLink()">获取直播短链接</button>

注意事项

  • 如果你的直播还没创建广播,需要先在YouTube后台或者通过API创建liveBroadcast并关联你的liveStream,否则liveBroadcasts.list会返回空结果。
  • 只有当直播处于active(正在直播)或upcoming(即将开始)状态时,这个短链接才会引导观众进入直播间;如果直播已结束,短链接会跳转到直播回放页面。

内容的提问来源于stack exchange,提问作者eucalypto

火山引擎 最新活动