如何通过YouTube Data API v3获取直播短链接
如何通过YouTube Data API v3获取直播短链接
嘿,别担心,我来帮你理清这个问题!你现在拿到的是推流用的streamName(流密钥),但直播的观看短链接其实和Live Broadcast资源绑定,而不是Live Stream——前者才是直播间的“门面”,包含观看链接、标题这些观众能看到的核心信息。
核心思路
YouTube的短链接(https://youtu.be/XXX)本质就是用直播的broadcast ID替换XXX,所以只要通过API拿到你的直播broadcast ID,就能直接生成这个观众可访问的短链接。
具体步骤
- 调用正确的API接口:你需要调用
liveBroadcasts.list接口,而不是之前用的liveStreams.list。这个接口会返回你账号下的直播广播信息,里面包含我们需要的broadcast ID。 - 权限确认:你当前使用的
https://www.googleapis.com/auth/youtube.readonly权限完全足够获取自己的直播广播信息,不用额外申请更高权限。 - 生成短链接:拿到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




