Event Flow 媒体文件

在 OBS 中使用自己的声音、图片、GIF 和视频。

简短解答

Social Stream 桌面应用可以播放获准的本地文件,无需上传。 使用 选择本地文件 ,在 Event Flow 中操作,然后复制生成的 本地 Flow Actions URL 到 OBS 中。

Chrome 扩展本身无法提供磁盘上的文件。除非同时运行受支持的桌面配套程序,否则扩展用户应继续使用“上传”或托管媒体 URL。

选择最合适的方式

最快 内置上传

最适合规模适中的媒体库,设置最少。

大型或共享媒体库 云对象存储

最适合大量媒体、备份和多台电脑使用。

1Event Flow

奖励或消息触发操作。

2Flow Actions

actions.html 接收操作。

3媒体 URL

OBS 加载声音、图片、GIF 或视频。

方案 1:使用内置上传

  1. 在 Event Flow 中选择 播放音频片段 或 显示媒体叠加层.
  2. 点击 上传,选择文件,并在打开的页面中完成上传。
  3. 确认返回的 https://fileuploads.socialstream.ninja/media/... URL 出现在操作中。
  4. 保存流程,并保持 actions.html?session=YOUR_SESSION 在 OBS 中保持打开。

如果上传网站显示账号额度为 1 GB,且你的媒体库将超过此额度,请使用下方的本地文件夹或云存储选项。

Event Flow 的“显示媒体叠加层”属性,显示媒体 URL 字段和上传按钮
“上传”按钮会创建托管 URL。它不是用于 Event Flow 播放的本地文件选择器。

方案 2:将媒体库保留在 OBS 电脑上

独立桌面应用包含本地媒体库,以及仅监听本机的回环服务器。Event Flow 保存稳定的媒体 ID,而不会将磁盘路径写入流程。

  1. 启动 Social Stream 独立应用并打开 Event Flow。
  2. 选择 播放音频片段 或 显示媒体叠加层.
  3. 点击 选择本地文件 并选择音频、图片、GIF 或视频文件。
  4. 确认操作显示文件可用,且本地服务器正在运行。
  5. 点击 复制用于 OBS 的本地 Flow Actions URL.
  6. 将该 URL 粘贴到 OBS 浏览器源,保存流程并测试操作。
  • 使用 预览 检查所选文件。
  • 如果文件被移动或重命名,Event Flow 会显示它缺失。点击 重新关联 并选择新位置;现有流程会继续工作。
  • 使用 在文件夹中显示 ,用于查找原始文件。
  • OBS 使用本地 Flow Actions URL 时,保持 SSApp 运行。
  • 不要分享生成的 URL。其中包含用于保护本地服务器的私密随机访问凭据。

使用生成的本地 Flow Actions URL。 托管的 https://socialstream.ninja/actions.html 页面无法解析桌面媒体库 ID。

高级备用方案:运行自己的本地服务器

如果不使用 SSApp 管理的本地媒体库,仍可采用以下手动设置。

下载并解压 Social Stream Ninja 源代码文件夹,然后创建一个 user-media 文件夹,放在其中。

C:\SSN\social_stream\
  actions.html
  user-media\
    audio\booty.mp3
    images\reward.png
    video\celebration.mp4

手动启动本地 HTTP 服务器

  1. 如果尚未安装 Python,请先安装。
  2. 打开 PowerShell 或命令提示符,运行此命令。直播期间保持窗口打开。

Windows 命令

py -m http.server 8765 --bind 127.0.0.1 --directory "C:\SSN\social_stream"

macOS 或 Linux 命令

python3 -m http.server 8765 --bind 127.0.0.1 --directory "/path/to/social_stream"

用于 OBS 浏览器源的 Flow Actions URL

http://127.0.0.1:8765/actions.html?session=YOUR_SESSION_ID

要粘贴到 Event Flow 的媒体 URL

http://127.0.0.1:8765/user-media/audio/booty.mp3
http://127.0.0.1:8765/user-media/images/reward.png
http://127.0.0.1:8765/user-media/video/celebration.mp4
OBS 浏览器源
127.0.0.1:8765/actions.html
本地媒体
127.0.0.1:8765/user-media/...

此设置 --bind 127.0.0.1 将服务器限制在本机访问。此简易服务器用于本地直播,不用于在公共互联网上托管内容。

file://:可用,但更容易出问题

如果不想运行本地服务器,可让 OBS 使用本地 Flow Actions 页面,同时使用本地媒体 URL:

file:///C:/SSN/social_stream/actions.html?session=YOUR_SESSION_ID
file:///C:/SSN/social_stream/user-media/audio/booty.mp3
  • 使用正斜杠,并避免在文件夹和文件名中使用空格或特殊字符。
  • Flow Actions 页面和媒体都必须在本地。托管的 actions.html 页面无法读取该路径。
  • 如果 OBS 拒绝本地文件,请使用上方的本地 HTTP 服务器方法。

