azure - 将预先录制的视频作为直播流传输到 Azure 媒体服务

标签 azure azure-media-services

我想做一些对我来说听起来很简单的事情,但我很难找到解决方案。

我有一个预先录制的视频,需要通过 API 启动。我需要通过 RTMP 直播该视频。现在我执行以下操作:

(全部通过代码自动化)

  • 创建 Azure 实时事件
  • 获取直播事件的输入网址
  • 使用 FFMPG 启动 Docker 镜像
  • 提供参数(原始预录制视频和实时编码器的目标输入)
  • 从端点获取输出 URL
  • 将其放入数据库
  • 有一个 API,我的网络播放器可以查询该 API 以了解作业的状态
  • 当数据库中的行现在具有来自实时编码器的输出 URL 时启动流

它的接缝非常复杂。我很担心这样一个流程中的很多问题:

  • ffmpg 的性能问题
  • 延迟启动所有资源
  • 该流程中的一个组件崩溃了

最后我只想开始直播并告诉它使用 MP4 而不是等待 RTMP feed....

选项>

  • Restream.io 让我可以安排任何视频并开始将其流式传输到我的端点。我必须修改他们的 API 才能使其正常工作,而且我宁愿将所有内容都保留在 azure 中。

我很确定我在这里错过了一件极其简单的事情。任何帮助将不胜感激!

最佳答案

首先要回答人们的问题,我让这个流程运行了 300 多个测试流,每个测试流的形式各不相同,从 48 小时长到 30 分钟短的流。

失败率极高。

  • 媒体服务未能及时启动
  • FFMPEG 丢帧率
  • 正如你想象的那样,设置非常昂贵
  • 断开媒体服务和 FFMPEG 之间的连接。
  • 实时编码器无法从 FFMPEG 捕获流

另一方面,我的正常流性能(来自 RTMP 源)非常稳定。

  • 10 天 24 小时/7 在 10 个端点编码器上进行流式传输(警告,您必须联系 Microsoft 才能将限制增加到 5 个)
  • 在全局 350 个城市提供超过 20 TB 的数据,具有出色的性能和极低的延迟。

因此,对于作为“实时流”体验向所有观众提供的预先录制的视频,我采用了一种非常简单的方式。

当我确实需要可变比特率时,选项1:

  • 自动化了 AWS G4 实例上 OBS 中的脚本。
  • 通过 API 完全控制(启动、关闭和流式传输)
  • 我推送到 Azure 事件中心的非常详细的错误状态
  • 海量直播失败率为零
  • 缺点:不在我的 Azure 结算帐户中

当我不需要需要可变比特率时,选择 2:

  • 在 Azure 媒体服务中设置 MP4
  • Json 时间戳作为我的 MP4 的元数据
  • 通过 Javascript 同步我的 Azure 视频播放器,以遵循 MP4 中的当前时间戳,并让我的所有流事件在正确的时刻触发播放器和我的应用程序以供每个人观看。

现在我正在所有 VOD 和 RTMP 上攻击 5 种语言的实时翻译...祝我好运。

干杯!

关于azure - 将预先录制的视频作为直播流传输到 Azure 媒体服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65056528/

相关文章:

php - 使用 Azure 存储 PHP SDK 时为 "One of the request inputs is out of range"

Azure 媒体服务 : How to change the naming convention of the containers

rest - 从 REST API 创建作业返回请求属性名称错误

azure - 将音轨添加到现有 Assets (通过 Azure 媒体服务)

azure - Powershell : Using variables when trying to add users to group

c# - Azure 连接字符串 - 对象引用未设置为对象的实例

python - Azure功能部署失败: `Malformed SCM_RUN_FROM_PACKAGE when uploading built content.`

c# - 如何从 Azure 媒体服务获取视频的时长?

Azure 媒体服务 - 流恢复吗?

javascript - 将数据从 html 表单发布到 SQL 不会发布