stream.new

stream.new

Mux驱动的开源视频录制上传应用

该开源项目充分利用Mux平台能力,实现视频录制上传功能。集成Mux直接上传、webhook安全验证和HLS播放技术,并开发Slack审核机器人。基于NextJS框架,运用SWR、API路由等现代web开发特性。支持Vercel一键部署,可选配Google Vision或Hive AI增强内容审核能力。

stream.new视频上传Mux内容审核SlackbotGithub开源项目
<p align="center"> <a href="https://mux.com/"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/360826/233653989-11cd8603-c20f-4008-8bf7-dc15b743c52b.svg"> <source media="(prefers-color-scheme: light)" srcset="https://yellow-cdn.veclightyear.com/0a4dffa0/0208a69e-883a-4727-9bad-3939ddd3687d.svg"> <img alt="Mux 标志" src="https://yellow-cdn.veclightyear.com/0a4dffa0/0208a69e-883a-4727-9bad-3939ddd3687d.svg"> </picture> <h1 align="center">stream.new</h1> </a> </p> <div align="center"> <a href="https://github.com/muxinc/stream.new/stargazers"><img src="https://img.shields.io/github/stars/muxinc/stream.new" alt="星标数量"/></a> <a href="https://github.com/muxinc/stream.new/network/members"><img src="https://img.shields.io/github/forks/muxinc/stream.new" alt="分支数量"/></a> <a href="https://github.com/muxinc/stream.new/pulls"><img src="https://img.shields.io/github/issues-pr/muxinc/stream.new" alt="拉取请求数量"/></a> <a href="https://github.com/muxinc/stream.new/issues"><img src="https://img.shields.io/github/issues/muxinc/stream.new" alt="问题数量"/></a> <a href="https://github.com/muxinc/stream.new/graphs/contributors"><img alt="GitHub 贡献者" src="https://img.shields.io/github/contributors/muxinc/stream.new?color=2b9348"></a> </div> <br /> <p align="center"> 一个开源示例应用程序,允许用户使用 Mux 录制和上传视频 <br /> <br /> <a href="https://stream.new/">查看演示</a> · <a href="https://github.com/muxinc/stream.new/issues">报告错误</a> · <a href="https://github.com/muxinc/stream.new/issues">请求功能</a> </p> <!-- 目录 --> <details open="open"> <summary><h2 style="display: inline-block">目录</h2></summary> <ol> <li> <a href="#about-the-project">关于项目</a> <ul> <li> <a href="#components">组件</a> </li> </ul> </li> <li> <a href="#getting-started">入门指南</a> <ul> <li><a href="#step-1-create-an-account-in-mux">步骤 1. 在 Mux 创建账户</a></li> <li><a href="#step-2-set-up-environment-variables">步骤 2. 设置环境变量</a></li> <li><a href="#step-3-deploy-on-vercel">步骤 3. 在 Vercel 上部署</a></li> <li><a href="#step-4-optional-slackbot-moderator">步骤 4. (可选)Slackbot 审核员</a></li> <li><a href="#step-5-optional-add-automatic-content-analysis-to-slackbot-moderator-google-vision-api" >步骤 5. (可选)为 Slackbot 审核员添加自动内容分析(Google Vision API)</a></li> <li><a href="#step-6-optional-add-automatic-content-analysis-to-slackbot-moderator-hive-ai" >步骤 6. (可选)为 Slackbot 审核员添加自动内容分析(Hive AI)</a></li> </ul> </li> <li><a href="#videos-to-test-in-development">开发中测试的视频</a></li> </ol> </details> <!-- 关于项目 -->

关于项目

组件:

Mux:

  • 直接上传 - 这是一个用于从客户端上传视频文件以创建 Mux 资产的 API
  • Webhook 签名验证 - Webhook 签名验证,确保 Mux webhooks 来自可信来源
  • HLS.js - 用于进行视频的 HLS 播放
  • Mux Data - 用于跟踪视频质量指标

Slackbot 审核员。这个示例允许你配置 SLACK_WEBHOOK_ASSET_READY。当新的 Mux 资产"就绪"时,将发送一个 Slack 的传入 Webhook。这是一个如何集成可用于内容审核的 Slack 频道的示例。Slack 消息包含资产 ID、播放 ID 和视频的缩略图故事板。

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/039fd24f-187b-4da4-bfdf-5b2f8ec18d26.png" width="80%" alt="Slackbot 消息"></img> </div>

