You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Node.js向YouTube推送直播流?对应API使用问询

YouTube Node.js直播推流实现方案

1. 对应的官方API说明

你所说的功能依赖 YouTube Live Streaming API,它是YouTube Data API v3的子模块,负责所有直播相关的资源管理操作。

注意:该API本身不负责音视频数据的传输,只用来管理直播生命周期、获取推流地址/密钥。OBS的底层逻辑也是先拿到推流信息,再走标准RTMP协议推送音视频流到YouTube服务器,和你手动填密钥的逻辑是一致的。

2. 完全可以在Node.js环境中实现

整个功能分为两个独立模块实现:

2.1 直播资源管理(调用官方API)

  • 官方提供了Node.js版本的SDK包googleapis,直接安装即可调用所有直播相关接口,不需要手动封装HTTP请求
  • 可实现的操作包括:创建直播事件、绑定流资源、获取推流地址与密钥、修改直播配置、启停直播、查看推流状态等
  • 调用前需要在Google Cloud Console开通YouTube Data API v3权限,申请OAuth2.0凭证,授予对应直播操作的权限即可

2.2 音视频推流实现

拿到API返回的推流地址和密钥拼接成完整推流路径(格式为rtmp://a.rtmp.youtube.com/live2/你的推流密钥)之后,就可以用Node.js的RTMP推流工具实现流推送:

  • 常用方案是用fluent-ffmpeg库,底层依赖ffmpeg二进制工具,编码逻辑和OBS完全一致,支持推送本地文件、实时采集流、第三方转源流等多种源
  • 只要音视频编码参数符合YouTube的推流规范(H.264视频、AAC音频,对应码率帧率符合分辨率要求),就能正常推流

简化实现示例

# 安装依赖
npm install googleapis fluent-ffmpeg
// 1. 调用API获取推流地址示例
const { google } = require('googleapis');
const youtube = google.youtube('v3');
const ffmpeg = require('fluent-ffmpeg');

// 初始化OAuth客户端,填入你自己的凭证信息
const oauth2Client = new google.auth.OAuth2(
  'YOUR_CLIENT_ID',
  'YOUR_CLIENT_SECRET',
  'YOUR_REDIRECT_URL'
);
oauth2Client.setCredentials({ refresh_token: 'YOUR_REFRESH_TOKEN' });
google.options({ auth: oauth2Client });

// 创建直播流获取推流密钥
async function getStreamKey() {
  const streamRes = await youtube.liveStreams.insert({
    part: 'snippet,cdn',
    requestBody: {
      snippet: { title: 'Node.js直播流' },
      cdn: { frameRate: '30fps', ingestionType: 'rtmp', resolution: '1080p' }
    }
  });
  return streamRes.data.cdn.ingestionInfo;
}

// 2. 推流示例
async function startPush(streamUrl, streamKey) {
  ffmpeg('你的本地视频文件路径/或者实时流地址')
    .outputOptions([
      '-c:v libx264', '-preset veryfast', '-crf 23', '-maxrate 6000k', '-bufsize 12000k',
      '-pix_fmt yuv420p', '-g 60', '-c:a aac', '-b:a 192k', '-ar 44100'
    ])
    .output(`${streamUrl}/${streamKey}`)
    .format('flv')
    .on('end', () => console.log('推流结束'))
    .on('error', (err) => console.error('推流错误', err))
    .run();
}

// 执行流程
getStreamKey().then(ingestionInfo => {
  startPush(ingestionInfo.ingestionAddress, ingestionInfo.streamName);
});

注意事项

  • 推流前必须确认音视频编码参数符合YouTube要求,否则会出现推流断连、无画面无声音的问题
  • 直播结束后需要调用API修改直播状态,避免YouTube侧判定为直播异常

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 21:39:03