OBS-WebSocket-JS切换场景并通过URL播放音频的技术问题
解决OBS通过obs.call播放远程音频URL的问题
核心思路
PlayAudio接口仅支持本地音频文件路径,无法直接播放远程URL。改用媒体源加载URL+触发播放的方式实现需求,同时保留SetCurrentProgramScene完成场景切换。
具体步骤
- 在OBS中创建一个媒体源(可设置为隐藏状态,仅用于音频播放),创建时勾选允许加载网络URL的选项。
- 通过
obs.call调用接口完成以下操作:- 更新媒体源的URL为你的TTS语音链接
- 确保媒体源处于启用状态
- 触发媒体源的播放动作
- 执行场景切换
示例代码
// 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
相关产品推荐
相关产品推荐