NextJS:

  • SWR — 根据客户端是否应该轮询更新来动态更改 refreshInterval
  • /pages/api 路由 — 几个用于向 Mux API 发出经过身份验证的请求的端点
  • 使用 getStaticPathsfallback: true 的动态路由,以及动态 API 路由

这个应用程序以 NextJS with-mux-video 示例 为起点创建。

<!-- 入门指南 -->

入门指南

步骤 1. 在 Mux 创建账户

设置这个只需要一个 Mux 账户。你可以免费注册,定价采用按使用付费的方式。没有预付费用,你只需为实际使用的部分按月付费。

如果你没有在 Mux 账户中输入信用卡,所有视频都处于"测试模式",这意味着它们会带有水印并被剪辑到 10 秒。如果你输入信用卡,所有限制都将解除,你将获得 20 美元的免费额度。在收费之前,这笔免费额度应该足够让你测试和体验所有功能。

步骤 2. 设置环境变量

将此目录中的 .env.local.example 文件复制为 .env.local(Git 会忽略该文件):

cp .env.local.example .env.local

然后,前往 Mux 仪表板中的设置页面,获取一个新的允许对 Mux Video 进行"完全访问"的 API 访问令牌,并在 .env.local 中设置以下变量:

  • MUX_TOKEN_ID 应为新令牌的 TOKEN ID
  • MUX_TOKEN_SECRET 应为 TOKEN SECRET
  • MUX_WEBHOOK_SIGNATURE_SECRET(可选)- 如果设置了 webhooks,则为 webhook 签名密钥(见下文)
  • SLACK_WEBHOOK_ASSET_READY(可选)- 用于 Slackbot 审核员功能的 Slack webhook URL(见下文)
  • SLACK_MODERATOR_PASSWORD(可选)- 当你想从 Slackbot 审核员功能执行操作时使用的密码(见下文)
  • NEXT_PUBLIC_MUX_ENV_KEY(可选)- 用于 Mux Data 集成的 Mux 环境密钥

第 3 步. 在 Vercel 上部署

你可以使用 Vercel 将此应用部署到云端(文档)。

要在 Vercel 上部署,你需要使用 Vercel CLI 设置环境变量(文档)。

安装 Vercel CLI,从 CLI 登录你的账户,然后运行以下命令添加环境变量。将值替换为 .env.local 中对应的字符串:

vercel secrets add stream_new_token_id <MUX_TOKEN_ID> vercel secrets add stream_new_token_secret <MUX_TOKEN_SECRET>

然后将项目推送到 GitHub/GitLab/Bitbucket,并导入到 Vercel 进行部署。

第 4 步(可选)Slackbot 审核员

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/039fd24f-187b-4da4-bfdf-5b2f8ec18d26.png" width="80%" alt="Slackbot 消息"></img> </div>

此应用程序使用 Slackbot 在每次有新资源准备好播放时向 Slack 频道发送消息。这需要进行一些设置步骤。

首先,登录到你的 Mux 仪表板,在左侧边栏导航中找到 设置 > Webhooks。创建一个新的 webhook,确保你创建的 webhook 环境与你使用的访问令牌相匹配。

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/ccf0b9a1-f667-497f-8575-2aa3e30d1588.png" width="80%" alt="创建 Mux Webhook"></img> </div>

对于本地开发,你可能需要使用类似 ngrok 的工具在 localhost 上接收 webhooks。webhook 处理程序的路由是 /api/webhooks/mux(在此 NextJS 应用的 ./pages/api/webhooks/mux 中定义)。

创建一个 Slack "传入 Webhook"。配置要发布到的频道、图标等。

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3b2b58d5-8e88-4388-bd33-0af6ef36f79f.png" width="80%" alt="Slack 传入 Webhook"></img> </div>

完成后,你应该会得到一个类似 https://hooks.slack.com/services/... 的 Slack webhook URL。

通过直接在 Vercel UI 中设置或通过更新 vercel.json 并将它们设置为组织的机密来设置可选的环境变量。可选的环境变量包括:

  • MUX_WEBHOOK_SIGNATURE_SECRET - 这是一种安全机制,用于在请求到达服务器时检查 webhook 签名头,以便服务器可以验证 webhook 是否来自 Mux。阅读更多关于 webhook 签名验证 的信息。请注意,在 ./pages/api/webhooks/mux 中,只有在设置了签名密钥变量时,代码才会验证签名,所以这一步是可选的。
  • SLACK_WEBHOOK_ASSET_READY - 这是创建 Slack 传入 Webhook 时得到的 https://hooks.slack.com/services/.... URL。
  • SLACK_MODERATOR_PASSWORD - 这是用于授权从 Slack 审核员删除资源的密码(带有红色文字"DELETE (cannot be undone)"的按钮)
  • NEXT_PUBLIC_MUX_ENV_KEY - 这是用于 Mux Data 的环境密钥。注意,这与你的 API 密钥不同,可以在 Mux 仪表板的环境页面 找到此环境密钥
  • TELEMETRY_ENDPOINT - 这是发送检测遥测数据的端点。截至此更新,我们仅在上传性能周围收集/发送遥测数据,以测试 UpChunk 的不同配置,但将来可能会有更多。

