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,因为它们的行为略有不同。

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多