Chrome 扩展怎么办?

扩展使用相同的 Event Flow 格式,因此桌面端创建的流程仍然兼容。本地操作保存的是不透明媒体 ID,而不是 Windows、macOS 或 Linux 路径。

扩展本身无法将磁盘上的任意文件提供给 OBS。没有受支持的配套桥接程序时,请使用 上传 或普通托管 URL。如果导入的流程引用本地媒体,扩展会说明需要桌面应用或桥接程序,不会静默失败。

方案 3:在线托管更大的媒体库

提供商适合重要说明
Cloudflare R2 公开提醒媒体库的首选通用方案。 标准存储目前每月包含 10 GB-month 的存储用量和免费互联网出站流量。生产环境请使用自定义域名; r2.dev 有速率限制,且仅用于开发。
Backblaze B2 低成本的 S3 兼容存储,提供公开文件 URL。 目前前 10 GB 免费;超过包含额度后,存储和额外出站流量需要付费。
Amazon S3 或其他兼容 S3 的托管服务 已有云端账号和高级访问控制。 为媒体启用公开读取,设置正确的内容类型,并在浏览器请求需要时添加只读 CORS 规则。
GitHub 少量小型公开文件,或偶尔下载发布资源。 普通仓库不接受超过 100 MiB 的文件,GitHub Pages 网站的已发布站点大小上限为 1 GB。Releases 允许更大的资源,但不便用作受管理的提醒媒体库。

公开就意味着任何人可访问。 任何持有对象 URL 的人都能访问媒体。不要上传不应共享的私密、受许可限制或个人文件。

Cloudflare R2 设置

  1. 创建 R2 存储桶,使用 标准 存储类别。
  2. 上传媒体时使用清晰的文件夹名称,例如 audio/, images/,以及 video/.
  3. 在存储桶设置中启用公开访问。公开开发 URL 仅用于测试;常规直播请连接自定义域名。
  4. 在隐私/无痕浏览窗口中打开对象 URL。它应直接加载文件,无需登录或经过分享页面。
  5. 将该直接 HTTPS URL 粘贴到 Event Flow 操作中。

普通图片和音频通常无需自定义 CORS 设置即可加载。如果自定义叠加层、字体、视频播放器或浏览器 fetch 报告 CORS 错误,请打开 存储桶 → 设置 → CORS 策略 并添加只读策略:

[
  {
    "AllowedOrigins": [
      "https://socialstream.ninja",
      "http://127.0.0.1:8765"
    ],
    "AllowedMethods": ["GET", "HEAD"],
    "AllowedHeaders": ["Range"],
    "ExposeHeaders": [
      "Content-Length",
      "Content-Range",
      "Accept-Ranges"
    ],
    "MaxAgeSeconds": 3600
  }
]

添加其他会获取文件的页面的准确来源地址。来源地址不包含路径或末尾斜杠。如果自定义域名在添加 CORS 前已有缓存,请清除此主机名的缓存。

官方参考: 公开 R2 存储桶, R2 CORS,以及 R2 价格.

Backblaze B2 CORS 示例

将存储桶设为公开,使用直接文件 URL;如果浏览器报告 CORS 错误,请应用仅允许下载的规则:

[
  {
    "corsRuleName": "allowSSNMedia",
    "allowedOrigins": ["https://socialstream.ninja"],
    "allowedHeaders": ["range"],
    "allowedOperations": ["b2_download_file_by_name"],
    "exposeHeaders": [
      "content-length",
      "content-range",
      "accept-ranges"
    ],
    "maxAgeSeconds": 3600
  }
]

参阅 Backblaze 的 官方 CORS 规则参考.

正式开播前

  1. 在隐私/无痕窗口中打开准确的媒体 URL。它必须直接加载文件。
  2. 使用 图片 用于 PNG、JPG、WebP 或 GIF 媒体。使用 视频/嵌入 用于视频或嵌入 URL。
  3. 为保证兼容性,音频优先使用 MP3,图片使用 PNG/WebP/GIF,视频使用 H.264/AAC MP4。
  4. 在 OBS 中打开 Flow Actions 页面,使用与 Event Flow 相同的会话 ID。
  5. 使用 Event Flow 测试面板,然后在正式直播前刷新 OBS 浏览器源一次。
  • URL 触发下载而不是播放: 托管服务发送了错误的内容类型或仅供下载的响应。
  • 云端文件被阻止: 将其设为公开,并检查 CORS 来源地址、方法和响应头。
  • 本地文件缺失: 在 SSApp 中打开操作并使用 重新关联.
  • 本地服务器离线: 启动 SSApp;如果端口或安全令牌已变化,请重新复制本地 Flow Actions URL。
  • 托管的 Flow Actions 无法播放本地项目: 将 OBS URL 替换为 SSApp 生成的 URL。
  • OBS 没有收到内容: 确认 Flow Actions URL 和 Event Flow 使用相同的会话 ID。