设置完所有这些后,流程将是:

  1. 上传资源
  2. Mux 向你的服务器(NextJS API 函数)发送 webhook
  3. (可选)你的服务器验证 webhook 签名
  4. 如果 webhook 匹配 video.asset.ready,则你的服务器将向你的 Slack 频道发送一条包含 Mux Asset ID、Mux Playback ID 和视频缩略图的消息。

第 5 步(可选)为 Slackbot 审核员添加自动内容分析(Google Vision API)

stream.new 可以借助 Google 的 Cloud Vision API 自动审核内容。

按照以下步骤帮助审核上传的内容:

  • GOOGLE_APPLICATION_CREDENTIALS - 这是你的 Google 服务账户凭证的 base64 编码 JSON 表示。按照以下说明操作。
  1. 首先,你需要在 cloud.google.com 设置一个 Google 开发者账户。
  2. 创建一个项目
  3. 为你的项目创建一个服务账户,并为你的项目启用 "Cloud Vision API"

以 JSON 格式导出 Google 服务账户认证文件。如果你有一个类似这样的文件:

service_account.json

{
  "type": "service_account",
  "project_id": "",
  "private_key_id": "",
  "private_key": "-----BEGIN PRIVATE KEY-----\",
  "client_email": "",
  "client_id": "",
  "auth_uri": "",
  "token_uri": "",
  "auth_provider_x509_cert_url": "",
  "client_x509_cert_url": ""
}

按如下方式获取此JSON文件的base64编码字符串:

cat service-account.json | base64

^ 此命令将输出一个长字符串。这个字符串就是你将用于ENV变量GOOGLE_APPLICATION_CREDENTIALS的值。

当Slackbot审核员消息发布到Slack时,现在将包含一个"审核分数(Google)"部分,有3个维度:

  • "adult"(成人内容)
  • "suggestive"(暗示性内容)
  • "violent"(暴力内容)

每个维度的分数从1到5。你应该将这些分数解释为视频包含此类内容的可能性。这是基于Google Vision的可能性分数

  • 1: 非常不可能
  • 2: 不太可能
  • 3: 可能
  • 4: 很可能
  • 5: 非常可能
<div align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3c2980ac-f5fe-446f-97f0-c36f12fa385f.png" width="80%" alt="Slackbot审核消息"></img> </div>

步骤6(可选)为Slackbot审核员添加自动内容分析(Hive AI)

stream.new可以借助Hive AI自动审核内容。

按照以下步骤来帮助审核上传的内容:

  • HIVE_AI_KEY - 这是你的Google服务账户凭证的JSON表示的base64编码。按照以下说明操作。
  1. 首先,你需要在thehive.ai注册一个账户。
  2. 创建一个项目
  3. 获取项目的API密钥

当Slackbot审核员消息发布到Slack时,现在将包含一个标题为"审核分数(hive)"的部分,有2个维度:

  • "adult"(成人内容)
  • "suggestive"(暗示性内容)

每个维度的分数从0到1,精确到小数点后6位。这些数字来自Hive AI提供的"分类API"。详情请见

<div align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3c2980ac-f5fe-446f-97f0-c36f12fa385f.png" width="80%" alt="Slackbot审核消息"></img> </div>

通过查询参数实现的隐藏播放功能:

  • time: 将在特定的时间戳(以秒为单位)开始播放视频,例如?time=10将从10秒处开始像这样
  • color: 一个不带#的十六进制值将以primaryColor为主题设置Mux播放器。重要的是要省略#,例如?color=f97316像这样

开发中测试用的视频:

在开发过程中,如果你对视频播放器做了任何更改,请确保它能正常工作并在各种尺寸的视频中看起来不错:

横向

竖向

超竖向

同时也要确保检查: Safari, 移动版Safari, Chrome, Firefox,因为它们的行为略有不同。

编辑推荐精选

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多