我想运行一个实例冰播在 Azure 上,利用容器以及 Azure 提供的 SSL 终止功能。
对于那些不知道的人来说,Icecast 是一个由 Web 服务器组成的 HTTP 媒体服务器,在同一端点提供 UI/UX 和流媒体服务。
我可以配置多媒体软件,例如 Traktor Studio,以便向 Icecast 服务器进行直播。
过去几天我所做的(我可以重新创建示例并根据要求导出 ARM 模板)是基于容器创建一个 Azure Web App 实例,该容器是帖子中链接的容器。通过设置环境变量,我可以通过 HTTP 和 HTTPS 启动并运行容器。UX 有效。
然而,流媒体又是另一回事。我没有,可能也不会有源广播的详细日志,但 Traktor 无法启动直播,因此无法从 Icecast 播放音乐。如果我在 Docker 上本地运行相同的容器,我就可以轻而易举地向本地主机广播。
我尝试使用 Wireshark,禁用 HTTPS 来查找实际数据,我发现 Traktor(和其他与 Icecast 兼容的源)使用一种不寻常的 HTTP 方法与 Icecast 进行交互
SOURCE /thestream.ogg HTTP/1.1
Host: icecasthostexample.azureapp.net
User-Agent: Traktor and version UA
//Some multimedia headers including bitrate
Connection: close
[the ogg stream with music]
我发现 Azure 会响应,200 OK, Connection: Close
并且不会向 Icecast 发送任何音乐。Icecast 显示有流,但尝试播放它时不会显示任何内容。
我相信从我的发现来看,Azure 容器应用并不是最佳方法HTTP SOURCE
,因为 Web 应用嵌入的 http 端点(也用作 SSL 终止器)可能想要解释 HTTP 调用,因此无法很好地与此配合使用。需要澄清的是,在这个阶段,我无法通过 HTTP 或 HTTPS 运行 Icecast,因为 Web Apps for Containers 在 HTTP 上的行为与此类似(我尝试使用 HTTP 来嗅探网络上发生的事情)
最后,我必须通过 HTTPS 部署 Icecast,因为监听客户端必须通过 HTTPS 运行。不过,我可以通过我喜欢的协议进行广播。作为媒体服务器,Icecast 可以接收入站来自 http 的音乐和服务出站通过 https。
所以我的问题分为两个:
- 记录的行为是否正常?Web Apps PaaS 上的 http(s) 终止符有什么限制?它们不能处理多媒体对话吗?它们是否只需要使用核心 HTTP 方法?(是的,这是一个问题)
- 除了虚拟机(我在其中安装 Icecast 或以 IaaS 方式部署 Docker)之外,终止*HTTP/SSL 流量并将原始 TCP 流量路由到 Azure PaaS Docker 服务的正确方法是什么?
我可以根据要求提供信息来复制该场景。
- 这意味着我要么剥离加密并路由 TCP,要么只路由不受影响的 TCP