如何通过Vimeo API获取直播活动的播放URL?
解决Vimeo预约直播后获取播放URL的问题
问题分析
你遇到的权限错误核心原因有两个:
- 认证方式错误:你的curl请求使用了
Basic客户端凭证认证,但获取用户专属的直播资源必须用用户Access Token的Bearer认证。 - 资源关联错误:你手动拼接
live_eventsID容易导致资源不匹配,正确方式是从创建直播视频的返回结果中提取关联的live_eventURI。
解决方案步骤
1. 确认Access Token权限
确保你的Access Token包含以下必要权限:
video_files:允许获取视频播放文件live:允许访问直播相关资源- 若为私有直播,需额外添加
private权限
2. 修正curl测试命令
将Authorization头改为Bearer Token格式,替换YOUR_ACCESS_TOKEN为你的用户令牌:
curl -X GET \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.vimeo.*+json;version=3.4" \ "https://api.vimeo.com/live_events/907930022/m3u8_playback"
3. Node.js代码中获取直播播放URL
在创建直播视频后,从返回响应中提取关联的live_event URI,再请求其播放端点:
import { Vimeo } from "vimeo"; const client = new Vimeo(CLIENT_ID, CLIENT_SECRET, ACCESS_TOKEN); const headers = { 'Accept': 'application/vnd.vimeo.*+json;version=3.4', }; const liveEventParams = { type: 'live', name: 'Scheduled Live Event', start_time: scheduleTime, description: 'Live event test', privacy: { view: 'anybody', }, }; // 创建直播视频 const createLiveVideo = () => { return new Promise((resolve, reject) => { client.request({ method: 'post', path: '/me/videos', headers: headers, query: liveEventParams, }, (error, body) => { if (error) { console.log('Error scheduling live event:', error); reject(new GraphQLError(error, { extensions: { code: 'UNAUTHENTICATED' }, path: 'createMedia', })); } else { resolve(body); } }) }); }; // 主逻辑 const main = async () => { try { const liveVideo = await createLiveVideo(); console.log("Created live video:", liveVideo); // 提取关联的live_event URI const liveEventUri = liveVideo.live_event?.uri; if (!liveEventUri) { throw new Error("No live_event found in video response"); } // 请求直播播放URL const getPlaybackUrl = () => { return new Promise((resolve, reject) => { client.request({ method: 'get', path: `${liveEventUri}/m3u8_playback`, headers: headers }, (error, playbackData) => { if (error) { reject(error); } else { resolve(playbackData.playback_url); } }); }); }; const playbackUrl = await getPlaybackUrl(); console.log("Live playback URL:", playbackUrl); } catch (err) { console.error("Failed to get live playback URL:", err); } }; main();
4. 关键注意事项
- 预约状态的直播在正式启动前,返回的播放URL可能是占位符或临时链接,需在直播开始后重新请求获取有效地址。
- 若直播设置为密码保护模式,请求播放URL时需在参数中携带
password字段。
内容的提问来源于stack exchange,提问作者Titan
相关产品推荐
相关产品推荐

