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

OBS-WebSocket-JS切换场景并通过URL播放音频的技术问题

解决OBS通过obs.call播放远程音频URL的问题

核心思路

PlayAudio接口仅支持本地音频文件路径,无法直接播放远程URL。改用媒体源加载URL+触发播放的方式实现需求,同时保留SetCurrentProgramScene完成场景切换。

具体步骤

  • 在OBS中创建一个媒体源(可设置为隐藏状态,仅用于音频播放),创建时勾选允许加载网络URL的选项。
  • 通过obs.call调用接口完成以下操作:
    1. 更新媒体源的URL为你的TTS语音链接
    2. 确保媒体源处于启用状态
    3. 触发媒体源的播放动作
    4. 执行场景切换

示例代码

// 1. 设置媒体源的语音URL
await obs.call('SetSourceSettings', {
  sourceName: 'TTS音频源', // 替换为你创建的媒体源名称
  sourceSettings: {
    input: 'https://your-tts-service.com/generated-audio.mp3' // 替换为实际TTS音频URL
  }
});

// 2. 启用媒体源(若之前为隐藏状态)
await obs.call('SetSceneItemEnabled', {
  sceneName: '当前程序场景名称', // 或直接使用当前活动场景
  sceneItemName: 'TTS音频源',
  sceneItemEnabled: true
});

// 3. 触发音频播放
await obs.call('TriggerMediaInputAction', {
  inputName: 'TTS音频源',
  action: 'OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY'
});

// 4. 切换目标场景
await obs.call('SetCurrentProgramScene', {
  sceneName: '目标场景名称'
});

注意事项

  • 确保TTS生成的音频格式为OBS支持的类型(如MP3、WAV),部分小众格式可能无法解码。
  • 可将媒体源设置为全局源,这样无需在每个场景中重复添加,切换场景时仍能正常播放音频。
  • 若需播放完成后自动清理,可监听MediaInputPlaybackEnded事件,触发停止播放并禁用媒体源:
    obs.on('MediaInputPlaybackEnded', async (data) => {
      if (data.inputName === 'TTS音频源') {
        await obs.call('TriggerMediaInputAction', {
          inputName: 'TTS音频源',
          action: 'OBS_WEBSOCKET_MEDIA_INPUT_ACTION_STOP'
        });
        await obs.call('SetSceneItemEnabled', {
          sceneName: '当前场景名称',
          sceneItemName: 'TTS音频源',
          sceneItemEnabled: false
        });
      }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:32:13