如何通过Azure Media Services直接将预录视频转为RTMP直播流?
简化Azure生态内预录MP4转直播流的方案
你绝对是对的——Azure生态里确实藏着一个更简洁的解决方案,完全不用折腾Docker+FFmpeg的复杂流程,也能规避你担心的性能、延迟和组件崩溃问题。核心就是用Azure Media Services (AMS) 的原生VOD转直播功能,全程API可控,所有操作都在Azure体系内完成。
为什么你的现有流程复杂?
你之前的方案相当于自己搭建了一个中间推流层(FFmpeg+Docker),但AMS本身就支持直接将预录的MP4(作为Media Asset)作为直播流的输入,内部自动完成封装和分发,完全不需要外部编码器介入。
具体实现步骤(全程API/代码自动化)
1. 提前上传预录MP4到AMS Asset
先把你的预录视频上传到AMS的Media Asset里——这一步可以提前完成,后续直播直接复用,不用每次重复上传。用Azure CLI的话,命令如下:
# 创建空Asset az ams asset create -a <你的AMS账户名> -g <资源组名> -n "PreRecordedLiveSource" # 上传MP4到Asset az ams asset upload -a <你的AMS账户名> -g <资源组名> -n "PreRecordedLiveSource" -f "/本地路径/你的视频.mp4"
2. 创建支持Asset输入的Live Event
不要创建普通的RTMP输入Live Event,而是创建Pass-Through类型的Live Event,并指定输入为你刚才上传的Asset。这种模式下,AMS会直接把预录视频封装成直播流,不需要额外转码,性能拉满且启动快。
示例API请求(简化版,可通过SDK/Postman调用):
POST https://management.azure.com/subscriptions/{订阅ID}/resourceGroups/{资源组名}/providers/Microsoft.Media/mediaServices/{AMS账户名}/liveEvents/{LiveEvent名称}?api-version=2022-08-01 { "properties": { "input": { "type": "Asset", "assetName": "PreRecordedLiveSource" }, "encoding": { "type": "PassThrough" }, "preview": { "accessControl": { "ip": { "allow": [{"address": "0.0.0.0", "subnetPrefixLength": 0}] } } }, "autoStart": true } }
3. 创建Live Output并获取分发URL
Live Event启动后,需要创建一个Live Output来归档并分发直播流:
az ams live-output create -a <你的AMS账户名> -g <资源组名> -n "PreRecordedLiveOutput" \ --live-event-name <你的LiveEvent名称> \ --asset-name "LiveArchiveAsset" \ --archive-window-length PT1H
之后你就可以通过AMS的Streaming Endpoint获取直播流的分发URL,直接提供给网页播放器:
- HLS格式:
https://<StreamingEndpoint域名>/streaming/LiveArchiveAsset.ism/manifest(format=m3u8-aapl) - DASH格式:
https://<StreamingEndpoint域名>/streaming/LiveArchiveAsset.ism/manifest(format=mpd-time-csf)
优势对比你的现有方案
- 去掉了FFmpeg/Docker依赖:完全由AMS托管处理流封装,不用担心编码器性能、容器启动延迟或崩溃问题
- 流程极大简化:从5步缩减为3步(提前上传+创建Live Event+获取URL),API调用更简洁
- 成本可控:Pass-Through模式不需要转码费用,仅收取Live Event和Streaming Endpoint的基础费用,且直播结束后可立即停止资源避免浪费
- 高可用性:AMS是Azure托管服务,自带冗余和故障恢复,无需自己维护组件
额外优化建议
- 可以用Azure Logic Apps或Azure Functions实现自动化:比如定时启动/停止Live Event,或者在直播结束后自动清理资源
- 如果需要转码(比如适配不同分辨率),可以把
encoding.type改成Standard或Premium1080p,AMS会自动完成转码
内容的提问来源于stack exchange,提问作者Andrea Doyon




