本文主要介绍使用直播录制功能中遇到的常见问题。
录制配置
录制模板支持哪些触发方式?如何选择?
直播录制支持四种触发方式:
触发方式 | OnDemand 值 | 适用场景 | 说明 |
自动录制 | 0 | 所有匹配的流都需要录制 | 默认方式,推流即录制 |
回调确认 | 1 | 根据业务规则动态决定是否录制 | 推流时向您预设的按需回调地址发 HTTP 请求确认 |
推流参数设置 | 2 | 由推流端控制是否录制 | 推流地址中携带 |
手动录制 | 7 | 完全由业务逻辑控制录制 | 调用 RealTimeRecordCommand 接口启停 |
注意事项:
使用"回调确认"时,需先在事件回调配置中指定"按需回调地址"。回调 URL 必须支持 HTTP POST 请求,且在 5 秒内返回响应。
使用"推流参数设置"时,需对
record_config参数进行 URL Encode 编码。示例:rtmp://push.example.com/live/stream1?record_config=%7B%22NeedRecord%22%3Atrue%7D使用"手动录制"时,需先创建录制模板(触发方式设为手动录制),再在推流后调用 RealTimeRecordCommand 接口启动录制。
直播是否可同时录制到 VOD 和 OSS?
不支持。同一个直播流不能同时配置两种存储方式,请根据业务需求选择其中一种:
存储至 VOD:适用于录制内容的二次生产(剪辑、转码、合成等),支持自动合并。
存储至 OSS:适用于录制内容的长期存储和管理,支持 M3U8、FLV、MP4、CMAF 四种存储格式。
存储至 OSS 提示"OSS 中没有和直播域名同地域的 Bucket"?
该提示表示您的 OSS 中没有与直播播流域名所在地域匹配的存储空间。请先确认播流域名的直播中心所在地域(可在视频直播控制台 > 域名管理中查看),然后前往 OSS 管理控制台 在对应地域创建一个 Bucket。
直播录制到 VOD 中无法选择录制转码模板?
选择录制转码模板时,需先在视频点播中创建转码模板组。注意:视频点播转码模板组所在区域需与当前域名的直播中心所在区域保持一致。例如,当前域名直播中心为华东2(上海),视频点播转码模板组也需要在华东2(上海)区域创建。
具体操作,请参见转码模板。
录制存储至 VOD 时,某些地域提示不支持?
部分地域可能暂未支持录制存储至 VOD。如遇此情况,可改用录制存储至 OSS,再通过媒体处理服务进行后续的转码等操作。
录制文件生成与分段
直播结束后多长时间可以看到录制文件?可以立即生成吗?
生成机制
录制文件并非在断流瞬间生成。系统会在断流后等待断流拼接时长(默认 180 秒)。在此期间若恢复推流,录制内容将自动合并至同一个文件;若超时未恢复,系统判定直播结束并生成录制文件。
您可以根据业务需求调整断流拼接时长(范围 15~21600 秒)。若设置过短,易因网络抖动生成大量碎片文件;若设置过长,会导致直播结束后需长时间等待才能看到文件。
立即生成方案
如果需要在直播结束后立即获取录制文件,而无需等待断流拼接时长,可以给推流设置事件回调(请参见事件回调),在接收到推流结束通知时,调用实时录制指令接口取消断流拼接:
realTimeRecordCommandRequest.setCommand("cancel_delay");
录制模板配置完成后,但没有录制文件生成?
请按照以下步骤逐一排查:
确认录制模板的配置时间。 录制模板必须在推流开始前创建并配置完成,推流过程中新创建的模板需要下次推流才会生效。
确认录制模板的匹配规则。 检查录制模板中的 AppName、StreamName 和推流地址中的 AppName、StreamName 是否匹配。系统按精确匹配优先的策略生效,详见匹配逻辑:
优先级
DomainName
AppName
StreamName
1
指定
指定
指定
2
指定
指定
*
3
指定
*
*
确认存储配置正确。
录制存储至 OSS 时,OSS Bucket 必须与播流域名的直播中心为同地域、同账号,不支持跨账号或跨地域存储。
录制存储至 VOD 时,视频点播存储 Bucket 必须与播流域名的直播中心同地域。
确认 OSS 写入权限已授权。 存储至 OSS 时,必须完成 AliyunMTSDefaultRole 角色授权。如该权限意外被删除,可点击同意云资源访问授权完成快速授权。
确认 OSS Bucket 状态正常。 如果 OSS Bucket 因欠费被释放、因违规被禁用,录制将无法写入。请前往 OSS 管理控制台 确认 Bucket 状态。
确认推流有实际音视频数据。 如果推流连接正常但未发送有效的音视频帧数据,系统不会触发录制。可通过播放该直播流来验证是否有画面和声音。
确认音视频编码格式。 直播录制仅支持以下编码格式:
视频编码:H.264 (AVC)、H.265 (HEVC)、MPEG-4
音频编码:AAC、MP3
如果直播流包含了非以上格式编码的音视频,可能出现无法生成录制文件、录制黑屏、无声等异常。
录制周期的作用是什么?
录制周期为单个录制文件的最大时长。当直播持续时间超过录制周期,系统将自动切分并生成新文件。
默认值:180 分钟
范围:15~360 分钟
可在直播控制台配置录制模板时设置,也可通过 API 接口 添加直播录制转点播配置(录制到 VOD)或 添加录制配置(录制到 OSS)设置。
直播结束后生成了很多短时长的录制文件?
录制文件被切分为多个短文件,通常有以下原因:
推流过程中频繁断流,且断流时间超过断流拼接时长。 每次断流超时后系统会生成一个独立的录制文件。请排查推流端网络稳定性。
录制周期设置过短。 直播时长超过录制周期后,系统会自动切分生成新文件。请检查录制模板中的录制周期配置。
手动调用了录制停止/重启接口。 调用 RealTimeRecordCommand 的
stop或restart命令会强制切分文件。
一场直播被分成多个录制文件,如何合并为一个文件?
根据存储方式不同,合并方案也不同:
存储至 VOD
开启录制模板中的"自动合并"选项后,直播结束时系统会自动将同一场直播中因录制周期切分产生的多个文件合并为一个。合并后的文件与原录制文件均保留在点播服务中。
注意:自动合并需要一定处理时间(取决于文件时长和数量),不是实时完成的。
存储至 OSS
存储至 OSS 时,可通过以下方式合并录制内容(需包含 M3U8 格式):
录制索引剪辑:在直播控制台 > 功能管理 > 直播录制 > 录制文件管理中,使用"录制索引剪辑"功能,选择时间范围后保存新的 M3U8 文件。
调用 API:调用 创建录制索引文件 接口创建新的索引文件(TS 切片信息仅保存 3 个月)。
断流拼接时长设置过长(如 6 小时),导致长时间看不到录制文件?
断流拼接时长决定了系统在多长时间内等待推流恢复。如果设置为 21600 秒(6 小时),则断流后需等待 6 小时系统才会判定直播结束并生成文件。
建议: 根据实际业务场景合理设置,一般建议保持默认值 180 秒。如果您的业务有较长时间的中断恢复需求(如课间休息),可适当增大,但不宜过长。如需在直播结束后立即获取文件,可调用 RealTimeRecordCommand 接口的 cancel_delay 命令主动结束等待。
直播未结束时,可以查看当前的录制文件吗?
在直播时长未超过录制周期的情况下,录制文件一般在直播结束后生成。如需在直播进行中获取当前的录制文件,可调用 实时录制指令接口刷新录制内容:
realTimeRecordCommandRequest.setCommand("restart");
该指令会强制结束当前的录制进程并立即生成文件,随后系统会自动开启新的一轮录制。若直播流配置了多种存储格式,此操作会将所有格式一起刷新。
录制回调
如何获取录制完成的通知?
直播录制支持通过录制回调将录制文件信息主动推送到您的业务系统。根据存储方式不同,回调配置方式也不同:
存储至 OSS:在视频直播控制台 > 功能管理 > 事件回调中配置"录制回调地址"。录制文件生成后,系统会向该地址发送包含文件路径、时长等信息的 HTTP POST 请求。
存储至 VOD:录制完成通知需要在视频点播服务中配置回调。在视频点播控制台设置"视频上传完成"事件回调即可获取通知。请注意,这里不是在直播服务中配置。
为什么录制回调收不到通知?
请按以下步骤排查:
确认回调 URL 是否可正常访问。 回调 URL 必须支持 HTTP POST 请求,且不能存在 301/302 重定向。如果 URL 配置了重定向,回调将会失败。
确认回调 URL 在 5 秒内返回了 HTTP 200 响应。 如果回调超时(5 秒),系统会重试最多 5 次,每次间隔 1 秒。如果所有重试均失败,该回调将被丢弃。
确认回调配置在正确的服务中。 存储至 OSS 的录制回调在视频直播服务中配置;存储至 VOD 的录制回调需在视频点播服务中配置。
确认回调地址配置无误。 回调 URL 必须为完整的 HTTP/HTTPS 地址,且您的服务器防火墙未拦截来自阿里云的请求。
如何确保不遗漏录制文件?除了回调还有其他方式获取录制信息吗?
由于网络异常等原因,录制回调可能存在少量丢失的情况。建议采用回调 + 主动查询的方式确保完整获取录制文件:
主动查询方式:调用 查询直播录制回调记录 接口查询录制回调记录,作为回调的兜底方案。
录制文件查询:调用 查询某个时间段内的所有录制索引文件 接口(存储至 OSS),或通过视频点播的 GetVideoList 接口(存储至 VOD)主动查询录制文件列表。
录制回调中如何获取 MP4 格式的播放地址?
录制回调中的 file_url 字段返回的是直播录制直接生成的文件地址。如果您配置的存储格式为 M3U8,回调中返回的就是 M3U8 文件地址。
如需获取 MP4 格式的播放地址:
存储至 VOD:在视频点播中配置转码模板,录制文件上传后会自动触发转码。转码完成后通过点播的"转码完成回调"获取 MP4 地址,或调用 GetPlayInfo 接口获取。
存储至 OSS:如果录制模板中同时选择了 MP4 格式,系统会直接生成 MP4 文件并在回调中返回对应地址。也可通过媒体处理服务将 M3U8 转码为 MP4。
如何在录制回调中透传自定义参数?
可以在推流地址中添加以 callback_ 为前缀的参数,系统会将这些参数透传到录制回调中。例如:
推流地址:rtmp://push.example.com/live/stream1?callback_taskid=12345&auth_key=xxx
录制回调中会包含:"push_args": "callback_taskid=12345"
注意: 该能力仅对源流推流地址中的参数生效,转码流的回调中不会包含此信息。
同一路流收到了多次录制回调,是正常的吗?
以下情况会产生多次回调:
录制周期切分:直播时长超过录制周期时,每生成一个文件都会触发一次回调。
断流超时切分:断流时间超过拼接时长后,恢复推流会产生新文件和新回调。
同时使用自动录制和手动录制:如果在自动录制进行中又调用了 RealTimeRecordCommand 启动手动录制,可能产生重复文件。
配置了多种存储格式:每种格式(M3U8、FLV、MP4 等)生成文件后分别触发回调。
如果收到内容完全相同的重复回调,请检查是否同时开启了自动录制和手动录制(RealTimeRecordCommand)。
按需录制的回调机制是怎样的?为什么按需录制没有启动?
按需录制通过 HTTP 回调实现:推流开始时,系统会请求您配置的回调地址,您的接口返回 NeedRecord:true 时才会启动录制。使用时请注意:
您的回调接口必须返回 HTTP 200;返回 400 等非 200 状态码时,系统无法获取判断结果,录制不会启动。
按需录制在流断开且超过拼接时长缓冲后终止,也可调用 RealTimeRecordCommand 发送 stop 命令主动结束。
如无需按流级别控制,可改用自动录制,推流断开约 3 分钟后自动生成录制文件。
录制回调支持内网地址或 MNS 消息通知吗?
不支持。直播回调地址必须为公网可访问的地址,不支持内网地址;回调仅支持 HTTP/HTTPS 方式,不支持 MNS 等消息队列通知。如果业务系统部署在内网,需通过公网网关暴露回调接收接口。
录制文件时长与实际直播时长不一致,如何排查?
录制时长与直播时长不符通常由推流中断、周期切分或断流拼接导致。可调用 DescribeLiveStreamRecordContent 接口查询该流的完整录制时间段,确认各文件覆盖的起止时间后拼接核对。另请注意:多码率录制按多路并发计算月峰值费用,仅录制源流时按一路计算。
录制文件播放与访问
视频直播控制台通过录制文件无法观看视频?
请按以下步骤排查:
确认 OSS Bucket 权限。 如果 Bucket 权限为私有(Private),视频直播控制台无法直接获取文件的访问地址,播放会报错。解决方案:
将 Bucket 的读写权限改为"公共读",请参见Bucket ACL。
或通过 OSS 的预签名 URL 方式获取临时访问地址,使用其他播放器播放。请参见使用预签名URL下载或预览文件。
确认 HTTPS 配置。 视频直播控制台为 HTTPS 环境,无法加载 HTTP 协议的资源。如果您使用 OSS 自定义域名,需配置 SSL 证书。若使用 OSS 默认域名,则无需配置(已自带 HTTPS 证书)。配置方法请参见部署SSL证书。
确认 OSS Bucket 允许跨域访问(CORS)。 推荐配置:
来源(AllowedOrigin):
*允许 Methods:全选(GET、POST、PUT、DELETE、HEAD)
允许 Headers:
*暴露 Headers:
ETag、x-oss-request-id勾选"返回 Vary: Origin"
确认 SSL 证书是否有效。 如果 CDN 或 OSS 自定义域名的 SSL 证书已过期或无效,浏览器会拒绝加载资源。请前往证书管理检查证书有效期并及时更新。
如果以上配置均正确但仍无法播放,请提交工单联系阿里云技术支持。
直播录制到 OSS 中,如何获取录制文件的播放地址?
根据 Bucket 的访问权限不同:
公共读 Bucket:直接通过文件的 OSS 访问地址播放,格式为
https://{BucketName}.oss-{Region}.aliyuncs.com/{ObjectName}。私有 Bucket:需使用 OSS 的预签名 URL(Presigned URL)生成临时访问地址。详细操作请参见使用预签名URL下载或预览文件。
注意: 存储至 VOD 的录制文件,请通过视频点播的 GetPlayInfo 接口获取播放地址,不要直接使用 OSS 签名 URL。
录制文件播放时报 4400 错误或混合内容错误?
通常是 HTTPS/HTTP 协议不匹配导致。如果您的网页为 HTTPS 环境(如视频直播控制台),浏览器会阻止加载 HTTP 协议的视频资源。
解决方案:
为 OSS 自定义域名配置 SSL 证书,使用 HTTPS 地址播放。
或在 HTTP 环境下的播放器(如阿里云播放器诊断工具)中测试播放。
录制视频白屏只有声音,或有画面没有声音?
这通常是推流端问题导致,直播录制仅做封装格式转换,不修改编码层内容。请排查:
白屏无画面:推流端可能未正确输出视频帧(如屏幕共享时未正确捕获画面、摄像头未正常工作),或视频编码格式不在支持范围内。
有画面无声音:推流端可能未发送音频数据,或音频编码格式不是 AAC/MP3。
花屏或播放卡顿:推流端编码异常(如关键帧间隔过大、时间戳不稳定),录制文件会保留这些瑕疵。
建议先下载录制文件后使用 VLC 等本地播放器验证,以排除播放器兼容性问题。
录制文件查询与管理
直播录制后,如何获取录制文件?
根据存储方式不同,查看方式也不同:
存储至 VOD
直播控制台:功能管理 > 直播录制 > 录制文件管理 > 存储至 VOD 页签。
点播控制台:媒资库 > 音/视频。
API:调用视频点播的 GetVideoList / GetVideoInfo 接口。
存储至 OSS
直播控制台:功能管理 > 直播录制 > 录制文件管理 > 存储至 OSS 页签。
OSS 控制台:根据存储规则路径(默认为
record/{AppName}/{StreamName}/目录)直接查看。API:调用 查询某个时间段内的所有录制索引文件 接口查询。
查询录制索引文件提示"数据已过期"或查不到历史录制记录?
视频直播系统中的录制索引信息保留策略如下:
录制索引文件:保留 6 个月,超过 6 个月无法通过 DescribeLiveStreamRecordIndexFiles 接口或控制台查询。
TS 切片信息:保留 3 个月,超过 3 个月无法使用录制索引剪辑功能。
注意: 索引信息过期不影响存储在 OSS/VOD 中的实际录制文件,文件仍然存在。如需查看历史文件,可直接前往 OSS 控制台按存储路径查找,或使用视频点播媒资库搜索。
建议在业务系统中自行维护录制文件的元数据(如文件路径、时长、时间等),以便长期查询。
是否可通过调用接口下载直播录制到 OSS 中的录制文件?
视频直播不提供直接下载录制文件的接口。下载录制文件的方式:
OSS 下载:录制文件实际存储在 OSS 中,可通过 OSS SDK 或控制台下载。详细操作请参见简单下载。
预签名 URL:对于私有 Bucket,生成预签名 URL 后通过浏览器或工具下载。
如何删除录制文件?OSS 录制和 VOD 录制的删除方式有什么区别?
存储至 OSS 的录制文件:
方式 | 说明 |
直播控制台 | 录制文件管理页签选择文件删除,可勾选"同步删除存储在 OSS 的录制文件" |
直播 API | 调用 删除直播录制文件 接口 |
OSS 直接删除 | 前往 OSS 控制台或使用 OSS API 删除实际文件 |
通过控制台或直播 API 同步删除 OSS 文件时,需要创建服务角色 AliyunMTSVideoLifecycleRole 并授予 AliyunMTSVideoLifecycleRolePolicy 策略。可点击授权完成一键授权。
存储至 VOD 的录制文件:
需通过视频点播服务管理和删除,使用点播控制台的媒资库或调用点播的 DeleteVideo 接口。请勿使用直播的 DeleteLiveStreamRecordIndexFiles 接口删除 VOD 录制文件。
如何获取录制文件的时长信息?
存储至 OSS:调用 查询某个时间段内的所有录制索引文件 接口,返回结果中包含 Duration(时长)字段。
存储至 VOD:调用视频点播的 GetVideoInfo 接口获取视频时长。
调用删除录制文件接口报权限不足错误?
调用 DeleteLiveStreamRecordIndexFiles 接口时,如果选择同步删除 OSS 文件(RemoveFile=true),需要确保:
已创建 AliyunMTSVideoLifecycleRole 角色并完成授权。
如果使用 RAM 用户调用,需要该用户具备对应的 OSS 删除权限。
其他常见问题
录制索引剪辑只能生成新的 M3U8 文件,如何将录制文件转为 MP4?
可以使用媒体处理服务将 M3U8 文件转码为 MP4 格式。具体操作,请参见快速提交转码任务。
未配置录制模板,导致调用 RealTimeRecordCommand 手动录制报错
在调用 实时录制指令 接口进行手动录制前,必须先创建录制模板并将触发方式设置为"手动录制"(OnDemand=7)。系统需要通过录制模板获取存储配置等参数。详细流程请参见录制触发方式中的"手动录制"章节。
已错过的直播没有配置录制,能否找回视频内容?
如果在直播过程中未配置录制模板,直播服务不会保存流数据,直播结束后无法找回。建议在每次直播前提前配置好录制模板。
拉流转推场景下如何实现录制?
使用拉流转推功能将外部源拉取并推送到直播服务后,系统会将其视为一路正常的推流。您可以为拉流转推的目标播流域名配置录制模板,即可实现对拉流转推内容的录制。
注意事项:
确保拉流转推任务正常运行且有音视频数据传输。
录制模板中的 AppName 和 StreamName 需与拉流转推配置中的目标流信息匹配。