{{ item.label }}
自然语言处理
文介绍视频直播Live的产品功能和对应的文档动态。
变更类型 | 发布功能 | 影响 | 文档链接 |
---|---|---|---|
新增 | 导播服务新增虚拟演播厅功能。 |
丰富导播服务功能,提供在线抠像与合成能力,
实现双屏幕、分屏、画中画等 开播场景,打造沉浸式直播体验。 |
虚拟演播厅 |
新增 | 发布美颜SDK。 |
为视频直播、视频会议、
短视频制作等视频相关 内容提供画面美化与个性化定制服务。 |
功能介绍 |
新增 | 新增触发拉流功能。 | 丰富拉流功能。 | 配置触发拉流 |
新增 | 发布RTS信令协议交互标准。 | 方便客户自研客户端。 | RTS信令协议规范 |
升级 | 时移切片限制开放至24h。 | 可满足24小时直播间回看。 | 直播时移 |
变更类型 | 发布功能 | 影响 | 文档链接 |
---|---|---|---|
升级 | 控制台发布开启低延时直播功能。 | 支持自助开通,简化开通流程。 | 低延时直播使用指南 |
升级 | 支持配置推流域名的HTTPS安全加速。 | 优化了安全加速配置。 | 安全加速 |
新增 | 发布视频直播微信小程序DEMO。 | 可快速搭建微信直播小程序。 | 直播小程序集成文档 |
升级 |
云端合流功能:
支持区域增加华东2。 新增合流任务过期自动销毁功能。 新增合流回调。 |
扩大服务范围。
新增自动销毁功能,防止忘记删除 合流任务导致的资源浪费。 新增回调功能,以便让您及时 获取合流任务创建的结果。 |
云端合流概述 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
升级 | 新增突发带宽使用限制。 | 使用限制 |
新增 | 上线轻量级轮播功能,目前只提供API接口。 | 轻量级轮播API列表 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
升级 |
控制台升级为新版本。
支持边缘推流、防盗链、 IP黑名单、HTTPS、HTTP头等配置。 优化产品开通、视频地址获取等操作体验。 直播接入云监控,通过云 监控平台对资源用量进行监控。 |
访问控制
HTTP配置 安全加速 数据统计 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
变更 | 流量带宽海外部分按照不同大区计费。 | 直播服务费用 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
升级 | 录制支持流级别配置。 | 直播录制 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
新增 | 海外链路加速(原全球加速)配置上线。 | 海外链路加速 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
新增 | 边缘推流功能自主化配置。 | 边缘推流 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
新增 | 华北2直播中心提供服务。 | 服务地域 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
新增 | 直播上线国际站,新加坡中心提供服务。 | 服务地域 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
新增 | 高分辨率(1440P)和高帧率(60FPS)实时转码上线。 | 直播转码 |
变更类型 | 发布功能 | 文档链接 |
---|---|---|
升级 | 控制台支持流监控功能,并增加带宽消耗、用户推流帧率等信息。 | 资源监控 |
本文介绍关于直播域名备案和资质审查通知,列举摩杜云直播服务调整审核的相关策略。
尊敬的摩杜云直播用户,您好!
全国“扫黄打非”办公室会同工业和信息化部、公安部、文化和旅游部、
国家广播电视总局、国家互联网信息办公室联合下发《关于加强网络直播服务管理工作的通知》,
要求网络直播服务提供者向电信主管部门履行网站ICP备案手续,涉及经营电信业务及互联网新闻信息、
网络表演、网络视听节目直播等业务的,应分别向相关部门申请取得许可。
为响应《通知》要求,摩杜云直播服务将调整审核策略,具体措施如下:
1.ICP备案审核:使用摩杜云直播服务的域名必须履行ICP备案手续,如您的域名未备案,摩杜云直播将停止为该域名提供服务。
2.资质审核:如涉及经营电信业务及互联网新闻信息、网络表演、网络视听节目直播等业务的,需办理相应许可证,许可证参考内容如下。
3.您应保证按照法律法规要求记录直播服务使用者的发布内容和日志信息并保存一定期限,对自身不具备存储能力且不购买存储服务的网络直播服务提供者,摩杜有权将停止为其提供服务。
许可证参考内容:
1.涉及电信业务的,需办理《电信业务经营许可证》,请咨询当地通信管理局。
2.涉及互联网新闻信息业务的,需办理《互联网新闻信息服务许可证》,请咨询当地互联网信息办公室。
3.涉及网络表演业务的,需办理《网络文化经营许可证》,请咨询当地人民政府文化行政部门。
4.涉及网络视听节目直播业务的,需办理《信息网络传播视听节目许可证》,请咨询国家广播电视总局。
当您主动下线直播域名,或因为业务违规封禁、欠费、掉备案而被系统执行下线直播域名时,您可以通过本文详细了解域名下线后的解析规则和业务恢复方法。
问题现象:您的账号由于违反摩杜云
使用限制
而被封禁,从而立即暂停服务,同时系统会以短信或邮件的方式提醒您。
域名下线执行流程:系统会删除CNAME,停止解析,直播域名将无法继续访问;该域名会被加入黑名单列表,无法再次被添加至视频直播控制台。
业务恢复方法:如果您的直播域名不存在
使用限制
中提及的场景,您可以联系摩杜云客服
问题现象:当您账号的可用额度(含摩杜云账户余额、代金券、优惠券、 申请的延期免停权益等)无法结清待结算的账单时,您的账号 会立即进入欠费状态,同时系统会以短信或邮件的方式提醒您尽快支付账单。
域名下线执行流程:
正常情况:直播域名通过CNAME域名解析到摩杜云视频直播节点IP地址。
欠费后30天内(直播域名被执行下线起算,30×24小时内):当您收到欠费短信或者邮件时,摩杜云视频直播会立即停止加速服务,直播域名将会被执行下线(OFFLINE)。下线之时起30天内直播域名通过CNAME域名解析到摩杜直播中心源站地址。
欠费超过30天(直播域名被执行下线起算,30×24小时后):停止解析回直播中心源站,直播域名通过CNAME域名解析到无效地址“offline.***.com”,直播域名将无法继续使用。
业务恢复方法:账号结清欠款后,域名会自动恢复加速服务。
问题现象:当您的域名出现掉备案时,系统会以短信或邮件的方式提醒您尽快完成备案。
说明
掉备案是指因为您备案的主体(包括但不限于备案所有人、备案主体联系方式、
备案域名接入商、网站、网站业务)出现变更导致域名备案失效(查询备案状态时显示为未备案)。
加速区域含中国内地和全球加速时,直播域名必须备案。
域名下线执行流程:
正常情况:直播域名通过CNAME域名解析到摩杜云视频直播节点IP地址。
掉备案后30天内(直播域名被执行下线起算,30×24小时内):当您的域名出现掉备案时,摩杜云视频直播会立即停止加速服务,直播域名将会被执行下线(OFFLINE)。下线之时起30天内直播域名通过CNAME域名解析到摩杜直播中心源站地址。
掉备案超过30天(直播域名被执行下线起算,30×24小时后):停止解析回直播中心源站,直播域名通过CNAME域名解析到无效地址“offline.***.com”,直播域名将无法继续访问。
业务恢复方法:如果您的域名已经完成备案,您可以联系摩杜云客服
问题现象:当您需要停止视频直播的加速服务时,您可以手动下线域名(OFFLINE)。
域名下线执行流程:
正常情况:加速域名通过CNAME域名解析到摩杜云视频直播节点IP地址。
主动下线域名:当域名被您主动下线时,摩杜云视频直播会立即停止加速服务,加速域名通过CNAME域名将会解析到无效地址。
业务恢复方法:您可以手动启用处于OFFLINE状态的域名,登录 视频直播控制台 ,在域名管理页面中找到域名并单击启用。
视频直播服务(ApsaraVideo Live)是基于领先的内容接入、 分发网络和大规模分布式实时转码技术打造的音视频直播平台, 提供便捷接入、高清流畅、低延迟、高并发的音视频直播服务。
摩杜云视频直播在服务端主要提供直播流接入、分发、实时流媒体处理服务。
1.主播通过采集设备采集直播内容后,通过推流SDK推送直播流,视频直播服务通过边缘推流的方式将直播流推送至摩杜云直播中心,推送的视频流通过CDN边缘节点进行加速保证上行传输的稳定性。
2.视频流推送至摩杜云直播中心后,可按需对视频流进行转码、时移、录制、截图等处理。
3.处理好的视频流通过CDN内容分发网络,下发至观众的设备中进行播放。移动端的播放设备可以集成摩杜云提供的播放器SDK进行开发。
4.直播视频除了可以进行转码截图等操作外,还可以进行直播转点播的操作,将录制下来的视频转至点播系统中再进行点播播放和短视频云剪辑。方便直播与短视频内容生产和传播的联动。
全渠道、全链路服务支持方案,多年技术能力的沉淀与输出。
服务稳定可靠,技术前瞻,云直播市场份额领导者。
全球战略,助力企业全球化扩展。
护航无忧广电等级直播保障。
实时交互,千万级并发。
低延时直播RTS,引领高并发直播进入毫秒时代。
窄带高清™2.0,50帧极致高清,给客户带来极致视觉盛宴。
全景数据,多维度数据分析。
更多优势,请参见 产品优势。
视频直播除了提供直播流接入、分发的基础服务外,还提供了如下增值服务:
低延时直播RTS
云导播台
直播安全
云端合流
直播转码
直播时移
直播录制
直播截图
视频直播提供直播推流、直播播流、直播安全、直播管理、数据统计、控制台管理、API管理和SDK支持八大类服务。特性详情,请参见 功能特性。
摩杜云视频直播累计服务10000+企业客户,覆盖秀场直播、UGC视频、游戏直播、企业直播、教育直播、商城直播、微商互动、金融直播、体育赛事、活动直播等场景。更多详情,请参见 应用场景。
您可以 视频直播控制台 、API和SDK使用和管理视频直播服务,也可以与您自己的应用和服务集成。
视频直播的付费项包括:流量带宽、直播转码、直播时移、云导播、直播截图、 直播录制、图片审核、语音审核、海外链路加速(原全球加速)和实时日志。 您可以先使用,后付费,所需费用按照不同的计费方式产生。更多详情,请参见 计费概述 和云产品定价页。
摩杜云视频直播是基于摩杜云强大的技术沉淀 开发的音视频直播平台,拥有全链路覆盖、全球部署、安全稳定、超低延时、极致高清等优势。
多渠道、全链路服务支持方案,多年技术能力的沉淀与输出。
提供从推流、视频处理、内容分发到播放的全套解决方案。
提供上下行码率自适应、窄带高清转码™、截图、录制、视频审核、
时移、数据监控、云导播、低延时直播、实时日志、视频流管理等功能和服务。
全球战略,助力企业全球化扩展。
2500+的直播节点覆盖全球主流国家,助您直播业务出海。
直播中心覆盖中国、欧洲、东南亚9个国家和地区,服务全球用户本地及跨国直播。
海外链路加速功能,采用优质网络传输,解决跨境网络传输网络抖动问题。
护航无忧广电等级直播保障。
多种安全机制,保证视频传输安全。
秒级全链路监控,实时获知直播动态。
多源合流方案,保障直播稳定。
实时交互,千万级并发。
超低播放卡顿率,超流畅直播观看体验。
边缘加速,将流数据调度至距离用户最近的最优节点,保证直播的实时交互。
千万级直播并发能力,可动态扩展的直播技术架构,为您的直播业务提供保障。
低延时直播RTS,引领高并发直播进入毫秒时代。
毫秒级超低时延毫,互动更加实时。
依托摩杜云海内外海量节点资源,实现百万级高并发。
经受大规模线上验证,技术成熟稳定。
不改变推流架构仅需播放端上集成新SDK,简单易用。
窄带高清™2.0,50帧极致高清,给客户带来极致视觉盛宴。
从人眼视觉模型出发,在节省码率的同时,也能提供更加清晰的观看体验,同等视频质量下最高节省20%~40%带宽。
根据画面内容进行编码优化,针对画面中不同内容进行不同策略的编码优化,使得整个画面更具层次感。
全景数据,多维度数据分析。
全景信息监控,提供包含带宽流量、访问质量、各功能用量在内的全景监控信息。
多维数据分析,支持分析独立访客、数用户分布、域名排行等数据。
全量日志下载和实时日志订阅功能,全方位感知业务数据、方便数据统计和辅助业务决策。
技术前瞻,视频云的领跑者。
毫秒级的时移回看颗粒度,强校验保障。
导播上云,对传统视频生产工具进行云端再造。
8K直播,分辨率高达7680×4320,画面更加逼真。
专业直播支持SRT协议接入,支持杜比音效。
视频直播提供直播采集等主要功能、 边缘推流和海外链路加速的服务, 其中主要包括直播推流、直播播流、直播安全、 直播管理、数据统计、控制台管理、API管理和SDK支持八大类服务。
服务 | 特性类别 | 特性介绍 |
---|---|---|
直播推流 | 推流协议 | 支持RTMP、RTS(udp)协议推流。 |
直播推流 | 推流方式 | 支持摩杜云iOS、Android、Web等推流SDK及Demo,也支持常见的第三方如OBS、XSplit、FMLE等推流软件 |
直播推流 | 推流设备 | 支持常见的基于RTMP推流协议的第三方编解码器或盒子。 |
直播播流 | 播流协议 | 支持RTMP、FLV、HLS和RTS(udp)四种播流协议。 |
直播播流 | 播流方式 | 支持摩杜云iOS、Android、Web等播流SDK及Demo,也支持常见的第三方如VLC等播流软件。 |
直播播流 | 直播拉流 | 支持flv、rtmp、m3u8、RTS(udp)。 |
直播安全 | URL鉴权 | 支持自定义鉴权key、自定义鉴权失效时间。 |
直播安全 | IP黑名单 | 限制IP访问加速域名。 |
直播安全 | 防盗链 | 能支持黑名单或白名单机制。 |
直播安全 | User-Agent黑白名单 | 支持通过User-Agent黑白名单来限制特定浏览器或终端的访问。 |
直播安全 | 直播流加密 | 支持直播流加密转码和解密播放。 |
直播安全 | 内容审核 | 支持对视频内容进行截帧审核与语音审核。 |
直播管理 | 管理方式 | 支持管理控制台图形化管理、API管理。 |
数据统计 | 流量统计 | 对流量按天为粒度进行统计。 |
数据统计 | 峰值带宽统计 | 对带宽峰值按天为粒度进行统计。 |
数据统计 | 访问概况统计 | 查看UV、访问区域等数据。 |
数据统计 | 功能用量统计 | 转码、截图、录制等用量查询。 |
控制台管理 | 域名管理 | 创建、修改、删除域名,启用、停止直播服务。 |
控制台管理 | 模板管理 | 转码、截图、录制、海外链路加速(原全球加速)等模板的创建、修改、删除。 |
控制台管理 | 直播录制 | 支持FLV、MP4、M3U8格式录制,支持自定义录制时长。 |
控制台管理 | 直播截图 | 支持实时覆盖截图,支持实时截图存储,可自定义截图频率。 |
控制台管理 | 实时转码 | 支持流畅、标清、高清、超清多种码率格式、转码视频宽高比自适应。 |
控制台管理 | 窄带高清™转码 | 支持流畅、标清、高清、超清多种码率格式、转码视频宽高比自适应。 |
控制台管理 | 控制台统计 | 实时下行带宽、下行流量、直播在线观看数、直播请求数(运营商/地域维度)、直播流数量与状态统计查询。 |
控制台管理 | 云导播台 | 支持对传统视频生产工具进行云端再造。 |
控制台管理 | 直播时移 | 支持回看直播内容。 |
API管理 | 域名管理 | 新建、删除、修改、查看域名。 |
API管理 | API流管理 |
创建、修改、删除、启用、停止直播域名。
查询当前并发收看数。 创建、停止录制等。 创建停止截图任务等。 |
API管理 | 直播录制 | 支持通过管理控制台或API接口将直播录制并保存到摩杜云MOS平台。 |
API管理 | 直播截图 | 支持通过API对直播过程截图并存储于摩杜云MOS平台。 |
API管理 | 直播转码 | 支持通过API对直播进行多种规格的转码。 |
API管理 | 云端合流 | 支持通过API创建合流任务,将多路视频源按照指定布局合成一路直播流。 |
SDK支持 | 推流SDK | 根据推流端网络情况实时调整推流参数、自适应码率、帧率、水印、美颜等参数 |
SDK支持 | 播放器SDK | 提供iOS和Android、Web播放器SDK,支持多种播放格式,支持直播秒开和直播时移。 |
SDK支持 | 美颜SDK | 提供视频美颜、特效功能。 |
SDK支持 | 直播一体化Demo | 快速体验直播推流播放的整体流程。 |
本文介绍视频直播服务应用场景。
针对注重师生互动的教育类直播,推荐使用摩杜云RTS超低延时直播,可以让老师及时解答学生的问题, 避免学生提出问题但老师已经进入下一个内容的情况,极大的提升了课堂效率。 同时,配合云端的录制、时移、转码等功能,学生可以随时回看课程,温习知识点,增强学习效果。
摩杜云视频直播为娱乐直播提供便捷接入、高清流畅等云端直播服务。另外,娱乐直播主播门槛相对较低,内容的安全性 (如涉黄、暴恐等)需要严格把关,摩杜云直播审核功能不仅支持视频、 图片内容审核,还支持自动检测音频内容,这里可以借助直播审核功能来降低审核成本。
直播的高互动性、低营销成本、受众特性集中等特点都为商家带来了大量优质流量, 是现在电商领域不可或缺的营销方式。通过摩杜云RTS超低延时直播,让实时流和消息互动更同频, 避免买家和主播IM互动很及时,但由于视频延时过大导致沟通不同步的情况。 提供淘宝直播同款超低延时直播方案,更有效的低延时互动直接促进提升GMV。
摩杜云直播为您提供遍布全球的海量CDN加速节点和强大的云端媒体处理能力,保障了直播的高并发、 低延时和安全稳定。使用摩杜云导播台功能,可以实现多机位画面合流输出,还可添加比分牌等组件,且支持赛事片头、广告插播、赞助商贴片等功能。
摩杜云直播支持广电新媒体常用的SRT推流协议,且支持4K、8K等高清分辨率, 同时配合窄带高清转码功能,在相同码率下实现更高画质。使用导播台功能,还可实现多视频分屏、添加台标、双语字幕和紧急备播等功能。
摩杜云直播提供IP黑白名单等直播内容保护功能, 为企业直播内容保驾护航,防止盗播。同时使用录制功能,可将企业宣讲、企业培训等内容保存,方便回看。
本文介绍视频直播的服务地域,以及该地域支持的功能。
视频直播中心服务已开放地域包括:上海、北京、深圳、青岛、新加坡、德国、日本、印度、印尼。
您可以参考下表,根据您所需要的功能选择直播中心。同时您需要关注您的存储服务的地域,
如果您的存储已经在某个区域,对应的直播中心需要选择在同区域(region)。更多信息,请参见
如何选择直播中心?。
功能 | 上海 | 北京 | 深圳 | 青岛 | 新加坡 | 德国 | 日本 | 印度 | 印尼 |
---|---|---|---|---|---|---|---|---|---|
录制 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
直播转点播 | 支持 | 支持 | 支持 | 暂不支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
转码 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
拉流 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
时移 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 暂不支持 | 支持 | 支持 |
截图 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
海外链路加速(原全球加速) | 支持 | 支持 | 支持 | 支持 | 支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 |
智能审核(鉴黄、暴恐涉政、广告、无意义、logo) | 支持 | 支持 | 支持 | 暂不支持 | 支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 |
云导播 | 支持 | 支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 |
云端合流 | 支持 | 支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 | 暂不支持 |
本章节介绍视频直播使用过程中遇到的常用名词的基本概念和简要描述。
推流是把采集阶段封装好的音视频直播流推送到摩杜云直播服务中心的过程。
拉流是将第三方直播流地址拉取到摩杜直播中心进行加速分发的过程。
播流是将直播服务中心已有直播内容,分发到播放器进行播放过程。
边缘推流是优先将流数据调度至距离用户最近的最优节点,通过摩杜智能调度系统将数据快速传输至直播中心进行内容分发的功能。 利用摩杜云CDN节点丰富、覆盖范围广的优势,保障内容以最优链路传输,保证用户访问的都是最佳的上行网络,减少因上行传输带来的卡顿、拉流缓慢的问题。
全球加速是为用户在视频采集地域与播放源站地域建立优质的网络传输道路的功能。摩杜云优质基础设施为更好的链路质量和可用性提供保障, 实现采集地域与播放地域之间以最短、最优链路传输,帮助企业无需投入任何硬件成本,解决全球用户访问卡顿或延迟过高的问题。
低延时直播RTS(Real-time Streaming),是在摩杜云视频直播的基础上,进行全链路延时监控、CDN传输协议改造成UDP等底层技术优化, 通过集成直播播放端SDK的方式,支持千万级并发场景下的毫秒级延时直播能力,保障低延时、低卡顿、秒开流畅的极致直播观看体验。
直播转码是将视频码流转换成另一个视频码流功能。通过转码,可以改变原始码流的编码格式、分辨率和码率等参数, 从而适应不同终端和网络环境的播放。以适配不同的网络带宽、不同的终端处理能力、不同的延时要求,满足不同的用户需求。
窄带高清™技术,根据画面内容进行编码优化,使用户在同等带宽情况下观看更清晰的视频。 从人眼视觉模型出发,在节省码率的同时,也能提供更加清晰的观看体验,同等视频质量下最高节省20%~40%带宽。
直播时移是支持用户在观看直播时随时回顾过去精彩内容的功能, 支持毫秒级的时移回看颗粒度。强校验保障,避免直播信号源时间戳错误导致的时移回看脏数据,播放不连续问题
推流域名是用于推送直播流的域名,为必选配置,您必须在使用直播服务前完成该域名的注册并备案。 经过解析域名(CNAME解析)、关联推播流域名和配置鉴权(可选)操作后,可以使用控制台的地址生成器生成对应的推流地址。
播流域名是用于拉取直播流的域名,为必选配置,您必须在使用直播服务前完成该域名的注册并备案。 经过解析域名(CNAME解析)、关联推播流域名和配置鉴权(可选)操作后,可以使用控制台的地址生成器生成对应的播放地址。
CNAME域名是在摩杜云控制台添加加速域名后,给您分配的一个域名。该CNAME域名的形式为*.*kunlun*.com。 您需要在您的DNS解析服务商添加一条CNAME记录, 将自己的加速域名指向*.*kunlun*.com的域名。记录生效后,域名解析的工作就正式转向摩杜云直播,该域名所有的请求都将转向摩杜云直播的边缘节点,达到加速效果。
H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG) 联合组成的联合视频组(JVT)提出的,高度压缩数字视频编解码器标准,同时也是MPEG-4第十部分。拥有低码率、图像质量高、容错能力强和网络适应性强等优点。
H.265是ITU-T视频编码专家组(VCEG)继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264, 保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。
直播地址包含推流地址和播放地址,由域名、AppName、StreamName和鉴权串(可选)组成, 每个域名下可以创建多个应用,每个应用下可以创建多个直播流。 控制台提供地址生成器功能,支持快速生成推流地址和播放地址,可用于第三方软件(如OBS)推流。
直播的应用名称,用于区分直播流媒体文件存放路径。
StreamName表示直播流名称,是一路流的标识符,通常与某个域名一起唯一标识一路流。
本文为您介绍视频直播的相关限制及提升限额方式。
限制项 | 说明 | 提升限额方式 |
---|---|---|
直播加速域名 |
如果您的域名,加速区域为全球加速或中国内地,
则域名必须备案。请参见域名备案。 默认每个账号下可创建20个直播加速域名。 |
联系摩杜云客服 |
并发直播流 |
默认每个账号下每个直播加速域名可并发推送20个原始(未转码)直播流。
若启用转码功能,每个加速域名下最多支持10路转码直播流。 默认导播台最多支持10个导播实例。 |
联系摩杜云客服 |
推流 |
视频直播服务不限制推流码率,
支持常见分辨率以及对应码率; 为避免推流卡顿,建议码率不超过4 Mbps。 |
无。 |
瞬时突发带宽的限流规则 |
根据您与摩杜云签订的《视频直播服务条款》,
若您所属的某域名计费模式为流量计费或带宽计费, 且在1分钟内的突增带宽达到50G的,为避免网络攻击对您 的业务造成影响或产生高额费用,摩杜云将对该域名进行限流。 |
如需解除此限制或有误触,
请联系摩杜云客服 |
导播台、转码、时移、
录制、截图、安全审核、直播转点播 |
不是所有直播中心区域都
支持全部功能。更多信息,请参见 服务地域。 |
联系摩杜云客服反馈需求 |
录制 |
如果超高清4K、8K直播,推流码率超过25 Mbps,
单ts切片文件大小超过上限(100 MB),该流直播录制会失败。 |
无。 |
接入摩杜云视频直播进行加速的直播域名,需要根据加速区域决定是否要完成ICP备案。
如果您添加直播域名时,选择的加速区域为全球加速或中国内地,则域名必须备案。推荐您进入摩杜云ICP代备案管理系统。
说明 无论您的源站在哪里,如果您需要使用视频直播产品在中国 内地区域提供的直播流的推流或拉流服务,则源站应用的接入域名需要备案。
所有接入视频直播服务的域名都要经过审核。目前不支持接入的加速域名类型包括但不限于:
无法正常访问或内容不含任何实质信息
游戏私服类
传奇或纸牌类游戏
盗版软件等无版权下载网站
P2P类金融网站
彩票类网站
违规医院和药品类网站
涉黄、涉毒、涉赌等
说明
含有以上违规内容的加速域名,由您自行承担任何可能的风险。摩杜云也将定期复审域名内容,如果发现以上任何违规行为,则系统将会立即下线或封禁域名。情节严重的将封禁整个账号下域名服务,且永不恢复。
如果您在摩杜云视频直播接入了一个泛域名(例如*.example.com)进行加速,该泛域名包含的某个精确域名(例如a.example.com)出现了以上违规内容,摩杜云视频直播将下线该泛域名(*.example.com)。
如果您的域名审核被拒绝,请在视频直播控制台的域名列表查看拒绝原因,请自行整改后重新提交域名审核。
本文介绍视频直播的计费组成、各计费项的计费方式、欠费说明、直播资源包以及计费相关操作。
视频直播提供直播流的推流与播流的基础服务,若不使用增值服务则只会产生直播服务费用。计费组成主如下:
各计费项均支持按量付费,部分支持资源包和包年包月的计费方式。
视频直播的详细价格信息,请参见云产品定价页。
使用视频直播进行推流和播流会产生直播服务费用。如果选择了低延时直播服务,则按照低延时直播的费用进行计费。
计费项 | 计费方式 | 付费方式 | 相关文档 |
---|---|---|---|
直播服务 |
按日峰值带宽
按月95峰值带宽 按流量 |
后付费 | 直播服务费用 |
直播服务 | 直播国内流量包 | 预付费 | 直播资源包 |
低延时直播 |
按日峰值带宽
按月95峰值带宽 按流量 |
后付费 | 低延时直播费用 |
低延时直播 | 低延迟直播流量包 | 预付费 | 直播资源包 |
视频直播提供多项增值功能,不使用不会产生以下费用。
计费项 | 计费方式 | 付费方式 | 相关文档 |
---|---|---|---|
直播转码 | 按量:时长 |
后付费
预付费 |
直播转码费用
直播资源包 |
直播时移 | 按量:写入量 | 后付费 | 直播时移 |
智能审核 | 按量:审核张数 |
后付费
预付费(鉴黄) |
智能审核费用
直播资源包 |
云导播 |
导播流输出:
按量:时长 包年包月 |
导播流输出:
后付费 预付费 |
云导播费用
直播资源包 |
云导播 | 转码输出:按时长 | 转码输出:后付费 |
云导播费用
直播资源包 |
直播截图 | 按量:截图张数 | 后付费 | 直播截图费用 |
直播录制 | 月录制服务费:按并发录制峰值路数 | 后付费 | 直播录制费用 |
直播录制 | 录制转封费:按时长 | 后付费 | 直播录制费用 |
海外链路加速(原全球加速) | 按量:日峰值带宽 | 后付费 | 海外链路加速费用 |
实时日志 | 按量:日志条数 | 后付费 | 实时日志费用 |
产品 | 产生费用的场景 | 参考文档 |
---|---|---|
对象存储MOS | 直播录制至MOS后,会产生存储、观看、下载等费用。 | MOS计费概述 |
视频点播VOD | 直播录制至VOD后,会产生存储、观看、下载、转码、剪辑等费用。 | VOD计费概述 |
说明 视频直播已默认配置好CDN,不会再单独收取CDN服务的费用。
视频直播为后付费服务,出账后自动扣费。当检测到您账户余额不足时,摩杜云会以短信或邮件的方式提醒您尽快充值。详细说明,请参见 欠费说明
视频直播为您提供了直播国内流量包、低延时直播国内流量包、直播转码包、直播鉴黄服务包和云导播时长包。详细说明,请参见 直播资源包。
说明 暂不提供海外的直播流量包。
您可以通过控制台进行如下操作:
开通与购买视频直播
变更计费方式
查询账单明细
查看欠费
查询资源包明细
设置资源包预警
直播服务费用默认按下行播流带宽计费,开通推流并发扩容后,可能产生上行推流费用。本文介绍直播服务的计费规则。
直播服务有三种计费方式:按峰值带宽计费、按95峰值带宽计费和按使用流量计费。直播服务默认按下行播流带宽计费,开通推流并发扩容后,可能产生上行推流费用。
一个实例ID的直播服务,下行播流费用只能选择一种计费方式。
阶梯定价
带宽阶梯(计费单位:元/Mbps/天) | 中国内地-CN | 北美-NA | 欧洲-EU | 亚太1区-AP1 | 亚太2区-AP2 | 亚太3区-AP3 | 中东非洲-MEAA | 南美-SA |
---|---|---|---|---|---|---|---|---|
0~500 Mbps(含) | 0.66 | 1.640 | 1.640 | 2.860 | 3.810 | 3.940 | 5.910 | 5.320 |
500 Mbps~5 Gbps(含) | 0.638 | 1.510 | 1.510 | 2.520 | 3.430 | 3.760 | 5.770 | 5.180 |
5 Gbps~20 Gbps(含) | 0.616 | 1.380 | 1.380 | 2.210 | 3.050 | 3.470 | 5.640 | 5.050 |
大于20Gbps | 0.594 | 1.310 | 1.310 | 1.910 | 2.670 | 3.170 | 5.580 | 4.990 |
海外大区说明:
北美:美国、加拿大。
欧洲:俄罗斯、乌克兰、英国、法国、荷兰、西班牙、意大利、瑞典、德国。
亚太1区:中国香港、日本、中国台湾、中国澳门以及东南亚除越南和印尼之外的国家。
亚太2区:印度、印尼、韩国、越南。
亚太3区:澳大利亚、新西兰。
中东、非洲:南非、阿曼、阿联酋、科威特。
南美:巴西。
计费规则
规则项目 | 规则详情 |
---|---|
计费规则 |
以当日您直播观看区域所在节点,直播加速服务分别产生的带宽最高值(单位Mbps)为结算标准。定价受区域和带宽阶梯影响。
说明 按峰值带宽计费方式的带宽进制为1000,示例:1 Gbps=1000 Mbps。 |
计费周期 | 按日计费。 |
计费方向 |
默认只收取下行播流费用。
开通了推流并发扩容(适用于上行下行比例大于1:50的场景),会产生推流费用。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
计费示例
描述:在中国内地,06月17日的下行播流峰值带宽为10 Gbps,未开通推流并发扩容。
过程:查看阶梯定价表得知,中国内地和5 Gbps~20 Gbps(含)对应的单价为0.616元/Mbps/天。
结果:
06月17日的带宽账单为:10000 Mbps×0.616元/Mbps/天×1天=6160.00元。
账单会在06月18日零点以后生成,具体以系统出账时间为准,账单生成后会自动从您的账户余额中扣除费用以结算账单。
我们为月消费金额大于10万的用户提供了更为灵活的月度95带宽峰值计费方式, 本计费方式仅支持部分用户。如有需求,您可以联系摩杜云客服,联系摩杜云商务洽谈接入。
规则项目 | 规则详情 |
---|---|
计费规则 |
最终费用=计费值费用×有效因子。
计费值费用: 在一个自然月内,取每5分钟有效带宽值进行降序排列,再删去带宽数值最高的5%的点,取剩下的最高带宽作为95带宽峰值的计费值。 示例:以一月30天为例,默认均为有效取值点:每5分钟1个带宽取值点,每小时12个取值点,每月取值点数为12×24×30=8640(个);将所有的点按带宽数值降序排列,去掉前5%的点,8640×5%=432(个),即第433个点为计费点。 有效因子: 以一个自然月的天数为分母,该自然月内用户的有效使用天数为分子,计算得到有效因子的值。 对在计费周期内变配至95计费的用户来说,有效天数为95计费生效那天开始到月末的天数;对在计费周期内一直使用95计费方式的用户来说,有效因子为1。 示例:假设一位用户在2016-04-04将计费类型变更为95带宽计费,则2016-04-05为95计 费生效时间,2016-04期账单的有效使用天数为26天,有效因子为26/30=0.86666667。 说明 按95峰值带宽计费方式的带宽进制为1000,示例:1 Gbps=1000 Mbps。 |
计费周期 | 按自然月计费。 |
计费方向 |
默认只收取下行播流费用。
针对上下行不均衡业务(上下行比例大于1:50) 需要收取上行推流费用,此时上行计费挂牌价与下行单价一致。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然月)结束后,通常在下个自然月01日凌晨出账。 |
结算时间 | 每月01日账单生成后会自动从您的账户余额中扣除费用以结算账单。 |
计费方式切换生效时间说明 |
从“流量”或“带宽”变更成为“95带宽”计费类型,第二日零点生效;
从“95带宽”变更成为“流量”或“带宽”计费类型,下个自然月01日零点生效,月中不允许变更。 |
说明 您可以登录 视频直播控制台 ,数据监控 > 资源监控 > 流量带宽 > 上行或下行流量监控页签查看当前月95带宽峰值,并预估本月95带宽消费金额。
阶梯定价
流量阶梯(计费单位:元/GB) | 中国内地-CN | 北美-NA | 欧洲-EU | 亚太1区-AP1 | 亚太2区-AP2 | 亚太3区-AP3 | 中东非洲-MEAA | 南美-SA |
---|---|---|---|---|---|---|---|---|
0~10 TB(含) | 0.264 | 0.460 | 0.460 | 0.580 | 0.780 | 0.690 | 1.310 | 1.310 |
10 TB~50 TB(含) | 0.253 | 0.460 | 0.460 | 0.580 | 0.780 | 0.690 | 1.310 | 1.310 |
50 TB~100 TB(含) | 0.231 | 0.390 | 0.390 | 0.450 | 0.670 | 0.600 | 1.180 | 1.180 |
100 TB~1 PB(含) | 0.198 | 0.200 | 0.200 | 0.380 | 0.570 | 0.510 | 0.980 | 0.920 |
大于1 PB | 0.165 | 0.160 | 0.160 | 0.350 | 0.520 | 0.460 | 0.920 | 0.850 |
海外大区说明:
北美:美国、加拿大。
欧洲:俄罗斯、乌克兰、英国、法国、荷兰、西班牙、意大利、瑞典、德国。
亚太1区:中国香港、日本、中国台湾、中国澳门以及东南亚除越南和印尼之外的国家。
亚太2区:印度、印尼、韩国、越南。
亚太3区:澳大利亚、新西兰。
中东、非洲:南非、阿曼、阿联酋、科威特。
南美:巴西。
计费规则
规则项目 | 规则详情 |
---|---|
计费规则 |
按您直播观看区域使用的流量阶梯价格计费,当月分别超额累进(以自然月为一个累计周期)。定价受区域和带宽阶梯影响。
说明 按流量计费方式的流量进制为1024,示例:1 GB=1024 MB。 |
计费周期 | 按小时计费,带宽阶梯定价按月累计。 |
计费方向 |
默认只收取下行播流费用。
针对上下行不均衡业务(上下行比例大于1:50) 需要收取上行推流费用,此时上行计费挂牌价与下行单价一致。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(小时)结束后。 |
结算时间 | 出账后自动扣费。 |
您还可以购买视频直播服务提供的国内流量包,详情参见 直播资源包。
计费示例
描述:在中国内地,06月只有16日、17日使用了视频直播推流。06月16日的下行播流流量为5 TB,06月17日的下行播流流量为10
TB,未开通推流并发扩容。
过程:查看阶梯定价表得知,中国内地和0~10 TB(含)对应的定价为0.264元/GB,中国内地和10 TB~50
TB(含)对应的定价为0.253元/GB。
结果:
06月16日账单:5×1024 GB×0.264元/GB=1351.68元。账单将在进行播放的每小时结束后分批产生。
06月17日账单:5×1024 GB×0.264元/GB+5×1024
GB×0.253元/GB=2647.04元。账单将在进行播放的每小时结束后分批产生。
针对上下行直播流不均衡的情况,视频直播提供了推流并发扩容服务。您可以联系摩杜云客服申请开通,会有运营人员或商务人员与您沟通上行计费方式,评估后即可开通。
如果不开通推流并发扩容服务,上下行比例大于1:50时也不产生费用。
上行计费只能选择日峰值带宽或者流量的计费方式,不能使用95峰值带宽或者流量包。
上行计费挂牌价与下行一致。
低延时直播默认按下行播流带宽计费,开通推流并发扩容后,可能产生上行推流费用。本文介绍低延时直播的计费规则。
低延时直播有三种计费方式:按峰值带宽计费、按95峰值带宽计费和按使用流量计费。
一个实例ID的直播服务,下行播流费用只能选择一种计费方式。
低延时直播的计费规则与标准直播相同,计费定价不同。
阶梯定价
带宽阶梯(计费单位:元/Mbps/天) | 中国内地-CN | 北美-NA | 欧洲-EU | 亚太1区-AP1 | 亚太2区-AP2 | 亚太3区-AP3 | 中东非洲-MEAA | 南美-SA |
---|---|---|---|---|---|---|---|---|
0~500 Mbps(含) | 1.320 | 3.280 | 3.280 | 6.560 | 7.880 | 7.880 | 11.820 | 10.640 |
500 Mbps~5 Gbps(含) | 1.276 | 3.020 | 3.020 | 6.300 | 7.620 | 7.620 | 11.540 | 10.360 |
5 Gbps~20 Gbps(含) | 1.232 | 2.760 | 2.760 | 6.040 | 7.340 | 7.340 | 11.280 | 10.100 |
大于20Gbps | 1.188 | 2.620 | 2.620 | 5.900 | 7.220 | 7.220 | 11.160 | 9.980 |
海外大区说明:
北美:美国、加拿大。
欧洲:俄罗斯、乌克兰、英国、法国、荷兰、西班牙、意大利、瑞典、德国。
亚太1区:中国香港、日本、中国台湾、中国澳门以及东南亚除越南和印尼之外的国家。
亚太2区:印度、印尼、韩国、越南。
亚太3区:澳大利亚、新西兰。
中东、非洲:南非、阿曼、阿联酋、科威特。
南美:巴西。
计费规则
规则项目 | 规则详情 |
---|---|
计费规则 |
以当日您直播观看区域所在节点,直播加速服务分别产生的带宽最高值(单位Mbps)为结算标准。定价受区域和带宽阶梯影响。
说明 按峰值带宽计费方式的带宽进制为1000,示例:1 Gbps=1000 Mbps。 |
计费周期 | 按日计费。 |
计费方向 |
默认只收取下行播流费用。
开通了推流并发扩容(适用于上行下行比例大于1:50的场景),会产生推流费用。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内 |
结算时间 | 出账后自动扣费。 |
我们为月消费金额大于10万的用户提供了更为灵活的月度95带宽峰值计费方式, 本计费方式仅支持部分用户。如有需求,您可以联系摩杜云客服,联系摩杜云商务洽谈接入。
规则项目 | 规则详情 |
---|---|
计费规则 |
最终费用=计费值费用×有效因子。
计费值费用: 在一个自然月内,取每5分钟有效带宽值进行降序排列,再删去带宽数值最高的5%的点,取剩下的最高带宽作为95带宽峰值的计费值。 示例:以一月30天为例,默认均为有效取值点:每5分钟1个带宽取值点,每小时12个取值点,每月取值点数为12×24×30=8640(个);将所有的点按带宽数值降序排列,去掉前5%的点,8640×5%=432(个),即第433个点为计费点。 有效因子: 以一个自然月的天数为分母,该自然月内用户的有效使用天数为分子,计算得到有效因子的值。 对在计费周期内变配至95计费的用户来说,有效天数为95计费生效那天开始到月末的天数;对在计费周期内一直使用95计费方式的用户来说,有效因子为1。 示例:假设一位用户在2016-04-04将计费类型变更为95带宽计费,则2016-04-05为95计费生效时间, 2016-04期账单的有效使用天数为26天,有效因子为26/30=0.86666667。 说明 按95峰值带宽计费方式的带宽进制为1000,示例:1 Gbps=1000 Mbps。 |
计费周期 | 按自然月计费。 |
计费方向 |
默认只收取下行播流费用。
针对上下行不均衡业务(上下行比例大于1:50) 需要收取上行推流费用,此时上行计费挂牌价与下行单价一致。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然月)结束后,通常在下个自然月01日凌晨出账。 |
结算时间 | 每月01日账单生成后会自动从您的账户余额中扣除费用以结算账单。 |
计费方式切换生效时间说明 |
从“流量”或“带宽”变更成为“95带宽”计费类型,第二日零点生效;
从“95带宽”变更成为“流量”或“带宽”计费类型,下个自然月01日零点生效,月中不允许变更。 |
说明 您可以登录 视频直播控制台 ,数据监控 > 资源监控 > 流量带宽 > 上行或下行流量监控页签查看当前月95带宽峰值,并预估本月95带宽消费金额。
阶梯定价
流量阶梯(计费单位:元/GB) | 中国内地-CN | 北美-NA | 欧洲-EU | 亚太1区-AP1 | 亚太2区-AP2 | 亚太3区-AP3 | 中东非洲-MEAA | 南美-SA |
---|---|---|---|---|---|---|---|---|
0~10 TB(含) | 0.528 | 0.920 | 0.920 | 1.580 | 1.700 | 1.700 | 2.620 | 2.620 |
10 TB~50 TB(含) | 0.506 | 0.920 | 0.920 | 1.580 | 1.700 | 1.700 | 2.620 | 2.620 |
50 TB~100 TB(含) | 0.462 | 0.780 | 0.780 | 1.320 | 1.440 | 1.440 | 2.360 | 2.360 |
100 TB~1 PB(含) | 0.396 | 0.400 | 0.400 | 1.040 | 1.320 | 1.240 1 | .960 | 1.840 |
大于1 PB | 0.330 | 0.320 | 0.320 | 0.920 | 1.180 | 1.180 | 1.840 | 1.700 |
海外大区说明:
北美:美国、加拿大。
欧洲:俄罗斯、乌克兰、英国、法国、荷兰、西班牙、意大利、瑞典、德国。
亚太1区:中国香港、日本、中国台湾、中国澳门以及东南亚除越南和印尼之外的国家。
亚太2区:印度、印尼、韩国、越南。
亚太3区:澳大利亚、新西兰。
中东、非洲:南非、阿曼、阿联酋、科威特。
南美:巴西。
计费规则
规则项目 | 规则详情 |
---|---|
计费规则 |
按您直播观看区域使用的流量阶梯价格计费,当月分别超额累进(以自然月为一个累计周期)。定价受区域和带宽阶梯影响。
说明 按流量计费方式的流量进制为1024,示例:1 GB=1024 MB。 |
计费周期 | 按小时计费,带宽阶梯定价按月累计。 |
计费方向 |
默认只收取下行播流费用。
针对上下行不均衡业务(上下行比例大于1:50)需要收取上行推流费用,此时上行计费挂牌价与下行单价一致。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(小时)结束后。 |
结算时间 | 出账后自动扣费。 |
您还可以购买视频直播服务提供的国内流量包,详情参见
直播国内流量包。
计费示例
描述:在中国内地,06月只有16日、17日使用了低延时直播推流。06月16日的下行播流流量为5 TB,06月17日的下行播流流量为10
TB,未开通推流并发扩容。
过程:查看阶梯定价表得知,中国内地和0~10 TB(含)对应的定价为0.528元/GB,中国内地和10 TB~50
TB(含)对应的定价为0.506元/GB。
结果:
06月16日账单:5×1024 GB×0.528元/GB=2703.36元。账单将在进行播放的每小时结束后分批产生。
06月17日账单:10×1024 GB×0.528元/GB=5406.72元。账单将在进行播放的每小时结束后分批产生。
针对上下行直播流不均衡的情况,视频直播提供了推流并发扩容服务。
您可以联系摩杜云客服申请开通,会有运营人员或商务人员与您沟通上行计费方式,评估后即可开通。
如果不开通推流并发扩容服务,上下行比例大于1:50时也不产生费用。
上行计费只能选择日峰值带宽或者流量的计费方式,不能使用95峰值带宽或者流量包。
上行计费挂牌价与下行一致。
直播转码以当日使用的不同转码标准、不同分辨率规格及对应总转码时长为结算标准。本文介绍直播转码的计费规则。
直播转码提供标准转码、窄带高清™转码与纯音频转码服务。
标准转码定价
标准转码规格(计费单位:元/分钟) | H.264 | H.265 |
---|---|---|
480P(含)及以下 | 0.017 | 0.085 |
480P~720P(含) | 0.033 | 0.17 |
720P~1080P(含) | 0.065 | 0.34 |
1080P~2K(含) | 0.136 | 0.68 |
2K~4K(含) | 0.272 | 1.36 |
转码规格定义:
480P:640×480
720P:1280×720
1080P:1920×1080
2K:2560×1440
4K:3840×2160
说明 输出规格,按输出视频分辨率的长边和短边属于的输出规格划定范围进行判定。 以输出720P (1280×720) 规格为例,输出视频的分辨率长边不大于1280且短边不大于720,则属于该输出规格。 如输出视频的长边大于1280或输出视频的短边大于720,该输出视频属于更高输出规格。
窄带高清™转码定价
窄带高清™是摩杜云独有的特性,窄带高清™转码使用高配转码集群,高复杂度编码算法,能在同等质量下提供更好的压缩效率,相比于普通模版可平均节省20%~30%流量。
窄带高清™转码仅支持H.264。
窄带高清™ 转码规格(计费单位:元/分钟) | 国内 | 新加坡 | 日本 | 德国 | 印度 | 印尼 |
---|---|---|---|---|---|---|
480P(含)及以下 | 0.0675 | 0.068 | 0.068 | 0.038 | 0.068 | 0.068 |
480P~720P(含) | 0.133 | 0.136 | 0.136 | 0.077 | 0.136 | 0.136 |
720P~1080P(含) | 0.266 | 0.272 | 0.272 | 0.154 | 0.272 | 0.272 |
1080P~2K(含) | 0.540 | 0.544 | 0.544 | 0.308 | 0.544 | 0.544 |
2K~4K(含) | 1.080 | 1.087 | 1.087 | 0.615 | 1.087 | 1.087 |
纯音频转码定价
项目(计费单位:元/分钟) | 国内 | 新加坡 | 日本 | 德国 | 印度 | 印尼 |
---|---|---|---|---|---|---|
纯音频转码 | 0.010 | 0.032 | 0.032 | 0.021 | 0.032 | 0.032 |
规则项目 | 规则详情 |
---|---|
计费规则 |
按当日使用的不同转码标准、不同分辨率规格所对应输出转码流总时长叠加计费(1路直播流1个转码规格输出按1路转码输出时长计费,与多少人并发播放转码流无关)。
标准转码: 按转码流总时长叠加计费,转码标准和分辨率规格共同影响定价。RTS转码的原画模板,按照标准转码规格计算。 窄带高清™ 转码: 按转码流总时长叠加计费,仅支持H.264转码标准,地区和分辨率规格共同影响定价。 纯音频转码: 按转码流总时长叠加计费,地区影响定价。 说明 时长以分钟为单位,分钟数采用“进一法”计数,不足1分钟时向上取整。 |
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
直播控制台使用的转码模板与规格对应如下:
直播转码规格(H.264) | 标准转码模板类型 | 窄带高清™转码模板类型 |
---|---|---|
480P(含)及以下 | 流畅 | 流畅 |
480P-720P(含) | 标清、高清 | 标清、高清 |
720P-1080P(含) | 超清 | 超清 |
描述:6月17日,在上海的直播中心,进行了2路720P的标准转码,时长分别为60分钟和40分钟;3路2K的窄带高清™转码,时长均为30分钟。
过程:上海直播中心属于国内的直播中心。查看标准转码定价表和窄带高清™转码定价表得知,国内480P~720P(含)的标准转码定价为0.033元/分钟,国内1080P~2K(含)的窄带高清™转码定价为0.540元/分钟。
结果:
标准转码费用:0.033元/分钟×(60分钟+40分钟)=3.300元
窄带高清™转码费用:0.540元/分钟×30分钟×3路=48.600元
转码合计:3.300元+48.600元=51.900元
6月17日的转码账单为51.90元,账单会在6月18日零点以后生成,具体以系统出账时间为准,账单生成后会自动从您的账户余额中扣除费用以结算账单。
说明 转码根据观看的直播流收取费用,每一路流执行一次转码。
直播时移按照直播时移写入量计费,时移回看规格影响定价。本文介绍直播时移的计费规则。
时移回看规格(计费单位:元/GB) | 时移写入量定价 |
---|---|
1天 | 0.27 |
3天 | 0.33 |
7天 | 0.44 |
15天 | 0.66 |
30天 | 1.08 |
说明 2019年6月12日,直播时移正式收费使用。
规则项目 | 规则详情 |
---|---|
计费规则 |
按每日时移回看写入的直播内容大小(单位GB)计费,可时移天数不同档位(支持时移1天、3天、7天、15天和30天)对应不同单价。
说明
|
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
描述:假设对某个域名下1路流,设置3天时移回看,在6月17日晚20:00点进行直播,视频码率1 Mbps,直播时长为1小时。
过程:查看定价得知,3天时移回看的单价为0.33元/GB。计算流量:流量=1 Mbps×3600s÷8=450 MB=0.45 GB。
结果:6月17日产生的时移账单为:0.45
GB×0.33元/GB=0.145元。账单将会在6月18日凌晨产生,并自动扣费。在6月17日晚20:00开始到6月20日晚21:00期间都可以播放时移回看直播内容。
直播截图以每日视频直播截图数量为结算标准,不同直播中心的定价不同。本文介绍直播截图的计费规则。
项目(计费单位:元/千张) | 国内 | 新加坡 | 日本 | 德国 | 印度 | 印尼 |
---|---|---|---|---|---|---|
视频截图 | 0.10 | 0.16 | 0.16 | 0.12 | 0.16 | 0.16 |
规则项目 | 规则详情 |
---|---|
计费规则 | 按照视频直播服务截图数量计费。 |
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
描述:在国内,6月17日当天截图15000张。
过程:查看定价得知,国内截图单价为0.1元/千张。
结果:6月17日产生的截图账单为15000÷1000×0.1=1.5元。账单将会在6月18日凌晨产生,并自动扣费。
视频直播流录制费用,分为月录制服务费和录制转封装费两部分,分别根据每月并发录制峰值路数和录制转封装时长计费。本文介绍直播录制的计费规则。
说明 目前直播录制只对部分用户场景收费,后面将逐步面向所有用户场景收费,具体全面收费上线时间将邮件、短信、站内信提前通知。
月录制服务费:30元/路/月
录制转封装费:
项目(计费单位:元/分钟) | 国内 | 新加坡 | 日本 | 德国 | 印度 | 印尼 |
---|---|---|---|---|---|---|
录制转封装 | 0.007 | 0.017 | 0.014 | 0.0126 | 0.014 | 0.014 |
视频直播流录制费用,分为月录制服务费和录制转封装费两部分。
月录制服务费
规则项目 | 规则详情 |
---|---|
计费规则 |
按照每月并发录制峰值路数计费。统计每日录制并发路数并取当月峰值计费,国内和海外统一价格。
说明
|
计费周期 | 按月计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然月)结束后,通常在每月第一日零点后出前一月账单。 |
结算时间 | 出账后自动扣费。 |
录制转封装费
规则项目 | 规则详情 |
---|---|
计费规则 |
直播流录制成MP4、FLV格式时收取录制转封装费用,按录制文件的分钟数计费。1路流同时转成MP4和FLV格式录制时,
月路数峰值按1路计算,转峰值费用按MP4和FLV文件时长加和计费。录制转封装费单价受直播中心区域影响。
说明 普通录制文件格式为TS切片不收取转封装费用。 |
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
描述:在国内,6月有两天使用了录制服务。6月9日当天将1路直播流录制成MP4格式,直播时长为300分钟;6月13日当天将1路直播流同时录制成MP4和FLV格式,直播时长为600分钟。
过程:查看定价得知,月录制服务费价格为30元/路/月,国内录制转封装费用为0.007元/分钟。
结果:
6月9日产生的录制转封装费账单为300×0.007=2.1元。账单将会在6月10日凌晨产生,并自动扣费。
6月13日产生的录制转封装费账单为(600+600)×0.007=8.4元。账单将会在6月14日凌晨产生,并自动扣费。
6月产生的月录制服务费账单为1×30=30元。账单将会在7月1日凌晨产生,并自动扣费。
智能审核包括直播图片审核和直播语音审核, 图片审核以您使用审核服务的图片扫描张数为结算标准, 语音审核以您使用语音审核服务的总时长为结算标准。本文介绍智能审核的计费规则。
直播图片审核
扫描量(张/日,不包括每日免费的3,000张,计费单位:元/千张) | 鉴黄/涉政暴恐/无意义识别算法确定部分 | 鉴黄/涉政暴恐/无意义识别待用户确认部分 | 广告识别算法确定部分 | 广告识别算法待用户确认部分 |
---|---|---|---|---|
>0 | 1.80 | 0.45 | 3.25 | 0.81 |
>5,000 | 1.62 | 0.41 | 2.93 | 0.73 |
>50,000 | 1.53 | 0.38 | 2.77 | 0.69 |
>130,000 | 1.44 | 0.36 | 2.60 | 0.65 |
>260,000 | 1.35 | 0.34 | 2.45 | 0.61 |
>850,000 | 1.26 | 0.32 | 2.28 | 0.57 |
语音审核:0.07元/分钟。
规则项目 | 规则详情 |
---|---|
计费规则 |
直播图片审核
根据您使用直播图片审核服务图片扫描识别的张数计费。影响图片扫描识别费用的因素如下: 每名用户拥有每日3,000张免费图片扫描额度,不区分算法结果是否确定; 每日超出3,000张的部分,按照当日扫描量计费,每日扫描量越大,定价越低; 算法确定部分和待用户确认部分按照不同的定价计费; 鉴黄、涉政暴恐、无意义识别的和广告识别按照不同的定价计费。 直播语音审核 根据您使用语音审核服务的总时长为结算标准。 |
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
描述:在国内,6月17日当天有66000张图片进行了智能审核。其中前3000张为免费部分;计费部分鉴黄算法确定30000张,待确认1500张;广告识别算法确定31000张,待用户确认500张。
过程:查看定价得知:
鉴黄算法确定部分:大于5000张小于50000张定价为1.62元/千张;
鉴黄算法待用户确认部分:大于0张小于5000张定价为0.45元/千张;
广告识别算法确定部分:大于5000张小于50000张定价为2.93元/千张;
广告识别算法待用户确认部分:大于0张小于5000张定价为0.81元/千张;
结果:6月17日产生的智能审核账单为1.62元/千张×30千张+0.45元/千张×1.5千张+2.93元/千张×31千张+0.81元/千张×0.5千张=140.51元。账单将会在6月18日凌晨产生,并自动扣费。
导播服务计费项包括导播流输出费和转码输出费(可选), 导播流输出费提供按使用时长计费、包月两种计费方式,转码输出按时长计费。本文介绍云导播的计费规则。
导播流输出费
后付费方式定价
导播输出规格(H.264,计费单位:元/分钟) | 模板名称 | 通用型(国内) | 播单型(国内) |
---|---|---|---|
480P(含)及以下 | 流畅 | 0.167 | 0.133 |
480P~720P(含) | 标清、高清 | 0.333 | 0.200 |
720P~1080P(含) | 超清 | 0.667 | 0.333 |
预付费(包月)方式定价
导播输出规格(H.264,计费单位:元/月) | 通用型(国内) | 播单型(国内) |
---|---|---|
480P及以下 | 2900 | 1500 |
720P及以下 | 3600 | 2000 |
1080P及以下 | 4500 | 3500 |
转码输出费
转码输出规格(H.264,计费单位:元/分钟) | 模板名称 | 播单型(国内) |
---|---|---|
480P(含)及以下 | 流畅 | 0.017 |
480P~720P(含) | 标清、高清 | 0.033 |
720P~1080P(含) | 超清 | 0.065 |
导播流输出费
后付费
规则项目 | 规则详情 |
---|---|
计费规则 | 以当日您的导播服务中,导播流输出的时长为结算标准,三种导播输出规格和两种导播输出类型影响单价。 |
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
预付费(包月)
导播服务的预付费(包月)实例在有效期限内不限制使用时长,且可以重复购买。
预付费(包月)只包含导播时长部分,不包含导播标准转码。预付费客户如果同时配置了导播标准转码,则将按照实际转码时长另行计费(后付费)。
不同的预付费(包月)导播实例有效期不可累加,有效期仅和单个实例有关。
预付费(包月)导播实例的退订与续费。
导播服务预付费实例购买后,在有效期内需要退订,请您提交工单申请。
目前导播服务的实例在控制台暂时没有开放手动续费入口,有效期满之后,请您重新购买。
如果您选择自动续费,则可以在订单页购买时直接勾选自动续费即可。
转码输出费
规则项目 | 规则详情 |
---|---|
计费规则 | 以当日您的导播服务中,转码输出的时长为结算标准,三种导播输出规格影响单价。 |
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
说明 更多转码规格请单独咨询运营人员或商务人员。
描述:在国内,在未购买包月的情况下,当前创建一个通用型的导播实例,且导播输出规格为“720P(高清)”,同时选择一路“480P(流畅)”直播转码输出。6月17日当天使用该实例进行导播作业100分钟。
过程:查看定价得知,480P~720P(含)规格的导播流输出单价为0.333元/分钟,480P(含)及以下规格的转码输出单价为0.017元/分钟。
结果:6月17日产生的云导播账单为0.333元/分钟×100分钟+0.017元/分钟×100分钟=35元。账单将会在6月18日凌晨产生,并自动扣费。
根据目标用户所在地域与加速源站建立的海外链路加速的日最高带宽峰值计费,不同地域单价不同。本文介绍海外链路加速的计费规则。
项目(计费单位:元/Mbps/日) | 亚太地区 | 欧洲 | 北美 |
---|---|---|---|
直播海外链路加速 | 36 | 40 | 52 |
区域 | 包含的国家和地区 |
---|---|
亚太地区 | 新加坡、中国香港、印尼 |
欧洲 | 德国 |
北美 | 美东、美西 |
目前费用中心中,不同的服务区域对应不同的区域编号,如下表所示。
服务区域 | 编号 |
---|---|
中国香港-上海、深圳、北京、青岛 | 2 |
新加坡-上海、深圳、北京、青岛 | 3 |
北美-上海、深圳、北京、青岛 | 4 |
德国-上海、深圳、北京、青岛 | 5 |
印尼-上海、深圳、北京、青岛 | 6 |
上海、深圳、北京、青岛-新加坡 | 103 |
规则项目 | 规则详情 |
---|---|
计费规则 |
根据目标用户所在地域与加速源站建立高速连接所使用的日最高带宽峰值计费,有亚太地区、欧洲和北美三挡价格。
说明 按峰值带宽计费方式的带宽进制为1000,示例:1Gbps=1000Mbps。 |
计费周期 | 按日计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(自然日)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
说明 开通多区域后,由于网络波动,某个区域的主播/观众也有可能调度到其他区域。 比如,开通所有区域的加速通道后,美国的主播有可能被调度到新加坡,因此两条线路都会产生费用。
描述:6月17日,主播在德国区域,两路流推至中国内地进行加速,每一路流1Mbps,当日海外链路加速带宽峰值2Mbps。
过程:查看服务区域表,得知德国属于欧洲区域,查看定价得知,欧洲区域单价为40元/Mbps/日。
结果:6月17日产生的海外链路加速账单为40元/Mbps/日×2Mbps×1天=80元。账单将会在6月18日凌晨产生,并自动扣费。
如果您开启了实时日志推送增值服务,将会产生额外的增值服务费用,服务费用按照实时日志条数收取。本文介绍实时日志的计费规则。
实时日志:按条数计费,0.01元/万条。
规则项目 | 规则详情 |
---|---|
计费规则 | 服务费用按照实时日志条数收取。 |
计费周期 | 按小时计费。 |
付费方式 | 后付费。 |
出账时间 | 当前计费周期(小时)结束后,通常在当前计费周期结束后一小时内。 |
结算时间 | 出账后自动扣费。 |
视频直播提供流量资源包、转码资源包、云导播资源包、鉴黄审核资源包等丰富的资源包。本文介绍资源包的定价、使用说明和退款规则。
直播资源包支持叠加购买,但不支持升级和续费。购买的资源包在有效期内,优先抵扣资源包用量, 多个资源包按有效期先结束的优先扣减,当所有资源包扣减完毕后, 自动转为按量计费的方式扣减。低延迟直播流量包、直播转码包价格标准参考独立计费项说明文档。
定价
流量包规格 | 国内价格(元) |
---|---|
500 GB | 135 |
1 TB | 270 |
5 TB 1 | 300 |
10 TB | 2550 |
50 TB | 10400 |
200 TB | 37000 |
1 PB | 178000 |
使用说明
直播流量包仅支持按日流量付费的计费模式。
所有规格的流量包购买时长,即有效期,均有1个月和1年两种选择。每个规格的流量包的有效期独立计算,多个规格流量包有效期不会叠加。
流量按照1024进制从Byte换算到Gbps。
此资源包无法抵扣低延迟直播RTS流量,只适用于标准直播中的直播协议RTMP、FLV、HLS。
此资源包仅抵扣中国内地区域直播下行播放CDN加速的流量用量(不抵扣上行推流流量),不抵扣中国内地之外区域直播播放CDN加速用量。
定价
流量包规格 | 国内价格(元) |
---|---|
1 TB | 405.5 |
5 TB | 2027.5 |
10 TB | 3834.3 |
50 TB | 17267.7 |
使用说明
直播流量包仅支持按日流量付费的计费模式。
所有规格的流量包购买时长,即有效期,均为1年。每个规格的流量包的有效期独立计算,多个规格流量包有效期不会叠加。
流量按照1024进制从Byte换算到Gbps。
此资源包无法抵扣标准直播流量,只适用于低延迟直播RTS。
定价
窄带高清™转码包
表 1. 转码包对应各规格转码最多可用时长表
转码包价格(元) | 流畅(小时) | 标清/高清(小时) | 超清(小时) | 2K(小时) | 4K(小时) |
---|---|---|---|---|---|
75 | 50 | 25 | 12 | 6 | 3 |
150 | 100 | 50 | 25 | 12 | 6 |
990 | 1000 | 500 | 250 | 120 | 60 |
7,500 | 10000 | 5000 | 2500 | 1200 | 600 |
55000 | 100000 | 50000 | 25000 | 12000 | 6000 |
标准转码包
表 2. 转码包对应各规格转码最多可用时长表
转码包价格(元) | H.264流畅(小时) | H.264标清/高清(小时) | H.264超清(小时) | H.264 2K(分钟) | H.264 4K(分钟) | H.265流畅(小时) | H.265标清/高清(小时) | H.265超清(小时) | H.265 2K(分钟) | H.265 4K(分钟) | 音频转码(小时) |
---|---|---|---|---|---|---|---|---|---|---|---|
5 | 5 | 2.5 | 1.25 | 37.5 | 18.75 | 1 | 0.5 | 0.25 | 7.5 | 3.75 | 8.5 |
54 | 100 | 50 | 25 | 750 | 375 | 20 | 10 | 5 | 150 | 75 | 170 |
495 | 1000 | 500 | 250 | 7500 | 3750 | 200 | 100 | 50 | 1500 | 750 | 1700 |
4,000 | 10000 | 5000 | 2500 | 75000 | 37500 | 2000 | 1000 | 500 | 15000 | 7500 | 17000 |
20,000 | 50000 | 25000 | 12500 | 75000 | 187500 | 10000 | 5000 | 2500 | 75000 | 375 | 85000 |
30,000 | 100000 | 50000 | 25000 | 750000 | 375000 | 20000 | 10000 | 5000 | 150000 | 75000 | 170000 |
说明
转码包按分钟抵扣使用时长。
可在多种模式中任意切换,最终费用按每种模式的使用时长累加扣除。
使用说明
转码包分为标准转码与窄带高清™转码包,两个转码包分别对应标准转码与窄带高清™ 转码使用时长,不可通用。
窄带高清™转码资源包可抵扣H.264转码的480P、720P、1080P、2K、4K档位转码。
标准转码资源包可抵扣H.264转码的480P、720P、1080P、2K、4K档位转码,H.265转码的LD,SD,HD,2K,4K档位转码,以及纯音频转码。
转码包仅支持国内直播中心(上海,北京,青岛,深圳)的转码用量抵扣。
所有规格的流量包购买时长,即有效期,均提供1个月和1年可选。每个规格的流量包的有效期独立计算,多个规格流量包有效期不会叠加。
定价
鉴黄包价格(元) | 资源包规格 |
---|---|
153 | 100000张 |
使用说明
视频直播鉴黄服务后付费时,优先使用资源包进行抵扣。
本资源包的有效期为1年。
定价
云导播资源包价格(元) | 资源包类型 |
---|---|
66.8 | 360P |
66.6 | 720P |
66.7 | 1080P |
使用说明
按量计费模式时优先抵用资源包中用量。
本资源包仅支持通用型导播类型。
本资源包的有效期为1年。
资源包7日内未使用可申请退款,其他情况不支持退款。退款需人工处理,请您联系摩杜云客服咨询。
资源包使用后,或资源包到期后,剩余资源不支持退订和退款。
本文为您介绍欠费后提示您欠费的方式,以及欠费后可能产生的情况。
直播为后付费服务,账单在次日零时后执行扣费并出账单,当检测到您账户余额不足时,摩杜云会以短信或邮件的方式提醒您尽快充值。
欠费后如果在延停权益额度内,您的服务将不会受到停服影响。
说明 摩杜云提供延停权益,即当按量付费的资源发生欠费后,提供一定额度或时长继续使用云服务的权益。延停期间正常计费。 延停的权益额度不是欠费总额的上限。您延停的额度或时长根据您在摩杜云的历史消费等因素,每个月自动计算并更新。更多信息,请参见延期免停权益。
欠费后如果超出了延停权益额度,摩杜云会暂停您的直播服务使用,您需补缴所有欠费账单后方可继续使用。
说明 由于其他产品的欠费超过延停权益额度,也会引起直播服务的停服
若您使用直播录制、截图功能并将视频存于MOS中:欠费后超出了延停权益额度,
MOS服务将自动停止,但为您保留15天的数据;超过15天存储空间将被收回。详细信息,请参见
MOS欠费后的服务状态。
当存在欠费账单时,无法购买资源包。
若您使用导播台时长包,欠费后即刻停服并于24小时后释放,摩杜云会以短信或邮件的方式提醒您尽快充值。
说明 欠费后运行中的导播台不会自动断流,为避免产生额外费用,请您务必尽快进入控制台,停止非必要直播。
您可以根据不同的用量选择不同的计费方式,可以让您节省大量的成本。本文为您介绍如何计算用量以及选择计费方式。
小A是一名杭州的创业者,带领团队研发了一款直播社交应用。目前每日线上有主播100人,每个主播每日在同时开始直播1个小时,每个主播平均在线观看人数在1000人左右。
小A选择了流量计费方式。
每个直播流均开启了直播时移功能,设置时移天数为1天。
因为主播直播的方式不一致,有的在手机上,有的在PC上,但是观看都是在手机应用上,为了保证视频质量的统一,需要对每一路视频进行标准转码。转码规格为H.264,1080P。
为保证直播的内容安全,对每个直播流均开启了智能审核的涉黄审核和涉政暴恐审核,视频审核截图频率为5秒。截图存储至MOS,保存2天后删除。
方便用户进行回看,还开启了直播录制功能,录制并封装成MP4和FLV两种文件,录制至MOS。
从案例中了解到小A会使用直播服务的功能有:直播流量、直播时移、直播转码、智能审核、直播录制、直播存储。
计费项目 | 涉及数据 | 数量 | 用量计算 |
---|---|---|---|
直播流量 | 并发推流个数 (个) | 100 |
1000人同时在线并同时观看视频1小时,流量为:
1000(人)×0.5(视频码率,Mbps)×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=219.7 GB 100个主播每天产生下行流量为: 100×219.7 GB÷1024=21.46 TB |
直播流量 | 单个直播并发观看人数(个) | 1000 |
1000人同时在线并同时观看视频1小时,流量为:
1000(人)×0.5(视频码率,Mbps)×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=219.7 GB 100个主播每天产生下行流量为: 100×219.7 GB÷1024=21.46 TB |
直播流量 | 每个直播时长(小时) | 1 |
1000人同时在线并同时观看视频1小时,流量为:
1000(人)×0.5(视频码率,Mbps)×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=219.7 GB 100个主播每天产生下行流量为: 100×219.7 GB÷1024=21.46 TB |
直播流量 | 转码后的视频码率 (Mbps) | 0.5 |
1000人同时在线并同时观看视频1小时,流量为:
1000(人)×0.5(视频码率,Mbps)×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=219.7 GB 100个主播每天产生下行流量为: 100×219.7 GB÷1024=21.46 TB |
直播流量 | 转码前的视频码率(Mbps) | 1 |
1000人同时在线并同时观看视频1小时,流量为:
1000(人)×0.5(视频码率,Mbps)×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=219.7 GB 100个主播每天产生下行流量为: 100×219.7 GB÷1024=21.46 TB |
直播时移 | 每个直播时长(小时) | 1 |
每天产生的时移写入量为:
100(直播流数量)×0.5(视频码率,Mbps) ×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=21.97 GB |
直播时移 | 并发推流个数 (个) | 100 |
每天产生的时移写入量为:
100(直播流数量)×0.5(视频码率,Mbps) ×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=21.97 GB |
直播时移 | 转码后的视频码率 (Mbps) | 0.5 |
每天产生的时移写入量为:
100(直播流数量)×0.5(视频码率,Mbps) ×3600(观看时间,秒)÷1024÷8(将Mbps换算为GB)=21.97 GB |
直播转码 | 转码直播流数(个) | 100 |
每天产生的转码时长为:
100(转码流数量)×60(分钟)=6000分钟 |
直播转码 | 每个直播时长(小时) | 1 |
每天产生的转码时长为:
100(转码流数量)×60(分钟)=6000分钟 |
直播截图 | 审核直播流数(个) | 100 |
每天产生的截图图片数为:
100(直播流数量)×3600 (直播时长,秒)÷5=72000张 |
直播截图 | 每个直播时长(小时) | 1 |
每天产生的截图图片数为:
100(直播流数量)×3600 (直播时长,秒)÷5=72000张 |
直播截图 | 审核截图频率(秒) | 5 |
每天产生的截图图片数为:
100(直播流数量)×3600 (直播时长,秒)÷5=72000张 |
智能审核 | 审核截图数(张) | 72000 |
每天产生的鉴黄和涉政暴恐审核图片数为:
72000(张)×2(项)=144000张 |
智能审核 | 审核项目(项) | 2 |
每天产生的鉴黄和涉政暴恐审核图片数为:
72000(张)×2(项)=144000张 |
直播录制 | 并发录制路数(个) | 100 |
每月并发录制峰值路数为:100路。
每天录制时长为(小A选择封装成MP4和FLV2种格式): 100(直播流数量)×60(直播时长,分钟)×2(种格式)=12000分钟 |
直播录制 | 每个直播时长(小时) | 1 |
每月并发录制峰值路数为:100路。
每天录制时长为(小A选择封装成MP4和FLV2种格式): 100(直播流数量)×60(直播时长,分钟)×2(种格式)=12000分钟 |
存储 | 视频存储 | 43.9 GB/天 |
43.9 GB/天
说明 直播录制下来的视频是推流的原始视频,不是转码后的视频。 |
存储 | 截图存储 | 假设72000每张0.5MB | 35.16 GB/天 |
说明 以下单价来自2021年1月1日摩杜云官网发布的直播服务的详细价格信息。单价的变动请以云产品定价页的数据为准。
计费项目 | 计费项 | 用量 | 日费用(以月初第1天为例) |
---|---|---|---|
直播流量 | 下行流量 | 21.46 TB/天 |
流量计费为流量阶梯价格计费,
当月分别超额累进(以自然月为一个累计周期)。 计费规则请参见 按使用流量计费。 10 TB×0.264元/GB+11.46 TB×0.253元/GB=5672.3元 |
直播时移 | 时移写入量 | 21.97 GB/天 |
按照时移规格及直播时移写入量计费,
计费规则请参见 直播时移费用。 21.97 GB×0.27元/GB=5.93元 |
直播转码 | 转码时长 | 6000分钟/天 |
按照不同转码标准、不同分辨率规格及
对应总转码时长计费,计费规则请参见 直播转码费用。 6000分钟×0.065元/分钟=390元 |
直播截图 | 截图数量 | 72000张/天 |
按截图张数计费,计费规则
请参见 直播截图费用。 72千张×0.10元/千张=7.2元 |
智能审核 | 审核图片数 | 144000张/天 |
按使用审核服务的图片扫描张数计费,
计费规则请参见 智能审核费用。 假设全部为算法确定部分:5千张×1.80元/千张+ 45千张×1.62元/千张+80千张×1.53元/千张+11千张×1.44元/千张=220.14元 |
直播录制 | 每月并发录制峰值路数 | 100路/月 | 月录制服务费:100路/月×30元/路=3000元/月 |
直播录制 | 录制时长 | 12000分钟/天 |
录制转封装费:按录制时长收费,
计费规则请参见 直播录制费用。 12000分钟×0.007元/分钟=84元 |
存储 | 视频存储 |
43.9 GB/天;
1317 GB/月。 |
存储计费请参见 存储费用。
若选择数据存储(本地冗余存储)、 标准型,估计产生费用(按月计算)为: (1317+70.32)GB×0.12元/GB/月=166.48元/月 |
存储 | 截图存储 |
35.16 GB/天;
若只保存两天,则截图只占用70.32GB。 |
存储计费请参见存储费用。
若选择数据存储(本地冗余存储)、 标准型,估计产生费用(按月计算)为: (1317+70.32)GB×0.12元/GB/月=166.48元/月 |
若小A平台的主播不集中开始直播,可选择直播采取按峰值带宽计费,会产生的峰值带宽为:
10000(峰值观看人数)×0.5(视频码率Mbps)=5000Mbps
会产生的峰值带宽费用为:
5000Mbps×0.638元/Mbps/天=3190元
小A收到的账单会有按月收取、按天收取两种:
按月收取费用的账单,会在一个月结束后产生并扣费:
每月会产生166.48元存储费用和3000元月录制服务费。
按天收取费用的账单,会在当天结束后产生并扣费:
直播流量费5672.3元、直播时移费用5.93元、直播转码费用390元、智能审核产生的截图费用7.2元、智能审核费用220.14元、录制转封装费84元。
建议像小A这样业务稳定的用户:
选择 直播资源包
和存储资源包的计费方式,将为您节省大量成本,累计购买的资源包越多,享受的优惠越多。
此外,您也可以考虑组合预付费资源包和按量付费的方式计费,以实现最大的资源使用率和最低的成本。
本文介绍视频直播的购买流程,包括选择计费方式、开通服务和购买资源包,开通前需完成实名认证。
1.已注册摩杜云账号,注册流程请参见账号注册
账号已进行实名认证,实名认证流程请参见个人实名认证或企业实名认证。
1.登录 摩杜云官网
,在顶部菜单栏选择产品 > 视频服务 > 视频直播。
2.在视频直播产品详情页,单击立即开通,进入开通页面。
3.在视频直播开通页,选择计费方式按使用流量计费或按带宽峰值计费,勾选《视频直播服务协议》并单击立即开通,控制台即可使用。
1.登录 视频直播控制台
2.在左侧导航栏选择概览,在概览页面右侧单击需要购买的资源包。
3.进入资源包购买页面,配置资源包规格,单击立即购买。
当存在欠费账单时,无法购买资源包。
说明 若您购买了直播流量包,且当前计费方式为带宽计费,则需要变更计费方式为按流量计费,才能消费直播流量包。变更操作,请参见 变更计费方式。
本文介绍通过视频直播管理控制台变更计费方式的操作步骤。
1.登录 视频直播控制台
2.在左侧导航栏选择概览,在计费方式模块单击变更计费类型。
3.在弹出的变配页面中,选择需要变更的计费方式,阅读并勾选视频直播服务协议,单击立即开通
变更成功后,会在视频控制台概览页面的计费方式模块显示待生效计费方式和生效时间。
说明 系统将在当前计费周期结束的第二个自然日零点执行该计费方式变更, 执行过程需要1分钟~10分钟。计费方式变更生效前,该直播实例将不能重复提交计费方式变更请求。
变更生效时间说明:
从“流量”变更到“带宽”计费方式,第二日零点生效。
从“带宽”变更到“流量”计费方式,第二日零点生效。
从“流量”或“带宽”变更成为“月结95带宽”计费方式,第二日零点生效。
从“月结95带宽”变更成为“流量”或“带宽”计费方式,下个自然月1日零点生效,月中不允许变更。
本文介绍如何通过控制台查看欠费金额,查看产生欠费的资源。
1.登录 视频直播控制台
2.在顶部菜单栏中选择费用,进入摩杜云用户中心。
3.查看欠费资源。
i.在左侧导航栏选择费用账单,单击账单明细页签。
ii.查看具体哪些资源使用产生了欠费,以及欠费金额。
本文介绍通过控制台查看直播服务详细的计量计费信息的步骤,包括请求直播流量、转码、截图、鉴黄等用量及消费金额。
1.登录 视频直播控制台
2.在顶部菜单栏,选择费用 > 费用账单,进入摩杜云用户中心。
3.查看账单。
i.单击账单页签。
您可以选择账期、输入订单/账单号,单击查询,系统将显示所有符合条件的账单记录。
您可以从产品下拉列表中选择视频直播,也可以选择消费类型和账单类型,筛选账单记录。
ii.单击账单明细页签。
您可以选择账期、输入实例名称或实例ID,单击查询,系统将显示所有符合条件的账单记录。
您可以勾选统计项和统计周期,筛选账单记录。
您可以从产品下拉列表中选择视频直播,也可以选择财务单元和消费类型,筛选账单记录。
4.定制列与导出账单CSV。
您可以单击定制列,勾选您所需要看到列表,单击确认完成。
您可以单击导出账单CSV,选择导出所有账单内容,或者导出已筛选部分内容,输入验证码,单击确认导出。
本文介绍在控制台查看视频点播服务的资源包信息(包括资源包状态、生效时间和失效时间等),以及设置额度预警的步骤。
1.登录 视频直播控制台
2.在顶部菜单栏单击费用,进入摩杜云用户中心页面。
3.在左侧导航栏,选择资源管理 > 资源包。
说明 仅支持查询当前有效资源包及失效时间未超一年的资源包。
4.单击资源包总览页签,查看资源包信息。
您可以选择生效时间、输入资源包实例ID,单击查询,系统将显示所有符合条件的资源包信息。
您可以从产品下拉列表中选择视频直播,也可以选择资源包名称、状态、生效时间和失效时间,筛选资源包信息。
5.单击使用明细页签,查询资源包使用明细。
您可以选择抵扣时间、输入资源包实例ID或抵扣实例ID,单击查询,系统将显示所有符合条件的资源包信息。
您可以从产品下拉列表中选择视频直播,也可以选择资源包名称、使用类型和抵扣产品,筛选资源包信息。
6.设置额度预警。
单击设置额度预警,开启额度预警,设置剩余比例。
7.定制列与导出账单CSV。
您可以单击定制列,勾选您所需要看到列表,单击确认完成。
您可以单击导出,输入验证码,单击确认导出,导出的内容会在导出记录中存放,待用户下载。
说明 导出过程需要一定的时间,请您耐心等待。您导出的文件生成后会暂存在摩杜云上,三天后会自动删除。
当直播资源包剩余一定额度时,会通过短信、邮箱或站内信的方式向您推送通知。本文介绍如何设置资源包额度预警阈值并订阅通知消息。
1.设置额度预警。
额度预警的设置步骤,参见 查询资源包明细。
2.登录摩杜云控制台。
3.在顶部菜单栏选择消息图标图标,单击消息接收管理。
4.在基本接收管理页面,勾选产品到期通知,并勾选您需要的通知方式,单击添加消息接收人。
5.您可以勾选已有的联系人,或单击新增消息接收人,并输姓名、邮箱、手机号和职位。
6.单击保存。
当直播资源包剩余一定额度时,会通过短信、邮箱或站内信的方式向您推送通知。本文介绍如何设置资源包额度预警阈值并订阅通知消息。
1.已注册摩杜云账号,注册流程请参见账号注册
2.账号已进行实名认证,实名认证流程请参见个人实名认证或企业实名认证。
3.准备2个已完成备案的域名,备案流程请参见备案。
说明
若符合此情况,则域名无需经过备案:您准备添加的直播域名,要选择海外的直播中心,且采用海外及港澳台加速。
若您要添加的推流域名和播流域名,是同一个一级域名下的两个二级域名,则只需要将一级域名进行备案即可。
初次使用视频直播服务,请您先阅读视频直播 使用限制。
本教程包含以下操作:
1.开通服务
2.添加推流域名和播流域名
3.配置CNAME
4.关联推流域名和播流域名
5.配置鉴权
6.生成推流地址和播放地址
7.推流与播流
1.登录摩杜云官网,在顶部菜单栏选择产品 > 视频服务 > 视频直播。
2.在视频直播产品详情页,单击立即开通,进入开通页面。
3.在视频直播开通页,选择计费方式按使用流量计费或按带宽峰值计费,勾选《视频直播服务协议》并单击立即开通,控制台即可使用。
使用视频直播需要进行推流和播流,您需要分别添加推流域名和播流域名。
说明
添加推流域名时,业务类型请选择推流域名;添加播流域名时请选择播流域名。
您无法将同一域名既添加为推流域名,又添加为播流域名。
当您首次将一个新域名添加至摩杜云视频直播时,需要您完成验证域名的归属权,请参见验证域名归属权。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.单击添加域名。
4.配置加速域名、直播中心、业务类型和CDN 加速区域。
参数 | 参数分类 | 说明 |
---|---|---|
加速域名 | 无 |
输入您需要加速的域名,例如:example.com。注意事项如下:
加速域名一般使用子域名,例如: live.example.com。 直播服务暂不支持添加泛域名,例如: *.example.com。 加速域名不允许重复添加,如果出现域名已添加的提示, 请检查您的域名是否已经添加到其他云产品中,例如视频直播、全站加速、SCDN和视频监控,您也可以摩杜云客服处理。 开通视频直播服务后,每个账户最多可添加20个域名, 如果您域名的总带宽日均峰值大于50 Mbps,且业务无风险,可摩杜云客服申请增加域名个数。 加速内容必须合法且符合业务规范,详情请参见 域名准入标准。 说明 子域名必须在同一个账号下。您在添加域名时, CDN会进行检查,如果子域名被添加到不同账号, 系统会报错。如果您无法自行解决,请摩杜云客服处理。 |
直播中心 | 无 |
直播中心用来提供云上直播流的媒体处理服务,如截图、录制、转码、云导播等。
直播推流域名与播流域名的直播中心所在地域要保持一致。 |
CDN 加速区域 | 中国内地 | 如果选择中国内地,则需要工信部备案。域名备案方法,请参见加速域名备案。 |
CDN 加速区域 | 全球加速 | 如果选择全球加速,则需要工信部备案。域名备案方法,请参见加速域名备案。 |
CDN 加速区域 | 海外及港澳台加速 | 如果选择海外及港澳台加速且直播中心也在海外,则无需工信部备案。 |
5.单击提交。
您需要将您添加的域名指向摩杜云视频直播分配的CNAME地址, 这样访问加速域名的请求才能转发到视频直播节点上,您启用视频直播加速服务。
说明
若您的域名在腾讯云解析(原DNSPod),请参见
DNSPod配置CNAME流程。
若您的域名在新网解析,请参见
新网配置CNAME流程。
1.在域名管理页面,选择您上一步添加的播流域名,并复制域名对应的CNAME。
说明 若CNAME栏中有感叹号(!)提示,说明还没有配置CNAME信息。请您按照以下步骤配置CNAME信息。
2.添加CNAME记录。
该步骤以在摩杜云云解析DNS控制台添加CNAME记录为例,
为您介绍CNAME的配置流程。如果您是在DNSPod、新网、Godaddy等其他
域名解析服务商设置的域名解析,请前往对应的域名解析服务商添加CNAME记录,添加方法和下文介绍的方法类似。
i.登录摩杜云云解析DNS控制台。
ii.进入域名解析页面,在您需要设置的域名后面,单击解析设置。
iii.单击添加记录,添加CNAME记录。
记录类型:选择CNAME。
主机记录:加速域名的前缀。
如果您的加速域名为 | 主机记录为 |
---|---|
testcdn.moduyun.com | testcdn |
www.moduyun.com | www |
moduyun.com | @ |
*.moduyun.com | * |
解析线路:默认值。
记录值:即复制的CNAME值。
TTL:默认值。
iv.单击确认
3.播流域名进行CNAME解析之后,您需要按照同样的步骤对推流域名进行CNAME解析。
说明
解析参数设置后,CNAME域名解析正常会很快生效。
CNAME配置生效时间:新增CNAME记录会实时生效,而修改CNAME记录需要最多72小时生效时间。
添加时如遇添加冲突,可考虑换一个域名,或参考解析记录互斥规则。
配置完CNAME后,由于状态更新约有10分钟延迟,摩杜云视频直播控制台的域名列表页可能仍提示未配置CNAME,请忽略。
4.验证CNAME配置是否已生效。
配置CNAME后,不同的DNS服务商CNAME配置生效的时间也不同。
您可以ping或dig您所添加的域名,如果被转向*.*kunlun*.com,即表示CNAME配置已经生效,视频直播推流域名和播流域名也已生效。
目前视频直播采用边缘推流方式,您需要关联推流域名和播流域名,才能进行直播的推流和播流。
1.在域名管理页面,选择您添加的播流域名,单击域名配置。
2.进入直播管理 > 基本配置页面,单击基础信息页签。
在此页面,您可以查看该域名的CNAME、创建时间、业务类型、直播中心、加速区域。
3.单击推流信息页签。
4.单击添加推流信息或推流域名后的编辑图标,选择需要关联的推流域名,并单击确定。
URL鉴权功能旨在保护用户站点的内容资源不被非法站点下载盗用。鉴权功能默认为开启状态,建议您保持默认开启状态,否则会出现直播被盗录、盗播的风险。
当鉴权功能开启时,有默认鉴权和自定义鉴权两种鉴权方式,您可按需选择默认鉴权或自定义鉴权。
默认鉴权
采用默认鉴权则无需设置。
自定义鉴权
如不采用默认配置,您也可以对鉴权主KEY、备KEY、有效时长进行自定义,并输入原始URL。
i.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
ii.选择您要配置的播流域名,单击域名配置。
iii.单击直播管理 > 访问控制,并选择URL鉴权页签,单击修改配置。
iv.配置URL鉴权信息,单击确定。
配置项和说明如下表所示。
配项置 | 说明 |
---|---|
鉴权类型 |
频直播推流和播流域名仅支持使用鉴权A,来实现对源站资源的有效保护。
说明
URL鉴权错误,都会返回403报错,请重新计算。
|
主KEY | 初始化时,会随机生成一个主用密码。您可以重新输入自定义的鉴权方式对应的主用密码。 |
备KEY | 输入自定义的鉴权方式对应的备用密码。 |
有效时长 | 有效时长是指该URL鉴权仅在有效期内可用来发起推流或者播放。直播推流和播放都是长链接行为,在有效期内已经发起的直播推流或者播放行为,不会因为有效期过期而中止,但新发起的推流和播放请求会因为有效时长过期会失败。 初始化时,默认为30分钟。你可以自定义输入鉴权方式的默认有效时长,单位:分钟。 |
1.进入直播管理 > 地址生成器页面。
2.选择播流域名及其关联的推流域名。
3.输入AppName和StreamName。
4.根据实际需求选择转码模版。
5.单击开始生成,获取推流地址和播流地址。
1.下载并安装推流工具和播放工具。
推流工具:下载并安装推流工具。本文以使用OBS推流工具为例说明。下载地址见
OBS官方下载地址
播放工具:下载并安装播流工具。本文以使用VLC播放器为例说明。下载地址见
VLC media player官方下载地址
说明 本文档包含的第三方产品信息,仅供参考。摩杜云对 第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
2.在推流工具中输入鉴权后的推流地址。
输入时推流地址分为URL与流名称两部分。
URL:填写包含AppName前的地址;
流名称:填写包含StreamName后的地址。
以推流地址rtmp://push.moduyunlive.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************为例:
URL:填写rtmp://push.moduyunlive.com/app/;
流名称:填写stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************。
说明 以上推流地址示例由推流域名、AppName、StreamName和鉴权串组成,您需要根据实际情况,替换成您自己的AppName、StreamName和相应的鉴权串。 关于OBS推流工具配置及使用,请参见 OBS推流工具
3.在播放器中输入播放地址
i.打开VLC播放器,单击媒体 > 打开网络串流(N)
ii.在请输入网络URL中,输入播放地址,并单击播放。
以播流地址rtmp://play.moduyunlive.com/app/stream?auth_key=1543300311-0-0-d47ce016332bf280cf275********为例。
说明
以上播放地址示例由播流域名、AppName、StreamName和鉴权串组成,您需要根据实际情况,替换成您自己的AppName、StreamName和相应的鉴权串。
关于VLC播放器的配置及使用,请参见VLC播放器。
如果遇到跨域问题无法播放,请参见提示跨域错误。
您还可以在PC端使用Web播放器进行播放。
将播放地址拷贝至Web播放器中,单击播放预览进行观看。
视频直播提供了权限管理、基础服务、直播加速、直播安全、直播延时、 HTTP配置、直播流媒体处理、云端合流、云导播台、 直播管理、数据统计和日志管理等丰富的功能。您可以阅读 开发指南概述 ,了解以上功能的使用方法。
开发指南从视频直播功能实现的角度,介绍了视频直播的功能和使用方法。本文介绍开发指南包含的内容。
视频直播包含权限管理、基础服务、直播加速、直播安全、直播延时、HTTP配置、直播流媒体处理、云端合流、云导播台、直播管理、数据统计和日志管理。
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
RAM用户管理 | 支持创建多个RAM用户,使用系统授权策略或自定义授权策略对RAM用户进行操作权限的授权。 | RAM访问控制台 | 权限管理概述 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
域名管理 | 支持对域名进行添加、删除、启用、停用等管理操作。 |
直播控制台
API |
直播域名 |
域名配置 | 支持配置CNAME,关联推流域名和播流域名,关联主、子播流域名。 |
直播控制台
API |
直播域名 |
地址管理 | 支持查看和自动生成推流地址和播放地址。 | 直播控制台 | 推流地址和播放地址 |
推流、拉流与播流 | 直播流的接入和分发服务。支持接入第三方直播流。 |
直播控制台
第三方推流工具和播放工具 |
推流、拉流与播流 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
边缘推流 | 优先将视频推流至最优CDN节点,保证用户访问的都是最佳的上行网络。 | 不涉及 | 不涉及 |
海外链路加速 | 在视频采集地域与播放源站地域建立跨域高速通道。 | 直播控制台 | 海外链路加速 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
权限管理 | 支持创建RAM用户并授权。 | RAM访问控制台 | 权限管理概述 |
安全加速 | 支持开启HTTPS安全加速。 |
直播控制台
API |
安全加速 |
访问控制 | 支持Refer防盗链、User-Agent黑白名单、IP黑白名单。 |
直播控制台
API User-Agent黑白名单仅支持工单 |
访问控制 |
URL鉴权 | 支持通过加密URL进行鉴权。 | 直播控制台 | URL鉴权 |
摩杜云视频加密 | 支持对视频数据进行加密。 |
API
摩杜云客服 |
摩杜云视频加密 |
内容安全 | 支持对音频和视频进行智能审核,并根据审核结果禁推直播流。 |
直播控制台
API |
内容安全 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
HTTP消息头 | 支持配置HTTP消息头。 | 直播控制台 | HTTP配置 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
直播转码 | 支持通用转码、自定义转码和RTS转码 |
直播控制台
API |
直播转码 |
直播时移 | 支持30天内的直播时移。 | 直播控制台 | 直播时移 |
直播录制 | 支持录制直播内容至MOS或VOD。 |
直播控制台
API |
直播录制 |
直播截图 | 支持实时截图。 |
直播控制台
API |
直播截图 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
云端合流 | 支持将多路视频源推至直播中心,按照设置的布局进行合流。 | API | 云端合流概述 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
云导播台 | 支持对直播流、视频文件、图片等多种素材进行处理,经过媒体处理和包装,输出新的直播流。 |
直播控制台
API |
功能简介 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
直播流管理 |
支持直播在线流,历史流内容的查看及对视频流进行加入黑名单操作。
支持流粒度的监控信息查询,支持快速检索指定的流。 |
直播控制台
API |
直播流管理 |
回调管理 | 支持直播推流状态、直播录制、按需录制、直播截图和智能审核的事件回调。 |
直播控制台
API |
回调管理 |
文件管理 |
可对录制的点播视频进行快速的索引剪辑及管理。
可对录制下来的视频进行内容预览。 可实时查看截图存储下来的图片。 |
直播控制台 | 文件管理 |
功能 | 说明 | 操作支持 | 相关文档 |
---|---|---|---|
资源监控 | 支持流量、错误码的状态监控。 |
直播控制台
API |
数据统计 |
实时监控 | 可对指定的视频流进行实时的推流监控。 |
直播控制台
API |
数据统计 |
访问统计 | 可对访问数据进行监控。 |
直播控制台
API |
数据统计 |
用量查询 | 可对使用视频直播的流量带宽、录制、截图、转码等用量数据进行查询。 |
直播控制台
API |
数据统计 |
视频直播会对每一次发起操作请求的用户身份进行验证,通过AccessKey验证该账号是否拥有相应的权限。 视频直播支持主账号AK和RAM用户AK,本文为您介绍这两种方式和对比,以及摩杜云提供的系统授权策略和自定义授权策略。
您可以使用视频直播服务提供的API接口或SDK访问视频直播服务。视频直播会针对每一次发起的请求,根据当前的操作验证用户身份,验证该账号是否拥有相应的权限,验证用户身份都需要使用AccessKey。
通过摩杜云访问控制服务(RAM),可为RAM用户授予相关权限,以达到RAM用户在授权范围使用视频直播控制台的目的。
访问控制(RAM)
RAM(Resource Access Management)是摩杜云提供的用户身份管理与资源访问控制服务。更多信息,请参见什么是访问控制。
说明 RAM服务提供的权限的分割和管理,而并非资源本身的隔离, 也就是RAM用户从属于主账号,并且这些RAM用户下不能拥有实际的任何资源,所有资源都属于主账号。
摩杜云账号(主账号)
摩杜云账号(主账号)是摩杜云资源归属、资源使用计量计费的基本主体。摩杜云账号为其名下所拥有的资源付费,并对其名下所有资源拥有完全控制权限。
RAM用户
根据摩杜云的主账号创建的RAM用户,每个RAM用户拥有自己AccessKey,可以和摩杜云主账号一样正常的完成有权限的操作。一般来说,这里的RAM用户可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。
授权策略(RAM Policy)
授权策略使用语法结构描述一组权限,它可以精确地描述被授权的资源集、操作集以及授权条件。通过设置权限策略,并给用户或用户组附加授权,就可以精确控制用户访问您名下哪些资源或服务的权限,比如限制您的用户只拥有上传、播放或审核权限。
访问密钥(AccessKey)
AccessKey(简称AK),包括访问身份验证中用到的AccessKey ID和AccessKey
Secret。视频直播通过使用AccessKey ID和AccessKey
Secret对称加密的方法,来验证某个请求的发送者身份。
AccessKey ID:用于标识用户。
AccessKey Secret:用户用于加密签名字符串,以及视频直播用来验证签名字符串的密钥,AccessKey Secret必须保密。
说明 AccessKey Secret只在创建时显示,不支持查询,请妥善保管。
AK对:指AccessKey ID和AccessKey Secret。
更多关于访问控制的概念,请参见访问控制基本概念。
目前访问视频直播使用的AK有如下2种类型:
主账号AK
主账号AK特指视频直播开通者(即摩杜云网站注册的账号)的AK,每个摩杜云主账号提供的AK对拥有的资源有完全的权限。每个摩杜云主账号能够同时拥有不超过5个启用或者禁用
AK对。您可以登录AccessKey管理控制台,申请新增或删除AK对。每个AK对都有启用和禁用两种状态,只有启用的AK对才能在身份验证时使用。
警告 由于主账号AK有完全的权限,一旦泄露风险巨大,不建议使用其访问视频直播服务。
RAM用户AK
RAM是摩杜云提供的资源访问控制服务。RAM用户AK指的是通过RAM被授权的AK。
这组AK只能按照RAM定义的规则去访问视频直播的资源。通过RAM,您可以集中管理您的用户
(比如员工、系统或应用程序),以及控制用户可以访问您名下哪些资源的权限。比如能够限制您的用户只拥有视频播放权限。RAM用户从属于主账号,并且这些账号下不能拥有实际的任何资源,所有资源都属于主账号。
您可以登录RAM访问控制台创建RAM用户,获取AK,并授予相应权限。具体操作,请参见创建RAM用户并授权。
不同验证方式的对比
验证方式 | 风险 | 权限 | 时效 | 适用场景 |
---|---|---|---|---|
主账号AK | 极大 | 管理和操作视频直播所有资源的权限 | 启用后一直有效 | 超级管理员进行操作。不建议在程序里使用,尤其不要放到客户端。 |
RAM用户AK | 较小 | 根据授权策略获得相应的权限 | 启用后一直有效 | 授权进行具体的管理等操作。可准备多个RAM用户,如遇AK泄露(人员离职等)需要更换;建议在服务端使用。 |
使用授权策略,可对RAM用户进行方便、精确的授权。摩杜云提供了系统授权策略和自定义授权策略两种方式。
系统授权策略
使用视频直播涉及到如下三种系统授权策略。
策略名称 | 说明 | 操作权限 |
---|---|---|
ModuyunLiveFullAccess | 管理视频直播(Live)的权限 | 视频直播所有控制台操作和API |
ModuyunLiveReadOnlyAccess | 只读访问视频直播的权限 | 视频直播所有读取类操作和API,如以Describe开头的接口 |
ModuyunMTSFullAccess | 管理媒体转码服务(MTS)的权限 | 媒体转码服务所有控制台操作和API |
自定义授权策略
如果系统策略无法满足您的需求,您可以通过创建自定义策略实现精细化权限管理。
使用视频直播服务涉及到MOS授权策略和Live授权策略,更多信息和具体操作,请参见
授权示例。
说明
使用直播控制台,必须给您的子账号开通以下授权才能正常使用服务。
Live (必选)授权使用直播服务,直接使用系统内置ModuyunLiveFullAccess授权策略。
MOS (必选)授权使用截图存储服务,可按需自定义,请参见 授权示例。
若要将视频直播的录制文件和截图文件保存到用户MOS的Bucket中,需要对直播服务Live授权访问MOS,使用的是ModuyunMTSDefaultRole角色。去授权。
使用RAM用户可以帮助您有效避免AccessKey或者密码泄露导致的安全问题。本文介绍如何创建一个RAM用户,并设置相应的权限。
已经开通访问控制服务和视频直播服务。
1.登录RAM控制台。
2.单击左侧导航栏用户,进入用户管理页面,单击页面中的创建用户
3.勾选编程访问,单击确定。
单击确定后会弹出手机验证窗口,完成验证码验证后,自动生成该RAM用户的AccessKey。
4.单击用户信息右侧的复制,保存用户登录名称、登录密码、AK对等用户信息。
说明 请保存用户信息并妥善保管,用于后续的访问。
1.返回用户管理界面,这里显示上一步创建的账号。
创建完成之后,该RAM用户还是没有任何权限。
2.单击用户信息右侧的添加权限。
3.选择授权范围,在选择权限下输入框输入live,选择筛选出的权限策略,单击确定。
RAM用户若要使用录制视频转码服务,需要授予RAM用户媒体转码服务使用权限。您可以直接使用系统内置ModuyunMTSFullAccess授权策略。
您可以使用系统授权策略进行授权,也可以使用自定义的授权策略。授权策略的定义,请参见授权策略。自定义授权策略的具体操作,请参见
自定义授权。
4.授权完成之后如果该账号需要控制台登录等权限,也可以单击用户名称,在认证管理页面来完成操作。
自定义授权可以满足用户个性化的授权策略需求,RAM控制台提供了 可视化配置和脚本配置两种配置方式。本文为您介绍授权的基本概念、 使用场景、基本步骤和授权的语法、示例。
由于系统策略的授权粒度比较粗, 很多时候并不能满足您的细粒度权限控制的需求, 此时可以使用此时可以基于RAM Policy实现自定义授权。
您可以在RAM控制台的新建自定义权限策略页面,新建自定义权限策略,请参见创建自定义策略。
选择可视化配置,单击添加授权语句,即可通过可视化的方式配置权利效力、产品/服务、操作名称、资源和限制条件。
在开始设置前,需要先了解权限策略的基本元素和语法结构,更多信息,请参见权限策略基本元素和权限策略语法和结构。
以视频直播系统策略ModuyunLiveReadOnlyAccess为例:
{
"Version": "1",
"Statement": [
{
"Action": "Live:Describe*",
"Resource": "*",
"Effect": "Allow"
}
]
}
参数解释如下:
Version
Version定义了Policy的版本,本文档中Version可以固定设置为1。
Statement
通过Statement描述授权语义,其中可以根据业务场景包含多条语义,每条包含对Action、Effect、Resource 和
Condition的描述。每次请求,系统会逐条依次匹配检查,所有匹配成功的Statement会根据Effect的设置不同分为通过(Allow)、禁止(Deny),其中禁止(Deny)的优先。如果匹配成功的都为通过,该条请求即鉴权通过。如果匹配成功有一条禁止,或者没有任何条目匹配成功,该条请求被禁止访问。
Action
直播支持的Action操作与API一一对应,格式为Live:API名称,如上面示例的播放操作:Live:Describe*,注意多个使用英文逗号分隔。通过指定授权的Action列表,就能组合出想要的权限分组。
所有可用操作,请参见API概览。
Resource
Resource指代的是Live上面的某个具体的资源或者某些资源(支持通配符*),Resource的规则是acs:live:{region}:*。Resource也是一个列表,可以有多个Resource。其中的region字段暂不支持,请设置为*。由于直播现在没有进一步区分资源,故一般建议授权直播时Resource填*。
Condition
Condition代表Policy授权的一些条件,对访问来源等进行限制,为可选项。
支持的条件如下:
Condition | 功能 | 合法取值 |
---|---|---|
acs:SourceIp | 指定 IP 地址或网段 | 普通的IP,支持通配符* |
acs:SecureTransport | 是否是 HTTPS 协议 | true或者false |
acs:MFAPresent | 用户登录时是否使用了多因素认证 | true或者false |
acs:CurrentTime | 指定合法的访问时间(云端接收到请求的时间) | ISO8601格式,例如:2012-11-11T23:59:59Z |
下文示例表示只允许IP来源为42.160.1.0的请求者访问播放接口:
{
"Version": "1",
"Statement": [
{
"Action": "Live:Describe*",
"Resource": "*",
"Effect": "Allow"
"Condition":
{
"IpAddress":
{
"acs:SourceIp": "42.160.1.0"
}
}
}
]
}
根据API概览,可以得到所有对应的Action,进而分组控制权限,以下以MOS授权策略、Live授权策略为例。
MOS授权策略
权限描述:
对指定的Bucket有所有操作权限;
有查看Bucket列表权限。
{
"Version": "1",
"Statement": [
{
"Action": [
"mos:*"
],
"Resource": [
"acs:mos:*:*:$Bucket",
"acs:mos:*:*:$Bucket/*"
],
"Effect": "Allow"
},
{
"Action": [
"mos:ListBuckets"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Live 授权策略
权限描述:
对指定的Live加速域名有所有权限;
有查询Live加速域名的权限。
{
"Version": "1",
"Statement": [
{
"Action": "live:*",
"Resource": [
"acs:cdn:*:$Uid:domain/$DomainName"
],
"Effect": "Allow"
},
{
"Action": "live:Describe*",
"Resource": "*",
"Effect": "Allow"
}
]
}
说明
以上示例中,该API分组下如果增加了新的接口,则需要相应更新Action部分的列表。
各个服务的资源授权策略中使用了如下变量,请您替换为您实际的资源实例名称。
Uid
$Uid:云账号 ID,可通过 控制台 > 账号管理 > 安全设置 进行查询。
Bucket
$Bucket:MOS bucket。
Live
$DomainName:Live加速域名名称。
本文介绍直播加密服务的关联角色:ModuyunServiceRoleForLiveKes,以及如何删除该角色。
直播加密服务的关联角色ModuyunServiceRoleForLiveKes, 是视频加密服务为了创建加密使用的密钥对,需要获取密钥管理服务KMS的访问权限而提供的RAM角色。
说明 更多关于服务关联角色的信息请参见服务关联角色。
摩杜云视频直播的视频加密功能,需要访问密钥管理服务KMS的资源时, 可通过自动创建的直播加密服务关联角色ModuyunServiceRoleForLiveKes获取访问权限。
ModuyunServiceRoleForLiveKes具备的访问权限如下:
{
"Version": "1",
"Statement": [
{
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
如果您使用了视频加密功能,然后您出于安全考虑,需要删除ModuyunServiceRoleForLiveKes角色,则需要先明确删除后的影响:直播加密服务无法创建加密使用的密钥对,从而可能会影响直播加密功能的正常使用。
删除ModuyunServiceRoleForLiveKes的步骤如下:
1.登录RAM控制台,在左侧导航栏单击RAM角色管理。
2.在RAM角色管理页面的搜索框中,输入ModuyunServiceRoleForLiveKes,自动搜索到名称为ModuyunServiceRoleForLiveKes的RAM角色。
3.在右侧操作列,单击删除。
4.在删除RAM角色对话框,单击确定。
视频直播提供了完善的直播推流和播流服务。本文介绍完成视频直播流的推流与播流最基础的步骤。
1.主播使用采集设备采集直播内容,并通过推流SDK推送直播流到CDN分发节点。
2.视频直播服务通过边缘推流的方式将直播流推送至摩杜云直播中心。推送的视频流通过CDN边缘节点进行加速保证上行传输的稳定性。
3.视频直播服务将直播流从摩杜云直播中心推送到CDN分发节点。
4.观众可以通过播放SDK观看推送的直播流。
编号 | 节点 | 操作方式 | 操作 | API参考 | 相关文档 |
---|---|---|---|---|---|
1 | 准备工作 | 控制台 |
直播控制台
1.注册摩杜云账号 2.个人实名认证或企业实名认证 3.什么是摩杜云域名服务 4. 开通与购买视频直播 |
不涉及 | 不涉及 |
2 | 添加域名 | 控制台 |
1. 添加域名
2. 验证域名归属权 3. 配置CNAME域名解析 |
添加直播域名 | 直播域名 |
3 | 关联域名 |
控制台
API |
关联推流和播流域名
关联主、子播流域名 |
添加播流域名和推流域名的映射关系
添加主播流域名和子播流域名映射 |
关联域名 |
4 | 配置访问控制 |
控制台
API |
配置URL鉴权 配置防盗链 配置IP黑白名单 |
批量配置域名 |
URL鉴权
访问控制 |
5 | 生成地址 | 控制台 | 地址生成器 | 不涉及 | 获取推流地址和播放地址 |
6 | 推流 | 推流工具 |
1.下载并安装OBS推流工具
2.填写推流URL和流名称 请参见 推流设置与操作。 |
不涉及 | 推流、拉流与播流 |
7 | 播放 | 播放器 |
1.下载并安装VLC播放器
2.填写播放地址 请参见 播放设置与查看。 |
不涉及 | 推流、拉流与播流 |
视频直播推流支持使用RTMP协议,播流支持使用RTMP协议、FLV协议、HLS协议和ARTC协议(低延时直播)。
RTMP
RTMP(Real Time Messaging
Protocol,实时消息传送协议)是Adobe公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。
RTMP协议比较全能,既可以用来推送,又可以用来直播。其核心理念是将大块的视频帧和音频帧“剁碎”,然后以小数据包的形式在互联网上进行传输,且支持加密,因此隐私性相对比较理想,但拆包组包的过程比较复杂,所以在海量并发时容易出现一些不可预期的稳定性问题。
FLV
HTTP-FLV协议由Adobe公司主推。
格式极其简单,只是在大块的视频帧和音视频头部加入一些标记头信息,由于这种极致的简洁,在延迟表现和大规模并发方面都很成熟。唯一的不足就是在手机浏览器上的支持非常有限,但是用作手机端App直播协议却异常合适。
HLS
HLS是苹果推出的解决方案。
将视频分成5秒~10秒的视频小分片,然后用m3u8索引表进行管理。由于客户端下载到的视频都是5秒~10秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS的一般延迟在10秒~30秒左右)。相比于FLV、HLS在iPhone和大部分Android手机浏览器上的支持非常足,所以常用于QQ和微信朋友圈的URL分享。
ARTC
ARTC是摩杜云提供的低延迟直播RTS(Real-time Streaming)解决方案使用的协议头。
该方案参考WebRTC交互方式,采用UDP传输协议打造,实现可以承载大规模并发,端到端延时1秒内的低延时直播体验,同时对交互流程做了秒开优化,以及兼容更多的直播音视频特性例如AAC解码、B帧。RTS服务部署于摩杜云直播节点,在接入成本、节点覆盖、承载能力上实现了平衡,大幅优化直播体验。
协议类型 | 延时 | 优点 | 缺点 | 特点 | 适合端 | 场景推荐 |
---|---|---|---|---|---|---|
RTMP | 1s~3s | 延时低 |
高并发下不稳定
iOS平台要开发支持相关协议的播放器 使用非标准TCP端口 |
TCP长连接 | 实时性要求不高的直播 | |
FLV | 1s~3s |
延时低
可通过HTML5解封包播放 |
高并发下不稳定
iOS平台要开发支持相关协议的播放器 使用非标准TCP端口 |
TCP长连接 | 实时性要求不高的直播 | |
HLS | >10s |
iOS、Android和H5原生支持良好
可通过HTML5解封包播放 |
延时高 | HTTP短连接 | PC端、移动端 | 实时性要求不高的直播;移动端和H5端 |
ARTC | 1s |
超低延时
抗弱网能力强 |
H5播放不支持B帧和AAC音频(可通过摩杜云RTS转码功能去除B帧并将音频转为Opus) | UDP | PC端、移动端 | 实时性要求高的直播,如电商带货、在线教育、社交互动等 |
摩杜云视频直播在服务端主要提供直播流接入、分发、实时流媒体处理服务, 使用这些服务的都需要添加直播域名并进行配置。本文介绍直播域名的概念, 如何添加域名,如何关联域名和直播域名功能配置生效表。
直播域名包括推流域名和播流域名。
推流域名
推流域名是用于推送直播流的域名。进行添加域名操作时,将业务类型(LiveDomainType)配置为推流域名(liveEdge),则此域名就是推流域名。
播流域名
播流域名是用于播放直播流的域名。进行添加域名操作时,将业务类型(LiveDomainType)配置为播流域名(liveVideo),则此域名就是播流域名。
在使用直播服务前必须先添加至少一个推流域名和一个播流域名,并进行关联。一个域名只能设置为一种域名,不能同时添加为推流域名和播流域名。
每个摩杜云账户下,最多支持加速20个域名。如果您的域名的总带宽日均峰值大于50 Mbps,且业务无风险,则可以联系摩杜云客服申请增加域名个数。
直播服务添加域名的流程如下:
1.确认域名是否符合准入标准
视频直播依托于摩杜云强大的CDN服务,为您提供视频分发加速服务。在您的域名接入摩杜云视频直播服务前,可阅读域名准入标准快速了解摩杜云CDN加速域名的接入条件和限制,防止因域名涉及违规内容而造成的损失。
2.验证域名归属权
当您首次将一个新域名添加至摩杜云视频直播时,需要您完成验证域名的归属权。验证通过后视为您拥有该域名。您在视频直播控制台再次添加该域名或子域名时,不需要再进行验证。摩杜云为您提供DNS解析验证和文件验证两种方法。具体操作,请参见验证域名归属权。
3.添加域名,支持通过控制台或API进行操作。
添加域名时需要配置加速域名、直播中心、业务类型和CDN 加速区域。
控制台参数 | API参数 | 描述 |
---|---|---|
加速域名 | DomainName |
添加的域名。加速域名不允许重复添加,若已添加到其他云产品中,会出现域名已添加的提示。
控制台:一般使用子域名,不支持泛域名。 API:支持泛域名,以英文句号(.)开头。 |
直播中心 | Region |
直播中心所在地域。需要关联的推流域名和播流域名必须选择同一直播中心,初次配置后不可更改。
关于如何选择直播中心,请参见 如何选择直播中心?。 |
业务类型 | LiveDomainType | 指域名的加速类型,推流域名与播流域名分别对应推流加速与播流加速。初次配置后不可更改。 |
CDN 加速区域 | Scope |
指域名可执行加速的地域。
中国内地、domestic: 当主播在中国内地时,推流域名应选择中国内地。 当观众在中国内地时,播流域名应选择中国内地。 域名需要在工信部备案。 全球加速、global: 当主播在中国内地和海外及港澳台时,推流域名应选择全球加速。 当观众在中国内地和海外及港澳台时,播流域名应选择全球加速。 域名需要在工信部备案。 海外及港澳台加速、overseas: 当主播在海外及港澳台时,推流域名应选择海外及港澳台加速。 当观众在海外及港澳台时,播流域名应选择海外及港澳台加速。 域名无需在工信部备案。
说明
选择加速区域为全球加速和海外及港澳台加速,与播放域名中配置的海外链路加速是两个不同的功能。
|
4.域名解析
域名添加成功后,如果您想启用视频直播加速服务,需要将您的域名指向摩杜云视频直播分配的CNAME地址,这样访问加速域名的请求才能转发到视频直播节点上,达到加速效果。
如果您的域名是在摩杜云,请参见
摩杜云解析与配置CNAME流程
如果您的域名是在摩杜云,请参见
摩杜云解析与配置CNAME流程
如果您的域名是在腾讯云(原DNSPod),请参见
DNSPod配置CNAME流程。
如果您的域名是在新网,请参见
新网配置CNAME流程。
说明
如果您是初次接触域名解析,对“什么是域名解析”、“为什么要解析域名”、“如何进行域名解析”、“什么是A记录”、“什么是CNAME记录”、“CNAME记录与A记录的差别”有疑问,请参见什么是域名解析?。
添加域名后,您需要分别对推流域名和播流域名进行CNAME解析才可使用域名。
由于Local
DNS的解析记录存在缓存时间,因此配置了域名的CNAME解析记录之后CDN平台大约会延迟10分钟才会显示CNAME解析记录配置成功。
在添加推流域名和播流后,您需要关联域名,才能使用视频直播服务。
视频直播采用边缘推流方式推送直播流,可以优先将视频推流至最优CDN节点,
保证您访问的都是最佳的上行网络。因此需要将推流域名和播流域名进行映射,即关联推流域名和播流域名。
说明 视频直播已在逐步下线旧有的中心推流方式, 2019年2月21日之后新增的播流域名,不再支持中心推流,都需要关联推流域名和播流域名。
视频直播支持关联多个推流域名与多个播流域名, 形成的关联关系如下图所示。可通过关联推流和播流域名和关联主、子播流域名来实现。
关联推流和播流域名:实现了一个播流域名对应多个推流域名。
一个推流域名只能配置一个主播流域名,若需要使用多个播流域名播放同一个推流,请把多个播流域名关联成主播流域名和子播流域名的关系。
您可以通过控制台,或调用AddLiveDomainMapping接口。
关联主、子播流域名:实现了一个推流域名对应多个播流域名。
子播流域名会继承主播流域名的推流配置、转码配置,子播流域名配置这些信息无效,
例如转码模板需要配置在主播放域名。更多功能配置是否生效,请参见
直播域名功能配置生效表。
您可以通过控制台,或调用AddLiveDomainPlayMapping接口。
使用视频直播服务的都需要对直播域名进行配置,部分功能需要配置在主播流域名上,部分功能需要配置在子播流域名上。
功能项 | 主播流域名生效 | 子播流域名生效 | |
---|---|---|---|
直播流管理 | 查看直播流(在线流、历史流、禁推流) | √ | - |
查看直播流(在线流、历史流、禁推流) | √ | - | |
文件管理 | 查询录制文件 | √ | - |
录制索引剪辑 | √ | - | |
查询截图文件 | √ | - | |
域名管理 | 修改加速区域 | - | √ |
添加、删除推流信息 | √ | - | |
添加子播放域名 | √ | 子播流域名间不允许嵌套 | |
HLS回源HOST | √ | 子域名回源HOST头需配置为主域名 | |
延迟配置(高、中、低) | - | √ | |
HTTP头配置 | - | √ | |
安全配置(HTTPS配置、Refer防盗链、URL鉴权、IP黑白名单) | - | √ | |
带宽峰值监控 | - | √ | |
IPv6配置 | - | √ | |
直播处理配置 | 转码模板配置 | √ | - |
录制配置(录制模板配置、录制回调配置) | √ | - | |
截图配置(截图配置、截图回调配置) | √ | - | |
审核配置(审核配置、审核回调配置) | √ | - | |
直播时移 | √ | - | |
直播延时配置 | √ | - | |
拉流配置 | √ | - | |
海外链路加速配置 | √ | - | |
数据监控 | 资源监控-流量带宽下行 | - | √ |
资源监控-回源统计 | - | √ | |
资源监控-HTTPCODE | - | √ | |
实时监控-流量带宽 | - | √ | |
实时监控-质量监控 | - | √ | |
访问统计 | 独立访客数 | - | √ |
用户分布 | - | √ | |
用量查询 | 播放带宽/流量 | - | √ |
推流路数 | √ | - | |
转码时长 | √ | - | |
截图张数 | √ | - | |
直播时移 | √ | - | |
海外链路加速 | √ | - | |
日志管理 | 日志下载 | - | √ |
实时日志推送 | - | √ |
摩杜云视频直播提供的是触发式的推流与播放,您无需提前创建资源,只要添加经过备案的推流域名和播流域名, 并完成域名解析、鉴权等操作,即可根据地址拼接规则快速地拼接出对应的推流地址和播放地址。本文介绍推流地址和播放地址的拼接规则,及使用方法。
一个直播服务地址(推流地址和播放地址)的生成采用域名(Domain)、应用(AppName)、直播流(StreamName)三级直播管理单元,每个域名(Domain)下可创建多个应用(AppName),每个应用下可创建多个直播流(StreamName)。
AppName与StreamName可自定义修改。不同的值生成不同的推流和播放地址。
在拼接地址前,您需要判断直播流是否经过转码,是否进行鉴权,并准备好直播流的推流域名、播流域名、Appname(应用)、StreamName(直播流)、转码模板ID(如有)和鉴权串(如有)。
说明 鉴权串是根据鉴权算法得出的一个加密字符串。
推流地址(鉴权):推流域名+Appname(应用)+StreamName(直播流)+鉴权串
播放地址(鉴权):播流域名+Appname(应用)+StreamName(直播流)+鉴权串
转码流地址(鉴权):播流域名+Appname(应用)+StreamName(直播流)+_+转码模板ID+鉴权串
推流地址(未鉴权):推流域名+Appname(应用)+StreamName(直播流)
播放地址(未鉴权):播流域名+Appname(应用)+StreamName(直播流)
转码流地址(未鉴权):播流域名+Appname(应用)+StreamName(直播流)+_+转码模板ID
在获取推流地址或播放地址前,需要先完成以下操作:
1.添加域名
您需要先添加经备案的推流域名和播流域名。了解添加域名流程请参见添加域名,具体操作请参见添加域名和
配置CNAME域名解析。
2.关联域名
添加域名后,您需要将推流域名和播流域名进行关联,才能进行推流和播流操作。了解关联域名流程请参见关联域名,具体操作请参见
关联推流和播流域名。
3.配置鉴权
鉴权功能默认为开启状态,建议您保持开启状态,否则会出现直播被盗录、盗播的风险。您可以使用默认的鉴权设置,也可以进行自定义设置。了解鉴权请参见
URL鉴权
,具体操作请参见
配置URL鉴权。
说明 如果您因为特殊场景推流地址不能加鉴权, 想要关闭鉴权功能,请了解盗刷风险并签署《直播服务关闭URL鉴权免责协议》。
4. 配置可选功能
您可以选择配置防盗链功能,来限制视频直播的分发资源被访问的情况。了解防盗链请参见Referer黑白名单,具体操作请参见
防盗链。
您可以配置IP黑名单,来限制某一IP访问您的加速域名。了解IP黑名单请参见IP黑白名单,具体操作请参见
IP黑白名单。
您可以配置智能审核功能,自动检测视频直播的内容是否涉嫌违规。了解智能审核请参见智能审核,具体操作请参见
配置审核。
您可以根据需求配置转码、时移、录制、截图等。了解此类功能请参见
直播转码
、
直播时移
、
直播录制
和
直播截图
。
您可以配置HTTPS安全加速功能,来避免敏感信息泄露等安全隐患。了解安全加速请参见安全加速,具体操作请参见
配置HTTPS安全加速。
您还可以配置推断流回调功能,以便在推流状态发生变化时,及时收到摩杜云将视频流推送成功、
断流成功的状态实时反馈。了解推断流回调请参见
直播推流状态回调
,具体操作请参见
配置推流回调地址。
您可以选择控制台或手动拼接的方式获取推流地址和播放地址。
控制台
您可以在控制台的
地址生成器
页面,选择需要配置的播流域名和与之关联的推流域名,并填写AppName、StreamName,
若此AppName配置了转码模板,还可选择转码模板,单击开始生成即可生成推流地址和播放地址。具体操作,请参见
地址生成器 。
手动拼接
手动拼接需要提前查询好拼接地址所用信息。
已关联的推流域名、播流域名
AppName、StreamName
鉴权串(若鉴权则需要)
可在控制台的域名管理 > 域名配置 > 访问控制页面的URL鉴权页签中生成,请参见
配置URL鉴权。
也可通过md5算法计算,请参见
鉴权URL。
转码模板ID(若转码且为播放地址则需要)
可在控制台的域名管理 > 域名配置 > 转码模板配置页面查看已添加的转码模板的ID,或添加转码模板并获取转码模板ID。
可以通过API获取模板ID。
调用DescribeLiveStreamTranscodeInfo接口,系统返回转码模板ID。
另外,自定义模板是用户自行添加的模板,根据添加的字段配置而成,自定义模板的ID是在。获取自定义模板调用AddCustomLiveStreamTranscode接口时配置的。
创建一个直播活动首先需要一个直播流的推流地址和播放地址,摩杜云直播服务提供的是触发式的活动创建方式,不用使用任何接口,根据活动创建规则即可批量完成创建。
推流地址可以根据规则进行批量创建,并同时执行直播活动。
进行批量直播活动时需要注意直播每个域名对并发流是有限制的,
每个域名限制20路并发流,10路转码流,进行批量直播活动时先确认当前限制是否满足您的需求。如不满足,您可
联系摩杜云客服
批量构造推流地址
AppName与StreamName可自定义修改。不同的值生成不同的推流和播放地址。
您可以在一个应用下创建多个直播流。
如有一应用,名称为live,在live下您可创建多条直播流。推流地址为:
rtmp://推流域名/{live}/{1}?鉴权串
rtmp://推流域名/{live}/{2}?鉴权串
rtmp://推流域名/{live}/{3}?鉴权串
您也可以创建多个以应用为主的直播流。
说明 视频直播根据流名称(StreamName)而不是根据应用名称(AppName) 来判断直播流是否唯一。如果您设置了不同的应用名称,还要保证流名称不同,才能保证最终的直播流不同。
rtmp://推流域名/{live1}/{Stream1}?鉴权串
rtmp://推流域名/{live2}/{Stream2}?鉴权串
rtmp://推流域名/{live3}/{Stream3}?鉴权串
批量构造播放地址
推流地址为:rtmp://推流域名/{live}/{3}?鉴权串
对应的播放地址为:
RTMP:rtmp://播流域名/{live}/{3}?鉴权串
FLV:http://播流域名/{live}/{3}.flv?鉴权串
HLS:http://播流域名/{live}/{3}.m3u8?鉴权串
UDP:artc://播流域名/{live}/{3}?鉴权串
您可以选择控制台或手动拼接的方式获取推流地址和播放地址。
说明
本文示例中以如下信息为例,形成的推流地址和播放地址仅供参考。
推流域名:push.a.com
播流域名:play.a.com
AppName:app
StreamName:stream
转码模板ID:sd
您实际使用的推流地址和播放地址,需要用您自己的推流域名、播流域名、AppName、StreamName以及鉴权获得的对应鉴权串,并按照拼接规则来获取。
是否鉴权 | 地址类型 | 是否转码 | 示例 |
---|---|---|---|
是 | 推流地址 | 不涉及 |
直播只支持RTMP格式推流。
rtmp://push.a.com/app/stream?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** |
播放地址 | 原画 |
播放地址支持RTMP、FLV、HLS、UDP格式。UDP格式即低延迟直播RTS使用地址,需提前开通RTS服务。 RTMP:rtmp://play.a.com/app/stream?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** FLV:http://play.a.com/app/stream.flv?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** HLS:http://play.a.com/app/stream.m3u8?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** UDP:artc://play.a.com/app/stream?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** |
|
转码 |
播放地址支持RTMP、FLV、HLS、UDP格式,UDP格式即低延迟直播RTS使用地址,需提前开通RTS服务。不同的转码需要在StreamName后加_模板ID RTMP:rtmp://play.a.com/app/stream_sd?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** FLV:http://play.a.com/app/stream_sd.flv?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** HLS:http://play.a.com/app/stream_sd.m3u8?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** UDP:artc://play.a.com/app/stream_sd?auth_key=160871****-0-0-4c027af1df9237568c7035c290b0**** |
||
否 | 推流地址 | 不涉及 |
直播只支持RTMP格式推流。
rtmp://push.a.com/app/stream |
播放地址 | 原画 |
播放地址支持RTMP、FLV、HLS、UDP格式,UDP格式即低延迟直播RTS使用地址,需提前开通RTS服务。
RTMP:rtmp://play.a.com/app/stream FLV:http://play.a.com/app/stream.flv HLS:http://play.a.com/app/stream.m3u8 UDP:artc://play.a.com/app/stream |
|
转码 |
播放地址支持RTMP、FLV、HLS、UDP格式,UDP格式即低延迟直播RTS使用地址,需提前开通RTS服务。不同的转码需要在StreamName后加_模板ID。
RTMP:rtmp://play.a.com/app/stream_sd FLV:http://play.a.com/app/stream_sd.flv HLS:http://play.a.com/app/stream_sd.m3u8 UDP:artc://play.a.com/app/stream_sd |
视频直播的基础服务是直播流的接入和分发服务。您可以使用推流地址 通过推流工具将视频流推送至摩杜云平台进行视频的内容处理及分发, 观众可以通过播放地址和播放器观看直播内容。 推送至摩杜云中心的视频可以根据您的需求进行设置,从而适用于 不同的应用场景。本文介绍视频直播的推流、拉流和播流,及其实现步骤。
推流
推流是把采集阶段封装好的音视频直播流推送到摩杜云直播服务中心的过程。
拉流
拉流是将第三方直播流地址拉取到摩杜直播中心进行CDN内容分发,推流至需要的节点的过程。
播流
播流是将直播服务中心已有直播内容,分发到播放器进行播放过程。
使用直播基础服务,其实就是通过在推流工具中指定直播地址的方式,
将直播流推送至直播中心进行内容分发,再由观众通过播放工具指定播放地址从而观看直播的过程。
若要完成视频直播,步骤如下:
1. 准备工具和环境
2. 拉取直播流(按需)
3. 获取推流与播放地址
4. 推流设置与操作
5. 播放设置与查看
推流和播放工具
推流工具:您可以使用OBS推流工具进行推流。下载地址见OBS官方下载地址
播放工具:您可以使用VLC播放器来播放视频。下载地址见
VLC media player官方下载地址
网络环境
网络类型比较
网络类型 | 优势 | 劣势 |
---|---|---|
有线网 | 稳定 | 不够便捷 |
Wi-Fi | 便捷 | 不稳定 |
有线网络相对Wi-Fi来说比较稳定,信号不易受干扰。因此,如果条件允许,建议您使用有线网络。
Wi-Fi相对有线网络来说比较便捷。因此,如果是活动直播,建议您使用 Wi-Fi。
上行带宽检测
视频直播对网络环境要求较高,良好的网络环境可以保证直播观看时的流畅度。上行带宽,
取决于视频质量、分辨率。视频质量越好,分辨率越高,对上行带宽的要求就越高。
建议您使用网速测试工具
Speedtest
测试您当前网络的上行带宽情况。
说明 建议您的上行带宽不低于1 Mbps。
如果您使用的是第三方的直播流地址,您可以使用拉流直播的功能,将直播流拉取到摩杜云视频直播的直播中心,再进行分发。您只需准备完成拉流配置即可,支持固定拉流和触发拉流两种方式。
固定拉流:指定拉流的起始时间和结束时间,在指定时间进行拉流直播。
触发拉流:当需要拉取的源站开始播放直播流时,自动触发摩杜云视频直播服务进行拉流直播。
准备需要拉取的源站的拉流地址,在控制台的域名管理 > 域名配置 > 拉流配置页面中,添加拉流配置信息。具体操作,请参见
拉流配置。
说明 摩杜云拉流服务器IP为动态IP,若您的直播流源站设置了 IP白名单的访问限制,可能导致视频直播服务无法拉取到您的第三方的直播流地址。
获取推流与播放地址,您需要按照以下步骤完成操作:
1.添加域名
您需要先添加经备案的推流域名和播流域名。了解添加域名流程请参见添加域名,具体操作请参见添加域名和
配置CNAME域名解析。
2.关联域名
添加域名后,您需要将推流域名和播流域名进行关联,才能进行推流和播流操作。了解关联域名流程请参见关联域名,具体操作请参见
关联推流和播流域名。
3.配置鉴权
鉴权功能默认为开启状态,建议您保持开启状态,否则会出现直播被盗录、盗播的风险。您可以使用默认的鉴权设置,也可以进行自定义设置。了解鉴权请参见
URL鉴权
,具体操作请参见
配置URL鉴权。
说明 如果您因为特殊场景推流地址不能加鉴权, 想要关闭鉴权功能,请了解盗刷风险并签署《直播服务关闭URL鉴权免责协议》。
4.配置可选功能。
您可以选择配置防盗链功能,来限制视频直播的分发资源被访问的情况。了解防盗链请参见Referer黑白名单,具体操作请参见
防盗链。
您可以配置IP黑名单,来限制某一IP访问您的加速域名。了解IP黑名单请参见IP黑白名单,具体操作请参见
IP黑白名单。
您可以配置智能审核功能,自动检测视频直播的内容是否涉嫌违规。了解智能审核请参见智能审核,具体操作请参见
配置审核。
您可以根据需求配置转码、时移、录制、截图等。了解此类功能请参见
直播转码
、
直播时移
、
直播录制
和
直播截图
。
您可以配置HTTPS安全加速功能,来避免敏感信息泄露等安全隐患。了解安全加速请参见
安全加速
,具体操作请参见
配置HTTPS安全加速。
您还可以配置推断流回调功能,以便在推流状态发生变化时,及时收到摩杜云将视频流推送成功、
断流成功的状态实时反馈。了解推断流回调请参见直播推流状态回调,具体操作请参见
配置推流回调地址。
5.获取推流地址和播放地址。
完成域名的创建及相关配置后,您可以在视频直播控制台获取推流地址和播放地址。请参见
推流地址和播放地址。
请您按照以下步骤完成推流操作:
1.按照文档说明安装已经下载的OBS推流工具。
2.获取推流地址。
在控制台获取直播推流地址,您可以按照
获取推流与播放地址
操作步骤获取推流地址。
3.配置OBS基本参数并使用获取的推流地址进行推流。
关于OBS推流工具配置及使用,请参见OBS推流工具
您需要将鉴权后的推流地址分两部分输入URL与流密钥中。
URL:填写包含AppName前的地址。
流名称:填写包含StreamName后的地址。
以推流地址rtmp://push.moduyunlive.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************为例。
URL:填写rtmp://push.moduyunlive.com/app/。
流名称:填写stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************。
说明 以上推流地址示例由推流域名、AppName、StreamName和鉴权串组成, 您需要根据实际情况,替换成您自己的AppName、StreamName和相应的鉴权串。
请您按照以下步骤完成播流操作:
1.按照文档说明安装已经下载的VLC播流工具。
2.获取播放地址。
在新版控制台获取直播播放地址,您可以按照
获取推流与播放地址
操作步骤获取播放地址。
3.使用VLC播放器来播放视频。
您需要将鉴权后的播放地址输入指定的位置即可进行播放。以播放地址rtmp://play.moduyunlive.com/app/stream?auth_key=1543300311-0-0-d47ce016332bf280cf275********为例,将播放地址复制到URL的输入框并单击播放即可。
关于VLC播放器使用,请参见VLC播放器。
说明 以上播放地址示例由播流域名、AppName、StreamName和鉴权串组成, 您需要根据实际情况,替换成您自己的AppName、StreamName和相应的鉴权串。
摩杜云视频直播在服务端主要提供直播流接入、分发、实时流媒体处理服务。接入和分发网络(直播CDN)使用边缘就近接入方案,上行推流会根据直播发生地点使用最近最优匹配的节点进行接入。
在北京、上海、深圳、青岛、日本、新加坡、印度、印尼、德国9个国家和地区部署了直播中心。直播中心主要提供直播流的录制、截图、转码、时移、视频AI、导播台等实时流媒体服务。在开始直播前,需要您配置一对直播推流、播流域名(并进行绑定)。创建推流和播流域名时,会让您选择域名使用的直播中心,这个直播中心就是实时流媒体处理所使用的区域,与直播流接入和分发位置无关。
如果您的直播流业务推流和播放都在中国内地,且直播流不需要对实时流进行媒体处理(截图、录制、导播台服务等):
添加域名时选择中国内地哪个区域没有区别。不是说您的主播多在北京,您就一定要选择北京区域,因为即使您域名选择了上海区域,主播在北京,边缘接入会使用北京的接入节点进行接入。分发节点会通过您的观众在哪里进行调度,和实时流媒体处理中心所在的区域无关。
如果您的业务需要对实时流进行媒体处理(截图、录制、导播台服务等):
需要考虑以上服务会涉及图片、视频的存储,视频存储的MOS
Bucket必须选择和直播中心同区域(避免跨区域即region,网络等因素可能影响实时流处理的及时性和稳定性)。所以您的存储如果已经在某个区域,对应的直播中心需要选择在同区域(region)。
如果您的业务直播主播和观众都在海外:
建议您选择距离主播较近的一个直播中心,将视频流推至附近的直播中心。
边缘推流
摩杜云的CDN节点遍布全球主流国家,使用边缘推流,将视频流优先推送到距主播最近的边缘节点上,再通过摩杜优化后的网络将视频流传输至直播中心。
实时监控网络状态
为实时观察主播的网络状态,您可以登录
视频直播控制台
,在直播管理 > 流管理 > 流监控
页面中查看实时的推流状态、检测主播的网络状态,保证推流的稳定性,请参见
流管理。
您也可以通过API自主获取实时帧率和码率,请参见
查询推流域名流帧率和码率。
创建域名时需要您选择CDN
加速区域类型,CDN加速区域是指仅中国内地加速或者海外及港澳台加速。其中全球加速是指中国内地和海外及港澳台加速分别加速,并不是指中国内地和海外及港澳台之间的加速。
如果您的直播业务主播和观众都在中国内地,创建推流和播流域名时直播中心都选择中国内地区域,CDN加速区域选择中国内地。
如果您的直播业务主播和观众都在海外及港澳台(如新加坡),则推流和播流域名的直播中心都选择新加坡。CDN加速区域选择海外及港澳台。
海外直播中心选择使用就近原则,尽量选择主播和观众所在地附近的区域。如果您的区域无对应的直播中心,可以提交工单咨询,选择哪个中心更好。
如果您的直播业务有主播和观众在不同区域(在中国内地、海外及港澳台或都有),创建播流域名时候CDN
加速区域要选择全球加速(包括中国内地和海外及港澳台加速)或者海外及港澳台加速(不包括中国内地)。
说明
选择加速区域为全球加速和海外及港澳台加速,与播放域名中配置的海外链路加速是两个不同的功能。加速区域是播放时候进行直播CDN分发加速的配置,海外链路加速是指在主播和观众在不同区域(中国内地、
海外及港澳台)之间直播流的加速。
选择不同的加速区域覆盖,对应不同的直播CDN带宽或流量单价。
以上只在不同区分有用户播放请求时才发生对应区域的分发加速,
并产生计费。如果您选择了全球加速,但是仅仅中国内地用户播放,
不会发生海外区域的分发加速计费。更多计费规则,请参见
直播服务费用
和云产品定价页。
主播所在地 | 观众所在地 | 域名直播中心选择与播流域名CDN加速配置 | 海外链路加速配置 | 说明 |
---|---|---|---|---|
中国内地 | 中国内地 |
不使用导播台:可以选择北京、上海、深圳、青岛直播中心。
如果需要使用导播台,目前只能选择上海。 如果有录制、截图等使用MOS场景,MOS Bucket必须和直播中心同区域。 |
不涉及 | 海外链路加速可以配置成单路流级别,和域名/appname下所有流维度。 |
中国内地 | 海外及港澳台 |
推流域名和播流域名可以选择中国内地的4个直播中心。
播流域名的CDN加速选择海外及港澳台加速。 |
根据观众所在地,可选择美国、德国、新加坡、中国香港、印尼。
加速类型:播流加速。 |
主播都在中国内地,但观众在海外及港澳台。如果观众在多个国家大区,需要配置多个海外链路加速。 |
中国内地 | 新加坡 |
方案一:
推流域名和播流域名中国内地的4个直播中心。 播流域名CDN加速选择海外及港澳台加速。 方案二: 推流域名和播流域名选择新加坡直播中心。 播流域名CDN加速选择海外及港澳台加速。 |
方案一:选择新加坡。
加速类型:播流加速。 方案二:选择中国内地直播中心其中的一个。 加速类型:推流加速。 |
解决goChina跨境直播的需求。
新加坡和中国内地线路支持双向配置,所以无论客户域名使用 新加坡中心还是中国内地的中心,都支持主播从中国内地进行 推流,播放观众大多在新加坡的场景。 |
新加坡 | 中国内地 |
方案一:
推流域名和播流域名中国内地的4个直播中心。 播流域名CDN加速选择海外及港澳台加速。 方案二: 推流域名和播流域名选择新加坡直播中心。 播流域名CDN加速选择海外及港澳台加速。 |
方案一:选择新加坡。
加速类型:推流加速。 方案二:选择中国内地直播中心其中的一个。 加速类型:播流加速。 |
解决goChina跨境直播的需求。
新加坡和中国内地线路支持双向配置,所以无论客户域名 使用新加坡中心还是中国内地的中心,都支持主播从新加坡进行推流,播放观众大多在中国内地的场景。 若为了兼顾可能仍有少量在海外播放的用户,播流域名CDN加速可选择全球加速。 |
中国内地 | 中国内地+海外及港澳台 |
推流域名和播流域名可以选择中国内地的4个直播中心。
播流域名CDN加速选择全球加速。 |
根据中国内地之外观众所在地,可选择美国、德国、新加坡、中国香港、印尼。 加速类型:播流加速。 | 主播都在中国内地,观众在中国内地、海外及港澳台都有。需要针对在中国内地之外的观众配置海外链路加速。如果观众在多个国家大区,需要配置多个海外链路加速。 |
海外及港澳台 | 海外及港澳台 |
推流域名和播流域名可以选择日本、
新加坡、印尼、印度、德国直播中心。 播流域名CDN加速选择海外及港澳台加速。 |
无需配置。 | 无 |
海外及港澳台 | 中国内地 |
推流域名和播流域名可以选择中国内地的4个直播中心。
播流域名CDN加速选择全球加速。 |
根据主播所在地可选择美国、
德国、新加坡、中国香港、印尼。 加速类型:推流加速。 |
其中主播在海外,观众在中国内地的情况,需要配置海外链路加速。 播流域名CDN加速选择全球加速是为了兼顾可能仍有少量在海外播放的用户。 |
播放的卡顿,很大一部分原因是推流时出现了卡顿。导致推流的卡顿有以下主要因素,当出现推流卡顿时,您可以逐一排查问题。
采集设备配置
推流过程中会有一定的CPU损耗,硬件配置较差的低端手机,在推流过程中若整体CPU使用率超过80%,画面会出现不同程度的卡顿,花屏等现象,会影响到视频的采集,同时也会影响到用户端的观看。
视频采集参数的设置
能保证人眼识别流畅度的视频最低保证在1秒15帧以上,如果FPS低于1秒10帧,画面就会出现较明显的卡顿,如无特殊情况,尽量将视频帧率设置在1秒15帧之上。
虽然视频的帧率越高画面流畅感越强,但是帧率超过1秒30帧后,人眼就无法识别出画面的效果,帧率增加也增加视频传输的带宽成本,建议您合理设置视频的参数。
网络带宽
大多数画面出现卡顿的现象均来自网络因素,以下列出几条常见因素:
网络带宽大小:确认网络运营商提供给您的带宽大小,是否足够本次直播传输。
下行带宽占用:检查是否有下载数据占用网络带宽。
系统资源占用:检查后台是否运行了大量的程序,请您合理的删除和停止正在运行的程序,空出资源。
视频直播采用边缘推流的方式推送直播流,优先将视频推流至最优CDN节点。您无需进行其他配置,2019年2月21日之后新增的播流域名均采用边缘推流方式进行分发。本文介绍边缘推流、边缘推流的优势及相关操作。
边缘推流
利用摩杜云丰富的CDN节点、覆盖范围广的优势,优先将流数据调度至距离用户最近的最优CDN节点,通过摩杜智能调度系统将数据快速传输至直播中心进行内容分发,保证用户访问的都是最佳的上行网络,减少因上行传输带来的卡顿、拉流缓慢的问题。
中心推流(已逐步下线)
中心推流方式已在逐步下线,2019年2月21日之后新增的播流域名,
均采用边缘推流的接入方式。如果您因为历史原因还在使用中心推流方式,希望您尽快联系我们,切换为边缘推流,否则很多新功能无法支持。
高覆盖:全球1500+CDN节点,中国内地700+,覆盖主流城市和地区。
智能化:优先接入具体用户最近的CDN节点,保证内容传输的稳定。
2019年2月21日之后新增的播放域名默认均采用边缘推流方式,无需配置,您只需要关联推流域名和播流域名即可。
更多信息,请参见
关联域名。
具体操作,请参见
关联推流和播流域名。
海外链路加速是通过在主播或观众所在地域与中国内地建立一条高速通道,进行直播流的传输。本文介绍海外链路加速的简介、优势和使用方法。
海外链路加速,在视频采集地域与播放源站地域建立优质的网络传输道路, 实现采集地域与播放地域之间以最短、最优链路传输,帮助企业解决全球用户访问卡顿或延迟过高的问题。
说明
海外链路加速只对配置在华东2(上海)、华北2(北京)、华北1(青岛)、华南1(深圳)、亚太东南1(新加坡)直播中心的域名生效。
历史上遗留的使用中心推流方式接入的用户,无法使用海外链路加速。请先联系摩杜云客服改为边缘推流接入的方式。
使用海外链路加速,会产生海外链路加速费用。更多信息,请参见
海外链路加速费用。
低成本接入:高灵活方式接入,无需任何开发与服务器购买成本,配置即可生效。
通信质量与可用性:摩杜云优质基础设施为更好的链路质量和可用性提供保障。
高速稳定:就近边缘接入、分发,全球节点高速链接。
全球覆盖:亚欧美等主流区域覆盖。
弹性售卖:按天粒度计费,支持按流级别配置传输网络,满足不同用户需求。
主播在海外或港澳台地区,将视频流通过海外链路加速功能推流至中国内地,并在中国内地进行分发。
主播在中国内地,将视频流通过海外链路加速拉取到指定的加速区,进行内容分发。
您可以通过直播控制台,对播流域名配置海外链路加速。具体操作,请参见 海外链路加速。
注意 配置时需要配置在播流域名上。 该域名需要先与推流域名关联,与之关联的推流域名需采用的是边缘推流方式。 了解关联域名流程请参见关联域名,具体操作请参见 关联推流和播流域名。
选择直播中心和配置海外链路加速的场景枚举:
主播所在地 | 观众所在地 | 域名直播中心选择与播流域名CDN加速配置 | 海外链路加速配置 | 说明 |
---|---|---|---|---|
中国内地 | 中国内地 |
不使用导播台:可以选择北京、上海、深圳、青岛直播中心。
如果需要使用导播台,目前只能选择上海。 如果有录制、截图等使用MOS场景,MOS Bucket必须和直播中心同区域。 |
不涉及 | 海外链路加速可以配置成单路流级别,和域名/appname下所有流维度。 |
中国内地 | 海外及港澳台 |
推流域名和播流域名可以选择中国内地的4个直播中心。
播流域名的CDN加速选择海外及港澳台加速。 |
根据观众所在地,可选择美国、德国、新加坡、中国香港、印尼。
加速类型:播流加速。 |
主播都在中国内地,但观众在海外及港澳台。如果观众在多个国家大区,需要配置多个海外链路加速。 |
中国内地 | 新加坡 |
方案一:
推流域名和播流域名中国内地的4个直播中心。 播流域名CDN加速选择海外及港澳台加速。 方案二: 推流域名和播流域名选择新加坡直播中心。 播流域名CDN加速选择海外及港澳台加速。 |
方案一:选择新加坡。
加速类型:播流加速。 方案二:选择中国内地直播中心其中的一个。 加速类型:推流加速。 |
解决goChina跨境直播的需求。 新加坡和中国内地线路支持双向配置,所以无论客户域名使用新加坡中心还是中国内地的中心,都支持主播从中国内地进行推流,播放观众大多在新加坡的场景。 |
新加坡 | 中国内地 |
方案一:
推流域名和播流域名中国内地的4个直播中心。 播流域名CDN加速选择海外及港澳台加速。 方案二: 推流域名和播流域名选择新加坡直播中心。 播流域名CDN加速选择海外及港澳台加速。 |
方案一:选择新加坡。
加速类型:推流加速。 方案二:选择中国内地直播中心其中的一个。 加速类型:播流加速。 |
解决goChina跨境直播的需求。
新加坡和中国内地线路支持双向配置,所以无论客户域名使用新加坡中心还是中国内地的中心,都支持主播从新加坡进行推流,播放观众大多在中国内地的场景。 若为了兼顾可能仍有少量在海外播放的用户,播流域名CDN加速可选择全球加速。 |
中国内地 | 中国内地+海外及港澳台 |
推流域名和播流域名可以选择中国内地的4个直播中心。
播流域名CDN加速选择全球加速。 |
根据中国内地之外观众所在地,可选择美国、德国、新加坡、中国香港、印尼。
加速类型:播流加速。 |
主播都在中国内地,观众在中国内地、海外及港澳台都有。 需要针对在中国内地之外的观众配置海外链路加速。如果观众在多个国家大区,需要配置多个海外链路加速。 |
海外及港澳台 | 海外及港澳台 |
推流域名和播流域名可以选择日本、新加坡、印尼、印度、德国直播中心。
播流域名CDN加速选择海外及港澳台加速。 |
无需配置。 | 无 |
海外及港澳台 | 中国内地 |
推流域名和播流域名可以选择中国内地的4个直播中心。
播流域名CDN加速选择全球加速。 |
根据主播所在地可选择美国、德国、新加坡、中国香港、印尼。 加速类型:推流加速。 | 其中主播在海外,观众在中国内地的情况,需要配置海外链路加速。 播流域名CDN加速选择全球加速是为了兼顾可能仍有少量在海外播放的用户。 |
视频直播提供了完善的内容安全保护机制,您可以根据不同业务场景的安全需求,选择RAM账号、HTTPS安全加速、访问控制等服务。本文介绍如何保护直播安全。
为保证直播服务配置、直播内容生产、推送和播放全过程的安全性,视频直播提供了完善的内容安全保护机制,可用于保障直播内容不被盗链、非法下载和传播,可以满足不同业务场景的安全需求。
由下图我们可以了解到视频直播丰富的安全手段。
视频直播提供如下安全机制:
安全机制 | 安全手段 | 特点 | 安全等级 | 使用门槛 |
---|---|---|---|---|
账号授权 | RAM用户 | 根据授权策略对RAM用户可授予相应的权限。 | 较低 | 低,仅需云端配置 |
安全加速 | HTTPS安全加速 | HTTPS协议是以安全为目标的HTTP通道,将HTTP用SSL/TLS协议进行封装。 | 高 | 低,仅需云端配置 |
访问控制 | User-Agent黑白名单 | 基于HTTP Header跟踪来源,但极易伪造。 | 低 | 低,仅需云端配置 |
Refer防盗链 | 基于HTTP Header跟踪来源,但极易伪造。 | 低 | 低,仅需云端配置 | |
IP黑白名单 | 拒绝或只允许特定IP访问,不适合大量C端用户的分发。 | 较低 | 低,仅需云端配置 | |
推流播流URL鉴权 | 推流和播放的URL鉴权 | 支持自定义的鉴权Key和鉴权失效时间,动态生成鉴权URL。 | 中 | 较低,提供生成鉴权脚本 |
业务方远程鉴权 | 透传业务请求信息给客户自定义鉴权中心来判断合法性 | 客户添加自定义的业务请求信息,通过自建鉴权中心,更加精准识别合法请求。 | 高 | 较高,需部署鉴权中心,并确保高可用 |
视频安全 | 摩杜云视频加密 | 云端一体的视频加密解决方案,采用私有加密算法对视频流加密,确保视频流安全传输。 | 高 | 较低,简单配置并集成摩杜云播放器即可 |
内容安全 | 智能审核 | 对直播流的视频和音频进行审核,自动检测视频和语音内容是否涉嫌违规。 | 高 | 低,仅需云端配置 |
禁推流 | 支持直播流进行禁止推流的处理,可自定义禁推时间。 | 高 | 低,仅需云端配置 |
背景:由于摩杜云账号AK有完全的权限,一旦泄露风险巨大。
介绍:视频直播会对每一次发起操作请求的用户身份进行验证,通过AccessKey验证该
账号是否拥有相应的权限。视频直播支持对账号进行验证,并提供了系统授权策略,您还可以自定义授权策略。更多信息,请参见
权限管理概述。
背景:HTTP协议以明文方式发送内容,不提供任何方式的数据加密。
介绍:安全超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer,简称
HTTPS),是以安全为目标的HTTP通道。简单来说,HTTPS是HTTP的安全版,即将HTTP用SSL/TLS协议进行封装,
HTTPS的安全基础是SSL/TLS。更多信息,请参见
安全加速。
在云端配置视频直播的访问策略,可以达到基本保护。
主要手段有:
Refer防盗链
基于HTTP协议支持的Referer机制,通过Referer跟踪来源。可配置拒绝访问的Referer黑名单,或仅允许访问的白名单。
User-Agent黑白名单
基于HTTP协议支持的User-Agent请求头跟踪来源,可配置拒绝访问的User-Agent黑名单,或仅允许访问的白名单。
IP黑白名单
您可以通过配置IP黑白名单来实现对访客身份的识别和过滤,从而限制访问视频直播资源的用户,提升Live的安全性。
更多信息,请参见 访问控制。
背景:固定不变的播放地址会导致视频内容被持久的非法扩散传播,且无法有效遏制。
介绍:URL鉴权通过生成动态的加密URL(包含权限验证、过期时效等信息)来区分合法请求,以达到保护视频资源的目的。
开启URL鉴权后:
直播推流URL和直播播流URL都会进行鉴权。
视频直播的播放器SDK、获取播放地址的API/SDK都会自动生成带时效的播放URL。如需要自己生成鉴权的动态URL,则可参见
URL鉴权
中的鉴权方法。
更多信息,请参见
URL鉴权。
背景:目前播放中心鉴权对盗链等非法请求判断较为单一,业务方远程鉴权可以引入客户业务请求的问题,鉴权更加精准。
介绍:业务方远程鉴权是指直播CDN将用户的请求透传到客户的鉴权中心,由客户自己判定该请求是否合法,CDN根据客户的判断结果执行相应动作:允许或拒绝访问。
远程鉴权需要客户自己开发和部署鉴权中心,该鉴权中心的域名如果同时在CDN上加速,可以按照一定规则缓存客户的鉴权结果,以减轻客户鉴权中心的压力。
直播CDN会默认把用户请求的headers和request_uri透传到客户自定义的鉴权中心,并根据鉴权中心返回的结果执行相应的动作。
业务方可将其用户的登录Cookie或UUID等信息隐藏于播放请求中,进而透传到自己的鉴权中心以判定是否为合法用户。
说明 远程鉴权使用门槛较高,需要客户自己开发和部署鉴权中心,如有需求可联系售后进行开通和配置。
背景:防盗链安全机制能有效保障用户的合法访问,但对于付费观看直播的场景,用户只需通过一次付费行为便可拿到视频合法的防盗链播放URL,将视频下载到本地,进而实现二次分发。因此,防盗链方案对于视频版权保护是远远不够的。视频文件一旦泄露,会给付费观看模式造成严重的经济损失。
介绍:摩杜云视频加密是对视频数据加密,即使下载到本地,视频本身也是被加密的,无法二次分发,可有效防止视频泄露和盗链问题。
摩杜云视频加密采用私有的加密算法和安全传输机制,提供云端一体的视频安全方案,核心部分包括加密转码和解密播放。
核心优势:
每个媒体文件拥有独立的加密钥匙,能有效避免采用单一密钥时,一个密钥的泄露引起大范围的安全问题。
提供信封加密机制密文Key+明文Key,仅密文Key入库,明文Key不落存储,所有过程只在内存中,用完即销毁。
提供安全的播放器内核SDK,涵盖iOS、Android、H5、Flash等多平台,自动对加密内容进行解密播放。
播放器和云端使用私有加密协议进行密文传输,不传输明文Key,有效防止密钥被窃取。
提供安全下载,缓存到本地的视频会再次加密,在确保无网离线播放前提下,防止视频被拷贝窃取。
说明
摩杜云视频加密使用限制如下:
仅支持输出HLS格式。
只能使用摩杜云播放器。
暂不支持网页端播放。
更多信息,请参见 摩杜云视频加密。
背景:直播流是由直播的主播生产的,通过直播平台推送给观众,如果不对直播内容进行审核,可能导致有害信息传播,存在内容违规风险。
介绍:摩杜云视频直播基于强大的视频AI能力,提供了智能审核功能,支持视频、音频、图片等全方位的媒体审核。并支持禁止推送违规的直播流。
智能审核:基于海量标注数据和深度学习算法实现,从语音、视觉等多维度精准识别视频、封面、标题等媒体信息中包含的违禁内容。
禁推直播流:针对于推流内容不合规或希望对推流进行封禁的场景,视频直播提供了直播流管理的入口,支持对直播流进行永久禁推和限时禁推。
更多信息,请参见 内容安全
视频直播支持HTTPS安全加速、强制跳转,本文介绍安全加速的原理、优势、使用方法和注意事项。
HTTP协议以明文方式发送内容,不提供任何方式的数据加密。在安全性上,HTTP明文数据很容易在传输过程中的节点设备被截获,由于数据没有加密,很容易理解其含义。
视频直播支持配置HTTPS安全加速以及强制跳转,使用强制跳转需要在已经完成HTTPS证书配置的前提下。
HTTPS:
安全超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer,简称
HTTPS),是以安全为目标的HTTP通道。简单来说,HTTP协议以明文方式发送内容,而HTTPS是HTTP的安全版,将HTTP用SSL/TLS协议进行封装,HTTPS的安全基础是SSL/TLS。
HTTPS提供了身份验证与加密通讯方法,被广泛用于万维网上安全敏感的通讯,根据2017年EFF(Electronic Frontier
Foundation)发布的报告,目前全球已有超过一半的网页端流量采用了加密的HTTPS进行传输。
强制跳转:
将客户端至边缘节点的原请求方式强制重定向为HTTP或者HTTPS。
如果您的加速域名开启了HTTPS安全加速,您可以自定义设置,将终端用户的原请求方式进行强制跳转。例如,您开启HTTP ->
HTTPS后,终端用户发起了一个HTTP请求,服务端返回301重定向响应,原来的HTTP请求强制重定向为HTTPS请求,如下图所示。
在摩杜云视频直播控制台开启的HTTPS协议,将实现客户端和摩杜云视频直播节点之间请求的HTTPS加密。视频直播节点返回从源站获取的资源给客户端时,按照源站的配置方式进行。建议源站配置并开启HTTPS,实现全链路的HTTPS加密。
HTTPS加密流程如下图所示。
1.客户端发起HTTPS请求。
2.服务端生成公钥和私钥(可以自己制作,也可以向专业组织申请)。
3.服务端把相应的公钥证书传送给客户端。
4.客户端解析证书的正确性。
如果证书正确,则会生成一个随机数(密钥),并用公钥随机数进行加密,传输给服务端。
如果证书不正确,则SSL握手失败。
说明
正确性包括:
证书未过期;
发行服务器证书的CA可靠;
发行者证书的公钥能够正确解开服务器证书的发行者的数字签名;
服务器证书上的域名和服务器的实际域名相匹配。
5.服务端用之前的私钥进行解密,得到随机数(密钥)。
6.服务端用密钥对传输的数据进行加密。
7.客户端用密钥对服务端的加密数据进行解密,拿到相应的数据。
传输安全:HTTPS安全传输,有效防止HTTP明文传输中的窃听、篡改、冒充和劫持风险。
信息加密:数据传输过程中对您的关键信息进行加密,防止类似Session ID或者Cookie内容被攻击者捕获造成的敏感信息泄露等安全隐患。
数据完整:数据传输过程中对数据进行完整性校验,防止DNS或内容遭第三方劫持、篡改等中间人攻击(MITM)隐患,详情请参见使用HTTPS防止流量劫持。
HTTPS是主流趋势:未来主流浏览器会将HTTP协议标识为不安全,谷歌浏览器Chrome
70以上版本以及Firefox已经在2018年将HTTP网站标识为不安全,若坚持使用HTTP协议,除了安全会埋下隐患外,终端客户在访问网站时出现的不安全标识,也将影响访问。
主流浏览器对HTTPS网站进行搜索加权,主流浏览器均支持HTTP/2,而支持HTTP/2必须支持HTTPS。无论从安全、市场或用户体验来看,普及HTTPS是未来的一个方向,所以强烈建议您将访问协议升级到HTTPS。
视频直播支持通过控制台和API的方式配置HTTPS安全加速和强制跳转。
控制台:
功能 | 描述 | 参考文档 |
---|---|---|
HTTPS安全加速 |
配置HTTPS证书。
您需要配置HTTPS证书,才能通过HTTPS方式访问资源,实现HTTPS安全加速。更多信息,请参见 证书格式说明。 |
配置HTTPS安全加速 |
强制跳转 |
配置强制跳转类型。
配置强制跳转之前,请确保已成功配置HTTPS证书。 |
强制跳转 |
API:
接口 | 描述 | 参考文档 |
---|---|---|
SetLiveDomainCertificate | 设置某域名下证书功能是否启用及修改证书信息。 | 设置域名证书 |
DescribeLiveCertificateList | 获取证书列表信息。 | 查询证书列表 |
DescribeLiveCertificateDetail | 获取证书详细信息。 | 查询证书信息 |
BatchDeleteLiveDomainConfigs | 批量删除域名配置。 | 批量删除直播域名配置 |
配置 | 说明 |
---|---|
停用和启用HTTPS |
停用后,不支持HTTPS请求且将不再保留证书/私钥信息。
启用后,再次开启证书,需要重新上传证书/私钥 |
上传证书/私钥 |
开启HTTPS安全加速功能的加速域名,须上传证书,包含证书/私钥,均为PEM格式。
说明 直播服务采用的Tengine服务是基于Nginx的,因此只支持Nginx能读取的证书,即PEM格式。 只支持带SNI信息的SSL/TLS握手。 您上传的证书和私钥要匹配,否则会校验出错。 更新证书的生效时间是1小时。 不支持带密码的私钥。 |
查看证书 | 允许用户查看证书,但是只支持查看证书,由于私钥信息敏感不支持私钥查看,请您妥善保管证书相关信息。 |
修改编辑证书 | 支持修改编辑证书,但注意生效时间是1小时,请慎重操作。 |
视频直播支持通过设置Referer黑白名单、User-Agent黑白名单、IP黑白名单进行访问控制,本文介绍视频直播访问控制功能、适用场景和使用方式。
访问控制是在云端配置视频资源的访问策略,达到基本的保护目的,具有使用门槛低(仅云端配置不需要额外开发)、快速生效等优点,主要手段有:
Referer黑白名单
User-Agent黑白名单
IP黑白名单
说明 User-Agent黑白名单,由于配置繁琐且存在误操作风险,暂未开放控制台设置,如有需求可联系摩杜云客服或联系摩杜云售后处理。
访问控制的使用门槛很低,只需简单配置即可使用,能起到一定的保护作用,特别是Web端。
Referer和User-Agent都基于HTTP Header,容易被伪造,安全性低。
IP黑白名单机制,无法实现内容分发给大量C端用户,不适合广泛的内容消费场景。
介绍
基于HTTP协议支持的Referer机制,通过Referer跟踪来源,对来源进行识别和判断,用户可配置访问的Referer黑、白名单来限制视频资源被访问的情况。
访客对资源发起请求后,请求到达CDN节点,节点会根据用户预设的防盗链黑名单或白名单进行过滤:符合规则可顺利请求到视频数据;若不符合,请求会被拒绝,并返回403响应码。
Referer黑白名单是可选配置,默认不启用。
配置后会自动添加泛域名支持。例如填写a.com,最终配置生效的是*.a.com,所有子级域名都会生效。
支持设置是否允许空Referer字段访问资源,即允许通过浏览器地址栏直接访问资源URL。
使用方式
控制台:具体操作请参见 防盗链。
API:通过调用BatchSetLiveDomainConfigs接口,可批量配置直播域名,包括Referer黑白名单。
注意事项
黑、白名单互斥,同一时间您只能选择一种方式。
由于移动端一般拿不到Referer,当前默认支持空Referer访问,可选择关闭。如果设置为不允许空referer访问,在移动端可以配合摩杜云播放器设置referer。
当您设置不允许空Referer访问时,请务必配置HTTPS安全加速,并开启强制跳转HTTPS(HTTP>HTTPS)。部分浏览器处理HTTPS请求HTTP的资源时,会移除Referer,导致无法访问。
示例
当设置播流域名pull.test1.moduyunlive.com的Referer白名单为moduyun.com,且不允许空Referer访问。
i.请求数据:
curl -i 'http://pull.test1.moduyunlive.com/apptest/stream0000'
ii.返回中包含:
X-Tengine-Error:denied by Rererer ACL
iii.当请求带上允许的Referer后即正常返回:
curl -i 'http://pull.test1.moduyunlive.com/apptest/stream0000' \
-H 'Referer: https://www.moduyun.com'
介绍
User-Agent是一个特殊字符串头,帮助服务端识别用户使用的操作系统及版本、CPU类型、浏览器及版本、
浏览器渲染引擎&语言和插件等。可通过User-Agent黑白名单来限制特定浏览器或终端的访问。
使用方式
联系摩杜云售后。
示例
如PC端IE9浏览器:
User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;
可模拟HTTP请求验证:
curl -i 'http:/pull.test1.moduyunlive.com/apptest/stream0000' \
-H 'User-Agent: iPhone OS;MI 5'
介绍
支持配置IP黑名单或白名单,拒绝或只允许特定IP的访问。
添加IP到黑名单,那么该IP无法访问当前加速域名。
添加IP到白名单,那么只有该IP能够访问当前加速域名。
支持IP列表添加,并支持添加IP网段。
例如:网段127.0.0.1/24,24表示采用子网掩码中的前24位为有效位,即用32-24=8bit来表示主机号,该子网可以容纳28-2=254台主机,故可表示IP网段范围:127.0.0.1~127.0.0.255。
使用方式
控制台:具体操作,请参见 IP黑白名单 。
API:通过调用BatchSetLiveDomainConfigs接口,可批量配置直播域名,包括IP黑白名单。
URL鉴权功能旨在保护用户上传到视频直播的内容资源不被非法站点下载盗用,可通过控制台配置。本文介绍URL鉴权、原理和使用方式和注意事项。
一般情况下,通过配置访问Referer黑名单和白名单来实现对访客身份的识别和过滤,保护站点资源,可以解决部分盗链问题。但由于Referer内容可以伪造,采用URL鉴权方式保护用户源站资源更为安全有效。
URL鉴权功能是通过摩杜云视频直播加速节点与客户资源站点配合实现的一种更为安全可靠的源站资源防盗方法。
1.由客户站点提供给用户加密URL(包含权限验证信息,URL组成请参见 鉴权URL
)。
2.用户使用加密后的URL向加速节点发起请求。
3.加速节点对加密URL中的权限信息进行验证以判断请求的合法性,对合法请求给予正常响应,拒绝非法请求,从而有效保护客户站点资源。
说明 您的请求URL经过视频直播鉴权后,URL中的特殊字符(如:=、+等)会被转义。
防止恶意盗用
视频直播的推流端和播流端均提供了地址供用户操作,但该地址为公网地址,即在没有配置安全控制时任何人获知该地址后均可操作。这就导致该地址可能被恶意盗用而导致用户大量计费的情况。
设置过期时间戳
直播域名的跨域文件crmosdomain.xml默认配置的所有域名均可跨域访问(配置如下)。因此,为了对推流、播流地址进行安全限制,您可以通过设置鉴权功能的过期时间戳。
< !--播流域名crmosdomain.xml内容-->
< crmos-domain-policy>
< allow-access-from domain="*"/>
< /crmos-domain-policy>
鉴权URL适用于PC端、移动端、第三方推流和播放工具。
由直播推流地址或播放地址+鉴权串组成,示例如下:
rtmp://DomainName/AppName/StreamName?auth_key=timestamp-rand-uid-md5hash
rtmp://DomainName/AppName/StreamName:直播推流地址或播流地址,更多信息,请参见
推流地址和播放地址。
auth_key=timestamp-rand-uid-md5hash:鉴权串,包含timestamp、rand、uid、md5hash4个字段。
timestamp、rand、uid、md5hash的字段描述如下:
字段 | 描述 |
---|---|
timestamp |
URL时间戳,是此鉴权URL生效的时间。为Unix时间戳,格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
若使用控制台的地址生成器生成:timestamp=生成链接的时间。 若使用控制台的访问控制 > URL鉴权生成:timestamp=生成链接的时间+有效时间。 若使用代码拼接:您可以自己定义timestamp。以Python为例:timestamp = int(time.time()) + 1 * 3600。
说明
timestamp表示鉴权URL生效的时间。
|
rand |
随机数,一般为0。
如要确保每次生成的URL不同, 建议使用UUID格式,不能包含中划线(-),如:477b3bbc253f467b8def6711128c7bec 。 |
uid | 附加参数,暂未使用,一般为0 |
md5hash |
通过md5算法计算出的验证串。数字和小写英文字母混合0~9、a~z,固定长度32。
URI:原始URL,rtmp://DomainName/AppName/StreamName。
PrivateKey:控制台配置的主KEY或副KEY,二者皆可。 md5sum:表示计算MD5值,请使用开发语言对应的函数。 |
当开启URL鉴权功能后,服务器获取请求后会进行如下验证:
1.判断请求中的失效时间(timestamp+有效时长)是否小于当前时间。
如果小于,则认为过期失效并返回HTTP 403错误。
如果大于当前时间,则构造出一个同样的字符串(参见下文sstring构造方式)。
2.使用MD5算法算出HashValue,再和请求中带来的md5hash进行比对。
比对结果一致,则认为鉴权通过,返回直播流。
否则鉴权失败,返回HTTP 403错误。
HashValue是通过以下字符串计算出来的:
sstring = "URI-timestamp-rand-uid-PrivateKey"
HashValue = md5sum(sstring)
示例说明
假设情况:
i.通过req_auth请求对象。rtmp://live.example.com/video/standard
ii.鉴权KEY设置为:moduyunliveexp1234(控制台设置的主KEY或副KEY,由用户自行设置)。
iii.生成鉴权URL时间为:北京时间2021年05月28日16:49:57。
iv.控制台中,鉴权URL设置的有效时长为20分钟,生成鉴权URL时配置的有效时间为40分钟。
v.rand和uid字段都设置为0。
则:
i计算出来的鉴权URL的Unix时间戳为1622194197(北京时间2021年05月28日17:29:57)。
ii服务器会构造一个用于计算Hashvalue的签名字符串。
rtmp://live.example.com/video/standard-1622194197-0-0-moduyunliveexp1234
iii.服务器会根据该签名字符串计算HashValue。
HashValue =
md5sum("rtmp://live.example.com/video/standard-1622194197-0-0-moduyunliveexp1234")
=
5552ff52b5e4e20387c6dc18afce206b
iv.请求时URL为rtmp://live.example.com/video/standard?auth_key=1622194197-0-0-5552ff52b5e4e20387c6dc18afce206b
说明 auth_key即为鉴权URL所带的鉴权信息。
v.计算出来的HashValue与用户请求中带的md5hash = 5552ff52b5e4e20387c6dc18afce206b值一致,于是鉴权通过。
控制台:URL鉴权支持默认鉴权和自定义鉴权两种方式。
默认鉴权:根据控制台中访问控制 > URL鉴权页签的鉴权URL设置区域配置的主KEY、有效时长等,生成推流地址和播放地址。具体操作,请参见
地址生成器。
自定义鉴权:如不采用默认配置,您也可以对鉴权主KEY、副KEY、有效时长进行自定义,并输入原始URL,然后再生成鉴权URL进行推流。具体操作,请参见
配置URL鉴权。
通过代码拼接鉴权URL。
鉴权算法请参见
鉴权URL
,根据推流地址指定的AppName及StreamName得到未鉴权的播流地址,如rtmp:/DomainName/AppName/StreamName;再根据鉴权算法代码实现,填入对应的播流地址计算鉴权URL。
获取鉴权URL的代码示例,请参见
鉴权代码示例。
开启URL鉴权后,只有携带正确鉴权串的播放地址才能播放。
主KEY和副KEY拥有同样的效力,副KEY主要用于平滑更换。
若主KEY执行更换,所有使用主KEY生成的播放地址会立即失效。副KEY作为主KEY更换时,使用主KEY的播放地址不会马上中断,副KEY可以继续替代主KEY提供服务。
设置目标域名下URL地址的全局默认有效时长后,可对单个URL定制有效时长。
说明 此时视频直播会在timestamp后追加设置的默认有效时长。
鉴权功能默认为开启状态,建议您保持默认开启状态,否则会出现直播被盗录、盗播的风险。如果您想要关闭鉴权功能,需要了解盗刷风险并在控制台URL鉴权页面签署《直播服务关闭URL鉴权免责协议》。
鉴权功能默认为开启状态,但是配置鉴权auth_key参数必须需要业务端根据鉴权原理自行实现,暂时没有提供API接口计算鉴权auth_key参数。
开启鉴权后推流或播流地址均需要添加鉴权auth_key参数才可正常播放。暂时不支持仅推流或者播流一个地址开启鉴权的功能。
鉴权URL提供的是过期时间戳的限制,即在该时间段内该地址可以一直访问,不会有任何限制,鉴权还无法实现设置某个URL仅能够一次访问的功能。
鉴权auth_key参数是根据去掉queryString后的URI计算MD5值后拼接得到的,参见前述设置鉴权参数小节。因此,推流和播流地址的URI均为AppName/StreamName;这样会导致推流和播流地址的鉴权auth_key参数其实是一致的。建议用户业务逻辑中如果推流地址有泄漏的情况下设置过期时间戳在业务许可范围内尽量短一些,避免播流地址被恶意访问。
鉴权仅会在推流或者播流开始的时候进行验证,在推流或者播流过程中即不会验证,也就是说推流或者播流过程中如果超过了鉴权时间戳也可以继续播放。
本文为您介绍URL鉴权的代码示例(Python、Java、Go、PHP和C#),您可以根据业务需要,方便的对URL进行鉴权处理。
URL鉴权规则请参见直播鉴权,以下示例包含直播所用的鉴权A方式。
说明
代码示例中的key参数对应控制台中URL鉴权的主KEY或备KEY。可在在直播控制台的域名管理 > 直播管理 > 访问控制 >
URL鉴权页面中的鉴权URL设置模块中配置或查看。
生成推流地址时,key需要使用推流域名的主KEY或备KEY。
生成播放地址时,key需要使用播流域名的主KEY或备KEY。
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AuthDemo {
private static String md5Sum(String src) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
md5.update(StandardCharsets.UTF_8.encode(src));
return String.format("%032x", new BigInteger(1, md5.digest()));
}
private static String aAuth(String uri, String key, long exp) {
String pattern = "^(rtmp://)?([^/?]+)(/[^?]*)?(\\\\?.*)?$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(uri);
String scheme = "", host = "", path = "", args = "";
if (m.find()) {
scheme = m.group(1) == null ? "rtmp://" : m.group(1);
host = m.group(2) == null ? "" : m.group(2);
path = m.group(3) == null ? "/" : m.group(3);
args = m.group(4) == null ? "" : m.group(4);
} else {
System.out.println("NO MATCH");
}
String rand = "0"; // "0" by default, other value is ok
String uid = "0"; // "0" by default, other value is ok
String sString = String.format("%s-%s-%s-%s-%s", path, exp, rand, uid, key);
String hashValue = md5Sum(sString);
String authKey = String.format("%s-%s-%s-%s", exp, rand, uid, hashValue);
if (args.isEmpty()) {
return String.format("%s%s%s%s?auth_key=%s", scheme, host, path, args, authKey);
} else {
return String.format("%s%s%s%s&auth_key=%s", scheme, host, path, args, authKey);
}
}
public static void main(String[] args) {
String uri = "rtmp://play.example.com/live/test"; // original uri
String key = "< input private key>"; // private key of authorization
long exp = System.currentTimeMillis() / 1000 + 1 * 3600; // expiration time: 1 hour after current time
String authUri = aAuth(uri, key, exp); // auth type:
System.out.printf("URL : %s\nAuth: %s", uri, authUri);
}
}
摩杜云视频加密可针对直播流进行加密,本文介绍优势、整体架构和使用方法。
防盗链URL不能防止用户通过一次付费行为拿到付费直播合法的防盗链URL,进而实现二次分发。因此,防盗链方案对于直播的版权保护是远远不够的。
摩杜云视频加密是对视频数据加密,即使下载到本地,视频本身也是被加密的,无法恶意二次分发。视频加密可有效防止视频泄露和盗链问题,广泛用于在线教育、财经金融、行业培训、独播剧等在线版权视频领域。
采用摩杜云私有加密算法,安全级别高,能够便捷、高效、安全地保护视频资源。
每个媒体文件拥有独立的加密钥匙,能有效避免采用单一密钥时,一个密钥的泄露引起大范围的安全问题。
视频直播提供完善的权限管理机制“子账号+播放凭证”。
视频直播提供信封加密机制”密文Key+明文Key”,明文Key不存储,所有过程只在内存中。
视频直播提供安全的播放内核SDK。
摩杜云视频加密方案包含两部分:加密转码+解密播放。
加密转码:流程1~3。
主播推流到直播中心后,直播服务负责通过密钥管理服务KMS生成明文Key和密文Key。通过直播转码服务,使用明文密钥对音视频进行对称加密,并将密文Key存入视频封装。
解密播放:流程4~11。
播放终端如需播放此直播流,需向应用服务器AppServer发起播放请求,获取播流URL。使用播流URL向直播服务请求视频流。直播服务将经过转码的加密视频和密文Key传输到播放器SDK。
播放终端用密文Key向直播服务获取二次加密后的明文Key,直播服务再通过密文Key向密钥管理服务KMS获取明文Key。播放终端将解密得到的明文Key传给播放器SDK,播放器SDK解密视频进行播放。
在密钥管理服务控制台创建密钥并将密钥ID配置到直播转码模板中,使用摩杜云播放器对加密后的视频流进行解密播放。
视频直播暂未开放控制台进行摩杜云视频加密,您可以通过调用AddLiveStreamTranscode接口,配置EncryptParameters参数,
说明
仅支持输出HLS格式。
只能使用摩杜云播放器。
暂不支持网页端播放。
使用视频加密,需要访问KMS服务,需要通过
直播加密服务关联角色
ModuyunServiceRoleForLiveKes获取访问权限。
视频直播提供智能审核服务,来对直播内容的合规进行审核,包括视频审核和语音审核的功能,配合直播流禁推功能,实现直播内容安全。本文介绍智能审核的背景、介绍、使用方法、收费方式和禁推直播流的功能。
内容安全机制是利用智能审核功能对直播内容进行审核,将审核结果返回给运营人员,由运营人员管理相应的直播流,
可对直播流进行禁止推送的操作。视频直播还提供了高频率智能审核的方案供您参考,您可以参见
高频率智能审核方案。
背景
主播推送的直播流可能有内容违规风险,视频直播服务提供了支持视频、音频的智能审核,通过自动化、智能审核媒资库资源,极大降低色情、暴恐、涉政等内容违规风险,降低人工审核成本。
介绍
智能审核服务基于海量标注数据和深度学习算法实现,从语音、视觉等多维度精准识别直播流媒体信息中包含的违禁内容,支持涉黄识别、暴恐涉政识别、广告识别、无意义直播识别、音频审核等多个功能模块。
视频审核:采用截帧画面进行审核,自动检测视频直播的内容是否涉嫌违规,违规的内容将会通过回调的方式返回给用户,用户可对违规内容进行处理。
语音审核:采用识别直播流中音频流的内容,自动检测语音内容是否涉嫌违规,违规的内容将会通过回调的方式返回给用户,用户可对违规内容进行处理。
具体功能如下:
功能名称 | Scene | 描述 | 检测结果分类 |
---|---|---|---|
鉴黄识别 | porn | 识别直播中的色情内容。 | 正常图片、性感图片、色情图片 |
暴恐涉政识别 | terrorism | 识别直播中的暴恐涉政内容。 | 正常图片、血腥、爆炸烟光、特殊装束、特殊标识、武器、涉政、打斗、聚众、游行、车祸现场、旗帜、地标、其他 |
图文违规识别 | ad | 识别直播中的广告信息。 | 正常图片、含其他广告、含牛皮癣广告、含二维码、含小程序码 |
不良场景识别 | live | 识别直播中出现的黑屏、黑边、昏暗画面,画中画,抽烟,打架等不良场景图片。 | 正常图片、无意义图片、画中画、吸烟、车内直播 |
图片logo识别 | logo | 识别直播中出现受管控的logo和商标。 | 正常图片、含受管控的logo、含商标 |
语音审核 | antispam | 检测音频中是否包含垃圾信息、广告、涉政、暴恐、辱骂、色情、灌水、违规、无意义等内容。 | 正常文本、含垃圾信息、广告、涉政、暴恐、辱骂、色情、灌水、违禁、无意义、自定义(例如命中自定义关键词) |
使用方法
前置条件
a.需要开通直播服务,并配置一个有效的直播域名。
b.需要一个HTTP服务用于接收异常视频或语音的回调信息。
使用流程
a.添加智能审核配置。
b.配置回调地址。
c.完成配置后,推流即开启语音审核。
说明 审核只对于配置结束后的新推流生效,对于已有推流不会立刻生效。
控制台
视频审核:支持配置视频审核的审核模板和回调地址,具体操作,请参见
配置审核。
音频审核:不支持。
API
视频审核
接口 | 描述 | 参考文档 |
---|---|---|
AddLiveSnapshotDetectPornConfig | 添加直播视频审核配置。 | 添加直播审核配置 |
DeleteLiveSnapshotDetectPornConfig | 删除直播视频审核配置。 | 删除直播审核配置 |
UpdateLiveSnapshotDetectPornConfig | 更新直播视频审核配置。 | 更新直播审核配置 |
DescribeLiveSnapshotDetectPornConfig | 查询直播视频审核配置。 | 查询直播审核配置 |
AddLiveDetectNotifyConfig | 添加直播视频审核回调配置。 默认格式请参见视频审核默认回调格式说明。 | 添加直播审核回调配置 |
DeleteLiveDetectNotifyConfig | 删除直播视频审核回调配置。 | 删除直播审核回调配置 |
UpdateLiveDetectNotifyConfig | 更新直播视频审核回调配置。 | 更新直播审核回调配置 |
DescribeLiveAudioAuditNotifyConfig | 查询直播视频审核回调配置。 | 查询直播审核回调配置 |
语音审核
接口 | 描述 | 参考文档 |
---|---|---|
AddLiveAudioAuditConfig | 添加直播语音审核配置。 | 添加直播语音审核配置 |
DeleteLiveAudioAuditConfig | 删除直播语音审核配置。 | 删除直播语音审核配置 |
UpdateLiveAudioAuditConfig | 更新直播语音审核配置。 | 更新直播语音审核配置 |
DescribeLiveSnapshotDetectPornConfig | 查询直播语音审核配置。 | 查询直播语音审核配置 |
AddLiveAudioAuditNotifyConfig | 添加直播语音审核回调配置。用户可以根据自己需求自定义回调JSON格式。默认格式请参见语音审核默认回调格式说明。 | 添加直播语音审核回调配置 |
DeleteLiveAudioAuditNotifyConfig | 删除直播语音审核回调配置。 | 删除直播语音审核回调配置 |
UpdateLiveAudioAuditNotifyConfig | 更新直播语音审核回调配置。 | 更新直播语音审核回调配置 |
DescribeLiveAudioAuditNotifyConfig | 查询直播语音审核回调配置。 | 查询直播语音审核回调配置 |
计费规则:智能审核包括直播图片审核和直播语音审核,图片审核以您使用审核服务的图片扫描张数为结算标准,语音审核以您使用语音审核服务的总时长为结算标准。更多信息,请参见 智能审核费用。
视频直播提供了丰富的直播流管理功能,其中禁推直播流功能可帮助您在遇到下列情况的时候,对某路直播推流进行禁止推流的操作。
鉴权推流地址暴露
用户恶意推流
业务需求
使用方法
控制台:支持在控制台查看禁推流、设置禁推流和恢复直播流。您可以在
视频直播控制台
的直播管理页面查看,请参见
流管理。
API
接口 | 描述 | 参考文档 |
---|---|---|
ForbidLiveStream |
禁止某条流的推送。
可以配置是否只断流不加入黑名单,预设某个时刻将流恢复。 说明 禁止直播流的上限为10,000路,超出限制将禁用失败。调用频率限制为20次/秒。 |
禁止直播流 |
ResumeLiveStream |
恢复某条流的推送。
说明 调用频率限制为30次/秒。 |
恢复直播流 |
只会对于有问题的视频内容进行回调通知,通知内容包含问题视频截图的审核信息和存储信息。
{
"DomainName": "yourdomain.com",
"AppName": "appname",
"StreamName": "yourstream",
"MosEndpoint": "mos-cn-hangzhou.moduyuncs.com",
"MosBucket": "xbucket",
"MosObject": "abc.jpg",
"Result": [
{
"BizType": "yourdomain.com",
"Result": [
{"Label": "Porn", "Rate":11, "Suggestion": "review", "Scene":"porn", "Extent": {}},
{"Label": "Ad", "Rate":11, "Suggestion": "review", "Scene":"ad", "Extent": {}}
]
}
]
}
参数说明
参数 | 类型 | 描述 |
---|---|---|
DomainName | String | 播流域名。 |
AppName | String | 应用名称。 |
StreamName | String | 流名称。 |
MosEndpoint | String | 存储对象Endpoint。 |
MosBucket | String | 存储对象的Bucket。 |
MosObject | String | 存储对象的文件名。 |
Result | JSONArray | 检测结果。请参见Result。 |
表 1. Result
参数 | 类型 | 描述 |
---|---|---|
BizType | String | 业务类型。可用于选择模型,默认值为域名。 |
Scene | String |
检测场景
porn:鉴黄。 terrorism:暴恐涉政。 ad:图文违规。 live:不良场景。 logo:图片logo。 |
Label | String |
检测结果的分类。不同检测场景的结果分类不同,具体如下:
图片智能鉴黄(porn)结果分类: normal:正常。 sexy:性感。 porn:色情。 图片暴恐涉政(terrorism)结果分类: normal:正常。 bloody:血腥。 explosion:爆炸烟光。 outfit:特殊装束。 logo:特殊标识。 weapon:武器。 politics:涉政。 violence :打斗。 crowd:聚众。 parade:游行。 carcrash:车祸现场。 flag:旗帜。 location:地标。 others:其他。 图文违规(ad)结果分类: normal:正常。 ad:其他广告。 npx:牛皮癣广告。 qrcode:含二维码。 programCode:含小程序码。 不良场景(live)结果分类: normal:正常。 meaningless:图片中无内容(例如,黑屏、白屏)。 PIP:画中画。 smoking:吸烟。 drivelive:车内直播。 图片logo(logo)结果分类: normal:正常。 TV:含受管控的logo。 trademark:含商标。 |
Rate | Float |
置信度分数。取值范围:0(表示置信度最低)~100(表示置信度最高)。
说明 该值仅作为参考,强烈建议您不要在业务中使用。建议您参考Label结果用于内容违规判定。 |
Extent | String | 预留字段。 |
说明 默认新用户将使用此版本,老用户维持不变,如需使用此版本,请您联系摩杜云客服
只会对于有问题的音频内容进行回调通知,通知内容包含问题语音的文本信息以及最近一分钟内的上下文信息。
{
"domain": "live.abc.com",
"app": "live",
"stream": "5d9747eba39b44769852d276f9ff690c",
"timestamp": 1572248095,
"result": [
{
"scene": "antispam",
"label": "ad",
"suggestion": "block",
"rate": 99.91,
"details": [
{
"startTime": 1572248023,
"endTime": 1572248040,
"text": "丽江陇川等酒店免费居住权120天居住权可与亲友共享来云栖社国际烧酒店接待中心地址芒市团结大街96号邓朝ktv旁咨询热线2285699",
"label": "ad"
},
{
"startTime": 1572248040,
"endTime": 1572248070,
"text": "典藏经典别墅尊享隆多温泉、梁河金塔、温泉旅游小镇二期滨江苑地区11月2号盛大开盘天然龙窝、温泉水入户户型多样,设计经典价位超值,值得您拥有开盘当天还有超值优惠,欢迎您前来品鉴,凭借地址,然和县遮岛镇先锋路229号分享热线069269557776955777",
"label": "normal"
},
{
"startTime": 1572248072,
"endTime": 1572248077,
"text": "快乐的时光,有你相伴惬意的日子,格外轻松。",
"label": "normal"
},
{
"startTime": 1572248078,
"endTime": 1572248086,
"text": "fme043忙里偷闲音乐时光有歌曲温暖,有你想念影院。",
"label": "normal"
}
]
}
]
}
参数 | 类型 | 描述 |
---|---|---|
domain | String | 播流域名。 |
app | String | 应用名称。 |
stream | String | 流名称。 |
timestamp | Int | 回调时间戳。单位:秒。 |
result | JSONArray | 检测结果。请参见Result。 |
表 2. Result
参数 | 类型 | 描述 |
---|---|---|
scene | String | 检测场景。 |
label | String |
检测结果的分类。取值:
normal:正常文本 spam:含垃圾信息 ad:广告 politics:涉政 terrorism:暴恐 abuse:辱骂 porn:色情 flood:灌水 contraband:违禁 meaningless:无意义 customized:自定义(例如命中自定义关键词) |
suggestion | String |
处理建议。取值:
pass:结果正常,无需进行其余操作。 review:结果不确定,需要进行人工审核。 block:结果违规,建议直接删除或者限制公开。 |
rate | Float | 置信度分数。取值范围:0(表示置信度最低)~100(表示置信度最高)。
说明 该值仅作为参考,强烈建议您不要在业务中使用。建议您参考Label结果用于内容违规判定。 |
details | JSONArray | 语音对应的文本详情,每一句文本对应一个元素,可以包含一个或者多个元素。关于每个元素的结构描述,请参见Detail。 |
表 3. Detail
参数 | 类型 | 描述 |
---|---|---|
startTime | Int | 句子开始的时间戳,单位:秒。 |
endTime | Int | 句子结束的时间戳,单位:秒。 |
text | String | 问题语音转换成文本的结果。 |
label | String |
检测结果的分类。取值:
normal:正常文本 spam:含垃圾信息 ad:广告 politics:涉政 terrorism:暴恐 abuse:辱骂 porn:色情 flood:灌水 contraband:违禁 meaningless:无意义 customized:自定义(例如命中自定义关键词) |
本文主要介绍造成视频直播延时的原因及降低延时的解决方法。
推流端
GOP(Group Of
Picture)帧是视频的关键帧,是视频图像编码器和解码器存取的基本单位。直播会将每一帧数据打上时序标签,并进行网络传输。视频的关键帧数量过大会造成直播延时。
多数第三方推流软件为解决卡顿问题会采用增大编码缓存的方法,而编码缓存过大,则会造成直播延时。
由于硬件条件限制,无法满足编码端码率、帧率以及编码的高档位设置需求,造成编码延迟影响直播。
服务端
在视频播放前,为了保证直播秒开以及降低卡顿,会先缓存部分直播数据,这样能保证数据的流畅性,但缓存数据会造成一定的直播延时;在视频播放中,由于网络抖动可能导致数据无法传送到客户端,因此会造成2秒~3秒的延时。
播流端
多数不支持快进的播流端都是在接收缓存收满后才进行解码直播,而这部分接收的缓存会导致直播延时。
您可通过以下配置来降低直播延时:
推流端配置
将GOP帧设置为1秒~2秒,减少播放器加载GOP帧所用的时间来降低直播延时。控制台GOP设置,请参见 自定义转码
;API接口配置,请参见添加直播流自定义转码配置。
由于编码缓存过大引起的直播延时,建议您使用摩杜云推流SDK降低延时。
对于推流设备的使用,推流iOS端建议您使用硬编码,其效率高且省电;Android端因机型复杂,CPU类型众多,采用硬编码可能出现兼容性问题,推流Android端建议您使用软编码。
服务端配置
将服务端缓存调小,来降低直播延时。您可通过控制台进行直播延时配置,根据不同的播流协议来配置延时时间,延时配置越低服务端缓存越小。如下图所示:
说明 将缓存调小后,当网络环境不稳定时,数据无法及时下载,会出现直播卡顿的现象。
选用播流协议
摩杜云提供HTTP-FLV 、HLS、RTMP三种播放协议,您可以根据直播场景选择使用。
HTTP-FLV和RTMP延时较小,适合低延时播放的场景。HLS延迟较大但兼容性好,适合对延时不敏感但需要更多播放终端可以播放的场景。
HTTP-FLV和RTMP需要Flash播放器,HLS可以直接在浏览器中播放。
手机浏览器观看直播视频,仅可使用HLS播流协议。
说明 如果您的播流端使用的是HLS协议,感觉延迟较高,由于HLS协议的延时在10秒~30秒左右为正常现象,您可以将HLS协议换为FLV协议即可解决此问题。
HTTP-FLV、HLS、RTMP协议对比如下表所示:
协议名称 | 协议简介 | 采用的传输协议 | 视频封装格式 | 推荐直播场景 |
---|---|---|---|---|
HTTP-FLV | 由Adobe公司推出,将流媒体数据封装成FLV格式,通过HTTP协议传输给客户端,延时约2秒。支持使用HTTPS加密传输,支持Android移动端和iOS移动端。 | HTTP | FLV、TAG | 降低延时 |
HLS | 由Apple公司推出,基于HTTP的流媒体传输协议。将流媒体数据切成连续的TS分片,每个分片有5秒以上的时长,分片数量一般为3~4个,所以总延迟约10秒~30秒,但流畅性较好。主要应用于iOS设备,提供音视频直播服务和录制内容等服务。 | HTTP | M3U8、TS | 跨终端 |
RTMP | 由Adobe公司推出,传输的过程中消息会被拆分为更小的消息块(Chunk)单元,再将分割后的消息块通过TCP协议传输,接收端再反解接收的消息块恢复成流媒体数据将大文件拆分,因过程复杂可能导致不稳定。在iOS端,需要使用第三方解码器才能播放。 | HTTP | FLV、TAG | 互动式直播 |
如果上述方法仍未帮您降低延时,您可以尝试使用低延时服务RTS(Real-time
Streaming)。RTS具备千万级并发场景下的毫秒级延时直播能力,适用于较大的互动直播场景,弥补了传统直播3秒~6秒延时的问题,保障低延时、低卡顿、秒开流畅的极致直播观看体验。
低时延直播费用
低时延直播费用与标准直播费用不同。具体计费规则,请参见摩杜云产品定价页
开通低延时直播服务
如何开通RTS服务及具体使用方法,请参见使用指南。
本文介绍HTTP消息头的配置方式。
HTTP消息头是指,在超文本传输协议HTTP(Hypertext Transfer
Protocol)的请求和响应消息中,协议头部的组件。HTTP消息头准确描述了正在获取的资源、服务器或客户端的行为。
您可以在
视频直播控制台
的域名管理 页面,选择需要配置的播流域名,单击域名配置,进入直播管理 > HTTP头配置页面,配置HTTP消息头,请参见
配置HTTP消息头。
说明 当您要进行跨域播放时,需要在HTTP消息头配置时, 找到Access-Control-Allow-Origin,并配置为*或需要访问的完整域名, 例如www.moduyun.com。需要注意的是,跨域配置仅支持配置为*或单个域名,如需多域名跨域访问请配置为*。
直播转码可以解决推流端码率较高或较低而导致播放效果不好等问题。通过阅读本文,您可以快速了解直播转码的使用场景、使用限制、转码功能、模板参数、转码规则和宽度自适应等功能。
当推流端码率较高而客户端带宽资源有限会导致视频播放卡顿;当推流端码率较低时会导致视频播放效果不好。使用直播转码服务可以快速帮您解决这些问题。
播放器插件需要实现多码率切换。前端播放器插件设置码率切换,需要同一路推流同时提供多种码率的播流地址。视频直播的实时转码功能能为同一路推流同时提供多种码率的播流地址服务。
使用H.264编码进行推流,实时转码成H.265编码直播流进行播放,可以降低带宽。
使用H.265编码进行推流,实时转码成低码率H.265编码的直播流进行播放。
为了解决H.265在浏览器不兼容问题需要实时转码成H.264编码的直播流进行播放。
标准模板和窄带高清TM模板不可同时使用,每个域名+AppName下仅支持使用一种转码模板类型。
每个域名下最多支持10路转码并发流,也就是一个域名下最多同时10路转码流输出,如果一路HD高清分辨率直播流输入,同时转码成SD(标清)和LD(流畅)分辨率进行输出播放,算2路转码流。
当提供的直播服务不能满足您当前业务需求时,请您摩杜云客服与我们联系并详述您的需求,或联系您的客服经理。
转码模版支持通用模版、自定义模版、RTS转码模板和多码率转码模板(部分直播中心)。
通用模版中的模版为系统预设模版包括转码模版的ID和转码输出分辨率。转码输出的码率都是系统预设置不支持修改。如果通用模版不能满足您的要求,您可以使用自定义模版或RTS转码模板,自定义转码模版支持编码格式、分辨率、码率、帧率、视频GOP、触发转码、转码模版ID的设置。
通用转码和自定义转码分别提供标准模板和窄带高清TM模板。RTS转码在标准模板和窄带高清TM模板基础上提供RTS低延迟播放SDK所需的B帧和OPUS参数设置。
通用转码
标准模板
模板名称 | 模板ID | 分辨率(高、宽自适应) | 码率(Kbps) |
---|---|---|---|
流畅 | lld | 360 | 460 |
标清 | lsd | 432 | 640 |
高清 | lhd | 648 | 1200 |
超清 | lud | 1080 | 2100 |
窄带高清 TM模板
模板名称 | 模板ID | 分辨率(高、宽自适应) | 码率(Kbps) |
---|---|---|---|
流畅 | ld | 360 | ≤420 |
标清 | sd | 432 | ≤580 |
高清 | hd | 648 | ≤1100 |
超清 | ud | 1080 | ≤1900 |
自定义转码
自定义转码的模板参数由用户自行定义。
说明 自定义转码中窄带高清TM模板暂不支持选择H.265编码格式,如果您需要,请您联系我们。
RTS转码
RTS转码的模板参数由用户自行定义。
多码率转码
多码率转码的模板参数由用户自行定义。仅支持新加坡、日本、印尼直播中心的播流域名。
转码配置
转码配置可以使用以下两种配置方式:
控制台配置:
具体操作,请参见
通用转码、
自定义转码、
RTS转码、
多码率转码。
API和SDK配置:
API和SDK提供以下接口供用户使用:
添加转码配置
删除转码配置
查询直播流转码配置
Java SDK添加转码配置的代码示例如下:
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou","< AccessKeyId>", "< AccessKeyScret>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveStreamTranscodeRequest addLiveStreamTranscodeRequest = new AddLiveStreamTranscodeRequest();
addLiveStreamTranscodeRequest.setDomain("< DomainName>");
addLiveStreamTranscodeRequest.setApp("< AppName>");
addLiveStreamTranscodeRequest.setTemplate("hd");
addLiveStreamTranscodeRequest.setSnapshot("no");
addLiveStreamTranscodeRequest.setRecord("no");
try {
AddLiveStreamTranscodeResponse addLiveStreamTranscodeResponse = client.getAcsResponse(addLiveStreamTranscodeRequest);
System.out.println(addLiveStreamTranscodeResponse.getRequestId());
// todo something.
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
说明 如果更改转码配置,需要进行重新推流后配置才可生效。
转码使用
转码配置重新推流后提供多种码率的多条直播地址。您可以登录 视频直播控制台,选择直播管理 >
流管理,在对应的推流记录中查看直播地址。其中原画(Original)即原始码率地址,自定义转码即直播转码后的地址,
您可在播流地址上单击复制获取直播地址或单击播放直接播放。如果您需要在业务端代码中使用该地址,可直接在原始码率的StreamName后添加转码流。
视频直播支持延时转码,系统监测到某一路直播流无人观看时,不会执行转码。检测到有人观看后启动转码,转码过程中5分钟内检测到无人观看即会停止转码。
每一路流仅执行一次转码。
转码不是必须服务,可按需配置。
转码目前支持FLV、RTMP、HLS、RTS格式。
转码采用宽度自适应的算法,根据转码后视频的高度自适应转码后视频的宽度。
直播时移可以回看从直播开始时间到当前时间之间的直播视频。本文详细介绍了直播时移原理及相关配置参数信息。
直播时移基于常规的HLS视频直播,直播推流被切分成TS分片,通过HLS协议向播放用户分发, 用户请求的M3U8播放文件中包含不断刷新的TS分片地址;对于常规的HLS直播而言,TS分片地址及相应的TS文件无法保存, 导致当前时间之前的直播视频内容无法回溯;开通直播时移功能后, TS分片地址及相应TS文件会分别在数据库和MOS中最长保存30天,可以回溯从直播开始时间到当前时间之间的视频。
直播时移功能可以在
视频直播控制台
配置。具体操作,请参见 直播时移 。
直播时移最大支持直播观看人数为10万人,如果需要支持更多人观看,请您摩杜云客服申请。
HLS直播地址为:http://domain/app/stream.m3u8,实现时移播放需在此直播地址上追加时移相关参数。
说明 通过CDN调用时移请求时必须携带moduyunols参数。
Key格式:lhs_{type}_{format}_{unit}_{zone}。参数名由4个变量组成,前缀固定为lhs_,变量之间用下划线 (_)隔开。具体参数信息,请参见下表:
名称 | 描述 |
---|---|
type |
时间的类型。取值:
start:开始时间。 end:直播结束时间。 vodend:点播结束时间。 说明 设置vodend表示使用点播模式回看, 一次返回指定时间段内所有的ts,包含endlist标签。 offset:向前偏移的时间。 |
format |
时间格式。取值:
unix:时间戳。 human:年月日时分秒。示例:20170809230130。 |
unit |
时间单位。取值:
s:秒。 ms:毫秒。 us:微秒。 ns:纳秒。 |
zone |
时区。取值:{0-9}。
数字为东*区。 0则为UTC时间。 8为中国时区。 说明 当format取值为unix时,zone取值为0。 |
示例:
lhs_start_human_s_8=20170809200010
lhs_start_unix_s_0=1502280113
lhs_offset_unix_ms_0=1800000(向前时移30分钟)
请求示例:
http://example.com/live/channel1.m3u8?moduyunols=on&lhs_start_human_s_8=20171024160220&lhs_end_human_s_8=20171024160420
您可以在
视频直播控制台
中查询指定域名可时移的时间和数据量。更多详情,请参见
用量查询。
您也可以通过以下参数配置查询。详细参数信息,参见下表:
名称 | 描述 |
---|---|
url | http://{$domain}/openapi/timeline/query,{$domain}需使用您的播流域名。 |
method | GET |
params |
moduyunols(required):on。
app(required):app。 stream(required):流名。 format(required):指定查询TS或FLV格式的时移数据。 lhs_start_unix_s_0(required):开始时间的时间戳。单位:秒(s)。 lhs_end_unix_s_0(required):结束时间的时间戳。单位:秒(s)。 说明 如果您开启了CDN的鉴权,需要加上对应的鉴权参数。 |
response(JSON格式) |
current:表示当前系统时间,播放器可以基于这个字段对时。
timeline:一个数组,数组的元素是一个map,表示一段有效的时移时间段,包含如下字段。 timeline[i].start:有效片段的开始时间戳。单位:秒(s)。 timeline[i].end:有效片段的结束时间戳。单位:秒(s)。 示例如下:
|
示例:
http://example.com/openapi/timeline/query?moduyunols=on&app=bbb&stream=cc&format=ts&lhs_end_unix_s_0=1513334270&lhs_start_unix_s_0=1513334255
带鉴权的示例:
http://example.com/openapi/timeline/query?auth_key=1606204918-0-0-3e898a5f491fedb113d17aad7c091dde&moduyunols=on&app=zzb-test&stream=zzb-shiyi&format=ts&lhs_start_unix_s_0=1606200900&lhs_end_unix_s_0=1606202520
鉴权可以由直播控制台生成或通过代码自行拼接:
登录
视频直播控制台
,选择访问控制 > URL鉴权,生成签权地址后再拼接时移参数。
视频直播支持通过代码自行拼接带鉴权的URL。更多详情,请参见
鉴权代码示例。
视频直播录制可对当前直播实时录制并可回放历史直播视频。本文将详细为您介绍视频直播录制功能。
直播录制提供了录制直播内容、录制索引管理、录制文件管理、录制事件回调的功能。
录制直播内容
使用场景
视频直播是通过播放地址以实时流的形式播放推流端的数据,如果想要在直播结束后再次观看或修改直播内容,就必须要使用视频直播的录制功能。
功能介绍
视频直播录制功能,就是将直播中心接收到的推流数据进行录制,将录制后的数据以HLS协议的封装格式,保存至您指定的存储位置。支持M3U8(同时会有.ts分片文件)、MP4、FLV格式。
直播录制支持将直播内容录制至VOD或MOS。录制到VOD可以联动使用VOD的云剪辑、媒资管理、播控管理等能力。
使用方法
请参见 直播录制使用方法。
录制索引管理
说明 您只有将视频存储在MOS中才可使用录制索引功能。
使用场景
视频直播录制在直播过程中会生成TS文件,但是仅在推流结束180秒后才会生成m3u8索引文件,无法在直播过程中生成,并且该索引文件时间为推流开始到结束,用户无法根据业务需要自定义索引范围。因此,视频直播提供录制索引管理功能,供用户对录制索引m3u8文件进行管理。
功能介绍
在一次推流结束时,会自动生成本次推流的录制索引文件。同时支持按照指定的录制开始时间和录制结束时间生成自定义录制索引文件。录制索引功能包括查看录制索引和剪辑录制索引两项功能。
查看录制索引:用户可以查看已有的录制索引文件,这里的索引文件包括系统在断流180秒后自动生成的索引文件,以及用户手动创建的索引文件。
剪辑录制索引:用户可以根据现有的录制索引文件进行剪辑,产生新的索引文件,这里的索引文件可以是对之前已有的索引文件进行合并或者拆分。
使用方法
请参见 录制索引管理方法。
录制文件管理
功能介绍
查看和管理录制文件
过期删除录制文件
设置过期时间,超过配置的过期时间后,录制文件即可自动删除。
说明 此功能默认不向用户开放,添加ModuyunMTSVideoLifecycleRolePolicy授权后,再提交工单申请。
使用方法
请参见 录制文件管理方法。
录制事件回调
功能介绍
直播录制回调包括录制状态回调、文件生成回调。
录制状态回调:在文件开始录制与结束录制时发出,主要表示文件已经开始和结束录制。
文件生成回调:在文件生成时发出,主要包括文件名称,开始结束时间与时长信息。
使用方法
请参见 直播录制回调。
直播录制是针对推流的AppName为粒度设置的。您可以设置某个AppName下的所有StreamName的录制规则。 并且AppName取值为星号(*)时 ,表示此录制规则适用于该直播域名下的所有推流。推流的AppName需要和配置的AppName相同。也可以针对单路流进行录制。
说明 同时配置了AppName级别的录制和单路流录制,单路流录制配置的优先级更高。
录制设置仅会对配置完成后的新发起的推流记录生效,当前的推流需中断180秒后重新推流方可生效。
录制至VOD时,生成的M3U8和TS文件都存放在视频点播的输入媒体Bucket中。更多详情。请参见添加媒体Bucket。
如果使用录制至MOS,您需要事先创建好MOS Bucket。MOS Bucket必须与域名的直播中心同地域,不支持跨地域录制。
相同的AppName和StreamName不能同时存储至VOD和MOS。
录制至… | 使用流程 | 控制台操作 | API操作 |
---|---|---|---|
录制至VOD | 准备工作:开通点播服务 | 开始使用视频点播 | 不涉及 |
录制配置:
1.创建直播转点播录制模板。 2.在点播服务中创建存储规则。 |
1. 录制存储至VOD
2.视频点播转码配置 |
AddLiveRecordVodConfig | |
使用点播功能进行云剪辑、媒资管理、播控等操作。 | 控制台介绍 | API概览 | |
录制至MOS |
准备工作:完成MOS配置。
1.创建MOS Bucket。 2.配置直播写入MOS权限。 3.配置CDN域名。 |
配置MOS | 不涉及 |
录制配置:
配置录制信息。
说明
如果需要默认录制转码流,请联系摩杜云客服,让售后开启转码流录制,
并提供需要录制的转码后缀等信息。注意不能通过添加录制配置接口配置转码
流的录制,StreamName可以不指定或指定源视频流,不能带转码后缀。
|
录制存储至MOS | AddLiveAppRecordConfig |
以下为使用Java SDK添加App录制配置的示例代码:
IClientProfile profile = DefaultProfile.getProfile("cn-shagnhai","< AccessKeyId>", "< AccessKeyScret>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveAppRecordConfigRequest addLiveAppRecordConfigRequest = new AddLiveAppRecordConfigRequest();
addLiveAppRecordConfigRequest.setDomainName("< DomainName>");
addLiveAppRecordConfigRequest.setAppName("< AppName>");
addLiveAppRecordConfigRequest.setMosEndpoint("< Endpoint>");
addLiveAppRecordConfigRequest.setMosBucket("< BucketName>");
addLiveAppRecordConfigRequest.setMosObjectPrefix("< ObjectPrefix>");
try {
AddLiveAppRecordConfigResponse addLiveAppRecordConfigResponse = client.getAcsResponse(addLiveAppRecordConfigRequest);
System.out.println(addLiveAppRecordConfigResponse.getRequestId());
// todo something.
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
功能 | 控制台操作 | API操作 |
---|---|---|
查看录制索引 | 在 视频直播控制台 的直播管理 > 录制文件管理页面,单击存储至MOS页签查看。 这里的索引文件包括系统在断流180秒后自动生成的索引文件,以及用户手动创建的索引文件。 |
查询单个录制索引文件:DescribeLiveStreamRecordIndexFile。
查询某个时间段内的所有录制索引文件:DescribeLiveStreamRecordIndexFiles。 |
剪辑录制索引 | 剪辑录制索引文件 | CreateLiveStreamRecordIndexFiles |
查看和管理录制文件:您可以在控制台进行查看和管理录制文件的操作。
录制至VOD
在视频直播控制台查看和管理,请参见录制文件管理。
在视频点播控制台查看和管理
a.登录视频点播控制台,在左侧导航栏选择媒资库 > 音/视频。
b.选择您存至VOD的录制视频,并单击右侧的管理。
c.在基础信息页签中,您可以查看或修改视频的标题、描述、分类、标签、封面等信息。信息编辑完成后,点击保存完成配置。
录制至MOS
在视频直播控制台查看和管理,请参见 录制文件管理。
在MOS控制台查看和管理:录制文件按照规则存储在MOS中,您可在MOS控制台中找到存储视频文件夹,并获取视频的播放地址。
a.登录MOS控制台,在左侧Bucket列表中,选择您存储录制视频的Bucket。
b.单击文件管理,选择存储录制视频的文件夹名称。
视频完整的文件存储在record/{AppName}/{StreamName}下,与TS切片文件存储在一个文件夹中。
c.选择您想要查看的录制视频,并单击右侧的详情即可获得录制视频的播放地址。
API和SDK提供DescribeLiveStreamRecordContent接口查询直播录制内容。
说明 存储在MOS Bucket的录制文件,可以使用MOS的API进行生命周期管理。
过期删除录制文件:您需要按照如下步骤添加一个授权后,再联系摩杜云客服申请。
1.登录访问控制 RAM 控制台
2.在左侧导航栏选择RAM角色管理。
3.单击创建RAM角色,当前可信实体类型选择摩杜云服务,单击下一步。
4.在配置角色页签:
角色类型:选择普通服务角色;
角色名称:填写ModuyunMTSVideoLifecycleRole(请您务必保持名称一致);
选择受信服务:选择多媒体转码服务。
单击完成。
5.在创建完成页签单击精准授权。
6.在添加权限页签,添加权限
权限类型:选择系统策略;
输入策略名称:输入ModuyunMTSVideoLifecycleRolePolicy。
单击确定。
7.请您联系摩杜云客服。我们会在后台为您配置您需要的过期时间。配置过期时间后,录制文件过期删除功能授权操作即为完成。
直播截图提供实时截图功能,满足您在观看直播同时的截图需求。本文详细为您介绍视频直播截图功能。
视频直播截图功能需要将截图文件存放在媒体Bucket中,因此需要开通MOS服务并且将Bucket设置为媒体Bucket。更多详情,请参见开通MOS服务和添加媒体Bucket。
配置截图模版后,需要重新推流才生效;新配置的截图模版对正在进行的直播流不生效。
直播截图是针对推流的AppName为粒度设置的。您可以设置某个AppName下的所有StreamName的截图规则。当AppName取值为星号(*)时
,表示此截图规则适用于该直播域名下的所有推流。推流的AppName需要和配置的AppName相同。
直播截图功能配置时,ObjectName可以定义为覆盖截图和实时截图两种类型。
覆盖截图是每次新生成截图覆盖之前生成的截图文件。
实时截图是每次新生成的截图不覆盖之前生成的截图文件,截图递增存储。截图文件使用{Sequence}区分,{Sequence}通过1,2,……,n的方式表示。
目前直播截图仅支持生成JPG格式。
使用API和SDK配置截图时,OverwriteMosObject参数和SequenceMosObject参数必须配置其中之一,暂无默认值设置。
视频截图功能配置
配置视频直播截图功能可以通过以下两种方法:
通过控制台配置。具体操作,请参见 配置截图。
通过API和SDK配置。API和SDK提供了以下截图配置接口:
添加直播截图配置
查询直播截图配置
更新直播截图配置
以下为Java SDK添加截图配置的示例代码:
IClientProfile profile = DefaultProfile.getProfile("cn-shanghai","< AccessKeyId>", "< AccessKeySecret>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveAppSnapshotConfigRequest addLiveAppSnapshotConfigRequest = new AddLiveAppSnapshotConfigRequest();
addLiveAppSnapshotConfigRequest.setDomainName("< DomainName>");
addLiveAppSnapshotConfigRequest.setAppName("< AppName>");
addLiveAppSnapshotConfigRequest.setTimeInterval(5);
addLiveAppSnapshotConfigRequest.setMosEndpoint("< Endpoint>");
addLiveAppSnapshotConfigRequest.setMosBucket("< BucketName>");
addLiveAppSnapshotConfigRequest.setOverwriteMosObject("{AppName}/{StreamName}.jpg");
try {
AddLiveAppSnapshotConfigResponse addLiveAppSnapshotConfigResponse = client.getAcsResponse(addLiveAppSnapshotConfigRequest);
System.out.println(addLiveAppSnapshotConfigResponse.getRequestId());
// todo something.
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
视频截图管理
截图配置完成后通过新发起的推流生成截图,查看截图的方法包括以下两种:
您可以在 视频直播控制台 和MOS控制台中查看截图文件。
截图文件存储在MOS的Bucket中,可以通过MOS Bucket管理视频截图。更多详情,请参见 截图管理。
说明 您只有在MOS控制台才能删除截图。
API和SDK提供查询截图信息的接口。更多详情,请参见 查询截图内容。
摩杜云视频直播为您提供云端合流服务,本文介绍云端合流的功能特性和使用方法,云端合流还提供了开发者服务,您可以加入钉钉群咨询相关问题。
您可以调用开放接口,通过直播中心的合流服务器拉取多个视频源,依靠云端强大的处理能力将多路视频源按照您设置的布局进行合流,合成一路直播流后,通过边缘加速分发给观众观看。
说明
云端合流目前处于公测阶段。无需开通即可使用,且暂不收费。
每个UID下并发合流任务上限为10路,如需扩充请 联系摩杜云客服 申请。
云端合流目前仅支持华北2和华东2地区。
功能 | 描述 | 特性 |
---|---|---|
多路合流 | 将多路视频源推至直播中心,合流为一路直播流。 |
支持添加RTMP、FLV、HLS和RTS(udp)协议的直播流。
支持添加文件流。 最多添加8个视频源。 |
预设布局 | 提供预设的合成直播流画面布局,满足不同场景下的直播。 | 提供7种预设布局,布局请参见 合流预设布局参考。 |
自定布局 | 根据需要,添加自定义合成后直播流的布局。 | 支持设置窗格个数、尺寸和位置。 |
合流输出 | 将合流的多路视频源以直播流的形式输出。 | 支持自定义合流输出域名,可用该域名观看合流后的内容。 |
合流查询 | 查询当前合流任务列表及相应配置信息。 | 支持实时查询。 |
合流更新 | 在合流观看过程中更新视频源、合流布局, | 且无缝切换。 不支持更新输出分辨率等内容。 |
自动删除 | 自动删除合流任务。 |
支持在创建合流任务时设定自动删除时间,到期合流任务自动删除以节省流量,默认为7天。
说明 在合流创建成功后不可再修改。 |
合流回调 | 合流任务状态回调。 | 支持在创建合流时向您的回调地址发送创建成功或创建失败的消息,以便让您及时获取合流任务创建的结果。 |
视频直播支持通过调用API接口的方式,使用云端合流服务,包括创建合流、更新合流、查询合流和删除合流。调用次序如下:
具体调用方法和参数请参见如下API文档:
场景 | 描述 | 接口 | 代码示例 |
---|---|---|---|
创建合流(预设布局) |
使用预设布局模板创建合流。
以MixStreamLayout-2-1模板为例,最终效果为:
![]() |
CreateMixStream
传入输入源配置(个数、类型、地址、叠加顺序、尺寸、位置、填充方式)。 传入合流播放地址(域名、Appname、Streamname)。 传入合流输出分辨率。 |
以MixStreamLayout-2-1模板为例,代码示例请参见创建合流任务(使用预设布局)。 |
创建合流(自定布局) |
使用自定义布局创建合流。
以两路输入流为例,最终效果为:
![]() |
CreateMixStream 传入输入源配置(个数、类型、地址、叠加顺序、尺寸、位置、填充方式)。 传入合流播放地址(域名、Appname、Streamname)。 传入合流输出分辨率。 | 以两路输入流为例,代码示例请参见创建合流任务(自定义布局)。 |
更新合流 | 更新合流的视频源或布局。 |
UpdateMixStream
传入输入源配置(个数、类型、地址、叠加顺序、尺寸、位置、填充方式)。
说明
UpdateMixStream的参数为全量参数,调用时需要传入更新后的全量配置。
|
使用自定义布局更新合流,代码示例请参见更新合流任务。 |
查询合流 | 查询在线合流列表和相关配置。 | DescribeMixStreamList 返回在线合流列表。 返回合流配置。 返回合流创建时间、修改时间。 返回合流播放地址。 | 查询合流任务。 |
删除合流 | 当您不需要使用某条合流后,请删除此条合流,否则合流将一直处于输出状态。 | DeleteMixStream | 删除合流任务。 |
云端合流提供了7种预设布局,本文介绍预设布局的布局参数和样式。
云端合流为您提供7种预设布局以满足不同直播场景,使用时传入相应布局ID即可,无需额外配置。具体布局样式如下:
说明
FillSizeNormalized:表示该Layer元素需要填充的尺寸大小。
[w,h]:w、h取值范围[0~1]。其中宽高都是进行了归一化计算。
例如:[0.2,0.3]代表水平占比20%,垂直占比30%。
FillPositionNormalized:表示该Layer元素填充区位置归一化值。
[x,y]:x、y的取值范围[0~1]。
例如:[0.1,0.1]代表左上角水平偏移10%, 垂直偏移10%。
布局ID | 描述 | 布局方格对应ID | 样式 |
---|---|---|---|
MixStreamLayout-1-1 |
1路视频源。布局参数如下:
FillSizeNormalized:[1,1] FillPositionNormalized:[0,0] |
![]() |
![]() |
MixStreamLayout-2-1 |
2路视频源。布局参数如下:
第1路: FillSizeNormalized:[0.5,1] FillPositionNormalized:[0,0] 第2路: FillSizeNormalized:[0.5,1] FillPositionNormalized:[0.5,0] |
![]() |
![]() |
MixStreamLayout-2-2 |
2路视频源。布局参数如下:
第1路: FillSizeNormalized:[1,1] FillPositionNormalized:[0,0] 第2路: FillSizeNormalized:[0.25,0.25] FillPositionNormalized:[0.7,0.7] |
![]() |
![]() |
MixStreamLayout-2-3 |
2路视频源。布局参数如下:
第1路: FillSizeNormalized:[1,1] FillPositionNormalized:[0,0] 第2路: FillSizeNormalized:[0.25,0.25] FillPositionNormalized:[0.7,0.05] |
![]() |
![]() |
MixStreamLayout-3-1 |
3路视频源。布局参数如下:
第1路: FillSizeNormalized:[1,1] FillPositionNormalized:[0,0] 第2路: FillSizeNormalized:[0.5,0.5] FillPositionNormalized:[0,0.5] 第3路: FillSizeNormalized:[0.5,0.5] FillPositionNormalized:[0.5,0.5] |
![]() |
![]() |
MixStreamLayout-3-2 |
3路视频源。布局参数如下:
第1路: FillSizeNormalized:[1,1] FillPositionNormalized:[0,0] 第2路: FillSizeNormalized:[0.3,0.3] FillPositionNormalized:[0.1,0.6] 第3路: FillSizeNormalized:[0.3,0.3] FillPositionNormalized:[0.6,0.6] |
![]() |
![]() |
MixStreamLayout-4-1 |
4路视频源。布局参数如下:
第1路: FillSizeNormalized:[0.5,0.5] FillPositionNormalized:[0,0] 第2路: FillSizeNormalized:[0.5,0.5] FillPositionNormalized:[0.5,0] 第3路: FillSizeNormalized:[0.5,0.5] FillPositionNormalized:[0,0.5] 第4路: FillSizeNormalized:[0.5,0.5] FillPositionNormalized:[0.5,0.5] |
![]() |
![]() |
本文提供合流服务调用代码示例。
1.引入摩杜云核心SDK。
准确的SDK版本号,请参见摩杜云开发工具包(SDK)。
< dependencies>
< dependency>
< groupId>com.moduyun< /groupId>
< artifactId>moduyun-java-sdk-core< /artifactId>
< version>4.5.17< /version>
< /dependency>
< /dependencies>
2.引入摩杜云视频直播SDK。
< dependencies>
< dependency>
< groupId>com.moduyun< /groupId>
< artifactId>moduyun-java-sdk-live< /artifactId>
< version>3.9.4< /version>
< /dependency>
< /dependencies>
3.初始化Client。
SDK通过IAcsClient的instance来完成openAPI的调用。因此,在您发起调用前,请先初始化IAcsClient实例。
public void init() throws ClientException {
DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
client = new DefaultAcsClient(profile);
}
public void createDefault() throws ClientException {
CreateMixStreamRequest createMixStreamRequest = new CreateMixStreamRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
createMixStreamRequest.setDomainName("your domain name");
// 设置预设的layoutId,以"MixStreamLayout-2-1"为例
createMixStreamRequest.setLayoutId("MixStreamLayout-2-1");
// 设置输出配置
JSONObject outputConfig = new JSONObject();
outputConfig.put("AppName", "your app name"); // AppName
outputConfig.put("StreamName", "your stream name"); // StreamName
outputConfig.put("MixStreamTemplate", "lp_ld"); // 合流输出规格模板
String outputConfigStr = outputConfig.toJSONString();
createMixStreamRequest.setOutputConfig(outputConfigStr);
// 初始化输入流
JSONArray inputStreamList = new JSONArray();
// 构建输入流A
JSONObject inputStreamA = new JSONObject();
inputStreamA.put("LayoutChildId", 1); // 布局id,注意:一定要从1开始,并且所有id要连续
inputStreamA.put("ResourceType", "url"); // 资源类型: url 或 live
inputStreamA.put("ResourceValue", "your resource value"); // 资源地址
inputStreamList.add(inputStream);
// 构建输入流B(方法同A)
JSONObject inputStreamB = new JSONObject();
inputStreamB.put("LayoutChildId", 2);
inputStreamB.put("ResourceType", "url");
inputStreamB.put("ResourceValue", "your resource value");
inputStreamList.add(inputStreamB);
// 设置输入流
String inputStreamListStr = inputStreamList.toJSONString();
createMixStreamRequest.setInputStreamList(inputStreamListStr);
// 发起openapi请求
CreateMixStreamResponse createMixStreamResponse = client.getAcsResponse(createMixStreamRequest);
// 打印合流id
String mixStreamId = createMixStreamResponse.getMixStreamId();
System.out.println(mixStreamId);
}
public void createMixStream() throws ClientException {
CreateMixStreamRequest createMixStreamRequest = new CreateMixStreamRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
createMixStreamRequest.setDomainName("your domain name");
// 设置布局id,自定义布局填写"USERDEFINED"
createMixStreamRequest.setLayoutId("USERDEFINED");
// 设置输出配置
JSONObject outputConfig = new JSONObject();
outputConfig.put("AppName", "your app name"); // AppName
outputConfig.put("StreamName", "your stream name"); // StreamName
outputConfig.put("MixStreamTemplate", "lp_ld"); // 合流输出规格模板
String outputConfigStr = outputConfig.toJSONString();
createMixStreamRequest.setOutputConfig(outputConfigStr);
// 初始化输入流
JSONArray inputStreamList = new JSONArray();
// 构建输入流A
JSONObject inputStreamA = new JSONObject();
JSONObject layoutConfigA = new JSONObject(); // 自定义布局配置设置
Float[] fillPositionNormalizedA = new Float[]{0f, 0f}; // 位置坐标
Float[] fillSizeNormalizedA = new Float[]{1f, 1f}; // 大小归一化值
layoutConfigA.put("FillMode", "fit");
layoutConfigA.put("PositionRefer", "topLeft");
layoutConfigA.put("FillPositionNormalized", fillPositionNormalizedA);
layoutConfigA.put("FillSizeNormalized", fillSizeNormalizedA);
inputStreamA.put("LayoutChildId", 1); // 布局id,注意:一定要从1开始,并且所有id要连续
inputStreamA.put("ResourceType", "url"); // 资源类型: url 或 live
inputStreamA.put("ResourceValue", "your resource value"); // 资源地址
inputStreamA.put("LayoutConfig", layoutConfigA); // 设置自定义的布局配置
inputStreamList.add(inputStreamA);
// 构建输入流B(方法同A)
JSONObject inputStreamB = new JSONObject();
JSONObject layoutConfigB = new JSONObject();
Float[] fillPositionNormalizedB = new Float[]{0.7f, 0.03f};
Float[] fillSizeNormalizedB = new Float[]{0.25f, 0.25f};
layoutConfigB.put("FillMode", "fit");
layoutConfigB.put("PositionRefer", "topLeft");
layoutConfigB.put("FillPositionNormalized", fillPositionNormalizedB);
layoutConfigB.put("FillSizeNormalized", fillSizeNormalizedB);
inputStreamB.put("LayoutChildId", 2);
inputStreamB.put("ResourceType", "url");
inputStreamB.put("ResourceValue", "your resource value");
inputStreamB.put("LayoutConfig", layoutConfigB);
inputStreamList.add(inputStreamB);
// 设置输入流
String inputStreamListStr = inputStreamList.toJSONString();
createMixStreamRequest.setInputStreamList(inputStreamListStr);
// 发起openapi请求
CreateMixStreamResponse createMixStreamResponse = client.getAcsResponse(createMixStreamRequest);
// 打印合流id
String mixStreamId = createMixStreamResponse.getMixStreamId();
System.out.println(mixStreamId);
}
public void updateMixStream() throws ClientException {
UpdateMixStreamRequest updateMixStreamRequest = new UpdateMixStreamRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
updateMixStreamRequest.setDomainName("your domain name");
// 设置布局id,自定义布局填写"USERDEFINED"
updateMixStreamRequest.setLayoutId("USERDEFINED");
// 设置要更新的合流id,即之前创建过的合流任务
updateMixStreamRequest.setMixStreamId("your mixstreamId");
// 初始化输入流
JSONArray inputStreamList = new JSONArray();
// 构建输入流A
JSONObject inputStreamA = new JSONObject();
JSONObject layoutConfigA = new JSONObject(); // 自定义布局配置设置
Float[] fillPositionNormalizedA = new Float[]{0f, 0f}; // 位置坐标
Float[] fillSizeNormalizedA = new Float[]{1f, 1f}; // 大小归一化值
layoutConfigA.put("FillMode", "fit");
layoutConfigA.put("PositionRefer", "topLeft");
layoutConfigA.put("FillPositionNormalized", fillPositionNormalizedA);
layoutConfigA.put("FillSizeNormalized", fillSizeNormalizedA);
inputStreamA.put("LayoutChildId", 1); // 布局id,注意:一定要从1开始,并且所有id要连续
inputStreamA.put("ResourceType", "url"); // 资源类型: url 或 live
inputStreamA.put("ResourceValue", "your resource value"); // 资源地址
inputStreamA.put("LayoutConfig", layoutConfigA); // 设置自定义的布局配置
inputStreamList.add(inputStreamA);
// 构建输入流B(方法同A)
JSONObject inputStreamB = new JSONObject();
JSONObject layoutConfigB = new JSONObject();
Float[] fillPositionNormalizedB = new Float[]{0.5f, 0.5f};
Float[] fillSizeNormalizedB = new Float[]{0.3f, 0.3f};
layoutConfigB.put("FillMode", "fit");
layoutConfigB.put("PositionRefer", "topLeft");
layoutConfigB.put("FillPositionNormalized", fillPositionNormalizedB);
layoutConfigB.put("FillSizeNormalized", fillSizeNormalizedB);
inputStreamB.put("LayoutChildId", 2);
inputStreamB.put("ResourceType", "url");
inputStreamB.put("ResourceValue", "your resource value");
inputStreamB.put("LayoutConfig", layoutConfigB);
inputStreamList.add(inputStreamB);
// 设置输入流
String inputStreamListStr = inputStreamList.toJSONString();
updateMixStreamRequest.setInputStreamList(inputStreamListStr);
// 发起openapi请求
UpdateMixStreamResponse updateMixStreamResponse = client.getAcsResponse(updateMixStreamRequest);
String mixStreamId = updateMixStreamResponse.getMixStreamId();
// 打印合流id
System.out.println(mixStreamId);
}
public void describeMixStreamList() throws ClientException {
DescribeMixStreamListRequest describeMixStreamListRequest = new DescribeMixStreamListRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
describeMixStreamListRequest.setDomainName("your domain name");
// 设置appName
describeMixStreamListRequest.setAppName("your app name");
// 设置查询开始时间
describeMixStreamListRequest.setStartTime("2020-12-03T14:00:00Z");
// 设置查询结束时间
describeMixStreamListRequest.setEndTime("2020-12-05T14:00:00Z");
// 发起openapi请求
DescribeMixStreamListResponse describeMixStreamListResponse = client.getAcsResponse(describeMixStreamListRequest);
// 获取合流列表
List< MixStreamInfo> result = describeMixStreamListResponse.getMixStreamList();
// 打印合流id
if (result != null && !result.isEmpty()) {
for (MixStreamInfo mixStreamInfo : result) {
String mixStreamId = mixStreamInfo.getMixstreamId();
System.out.println(mixStreamId);
}
}
}
public void deleteMixStream() throws ClientException {
DeleteMixStreamRequest deleteMixStreamRequest = new DeleteMixStreamRequest();
// 设置拉流域名(直播播流域名,此前用该域名观看合流后的内容)
deleteMixStreamRequest.setDomainName("your domain name");
// 设置appName
deleteMixStreamRequest.setAppName("your app name");
// 设置流名
deleteMixStreamRequest.setStreamName("your stream name");
// 设置要删除的合流id
deleteMixStreamRequest.setMixStreamId("your mixstreamId");
// 发起openapi请求
DeleteMixStreamResponse deleteMixStreamResponse = client.getAcsResponse(deleteMixStreamRequest);
String mixStreamId = deleteMixStreamResponse.getMixStreamId();
// 打印合流id
System.out.println(mixStreamId);
}
视频直播提供丰富的流管理功能,包括禁推和恢复直播流,以及查看在线流、历史流、禁推流及其详细信息。本文介绍直播流管理的功能及方法。
视频直播提供了丰富的直播流管理功能,其中禁推直播流功能可帮助您在遇到下列情况的时候,对某路直播推流进行禁止推流的操作。
鉴权推流地址暴露
用户恶意推流
业务需求
使用方法
控制台:支持在控制台查看禁推流、设置禁推流和恢复直播流。您可以在
视频直播控制台
的直播管理页面查看,请参见
流管理。
API
接口 | 描述 | 参考文档 |
---|---|---|
ForbidLiveStream |
禁止某路流的推送。
可以配置是否只断流不加入黑名单,预设某个时刻将流恢复。
说明 禁止直播流的上限为10,000路,超出限制将禁用失败。调用频率限制为20次/秒。 |
禁止直播流 |
ResumeLiveStream |
恢复某路流的推送。
说明 调用频率限制为30次/秒。 |
恢复直播流 |
使用方法
控制台
通过控制台的域名管理页面,指定播流域名进入域名配置页面,通过直播管理 > 访问控制 > 协议禁播来管理是否禁止播放。具体操作,请参见
协议禁播。
API
接口 | 描述 | 参考文档 |
---|---|---|
BatchSetLiveDomainConfigs | 批量配置域名。 可以通过Functions参数的alilive记录进行配置。 | 批量配置域名 |
控制台
视频直播将直播流分为在线流、历史流和禁推流三类,您可以在 视频直播控制台 的直播管理 >
流管理页面查看。
支持查看直播流的AppName、StreamName、推流时间、推流类型、转码模版、流监控、直播地址。
API
接口 | 描述 | 参考文档 |
---|---|---|
DescribeLiveStreamsOnlineList | 获取指定域名或者指定域名下指定应用的所有在线流信息。 | 查询域名在线流列表 |
DescribeLiveStreamsPublishList | 获取指定时间段内指定域名(或域名下指定应用或指定流)的历史推流记录。 | 查询域名历史流列表 |
DescribeLiveStreamsBlockList | 获取指定域名下被禁推的直播流信息。 | 查询直播流播放黑名单 |
DescribeLiveStreamsControlHistory | 获取指定域名或应用下的直播流操作历史。 | 查询直播流操作历史 |
DescribeLiveDomainOnlineUserNum | 获取指定域名下所有流的在线人数信息。 | 查询域名在线人数 |
在直播环境中,对直播效果影响最大的就是直播的卡顿。
导致直播卡顿的因素很多,其中之一便是上行传输的流畅度。上行传输不佳对于观看体验影响非常大,会导致所有观众端看到的视频都是卡顿的。视频直播提供了对上行流量监控的功能,您可以及时查看直播流上行传输状态。
控制台
视频直播支持查看直播流的基本信息、不同时刻的视频帧率和音频帧率、不同时刻的码率,您可以在
视频直播控制台
的直播管理 > 流管理页面,单击流监控查看。
API
接口 | 描述 | 参考文档 |
---|---|---|
DescribeLiveDomainFrameRateAndBitRateData | 查询推流域名下直播流流帧率和码率数据。 | 查询推流域名流帧率和码率 |
DescribeLiveStreamBitRateData | 查询RTMP协议的直播流在设置时间范围内的一组帧率和码率,适用于获取历史数据 | 查询RTMP协议直播流的帧率和码率 |
视频直播提供直播推流状态、直播录制、按需录制、直播截图和智能审核的事件回调,本文介绍这些回调的设置方式、回调参数和示例。
当直播过程中某些事件被触发时,摩杜云将主动发送请求到客户服务器,客户服务器负责应答请求,验证通过后,您可接收到事件回调信息的JSON数据包。
视频直播支持回调如下事件的信息:
视频直播服务目前支持HTTP回调(兼容HTTPS)方式获取事件通知。您需要部署一个HTTP服务来接收回调消息,并在控制台或通过API配置回调地址。
当推流或断流事件产生时,直播服务端会向该地址发起HTTP GET请求,具体内容将通过URL参数送达。
当其他事件产生时,直播服务端会向该地址发起HTTP POST请求,具体内容将通过JSON Body送达。
回调地址URL无需标识,只需可正常访问,URL的应答有如下要求:如果访问超时,会重试URL,目前超时时间是5秒,重试次数5次,重试间隔1秒。
通知当前域名推流状态,包括推流成功、断流状态,支持通过控制台或API配置回调地址。
直播推流状态回调设置方式
控制台
在 视频直播控制台的域名管理页面,选择需要配置的推流域名,单击域名配置,进入直播管理 > 基本配置
> 推流信息页面,添加或修改推流回调地址。
API
接口 | 描述 | 参考文档 |
---|---|---|
SetLiveStreamsNotifyUrlConfig | 设置推流回调配置。 | 设置直播推流回调配置 |
DescribeLiveStreamsNotifyUrlConfig | 查询推流回调配置。 | 查询直播推流回调配置 |
DeleteLiveStreamsNotifyUrlConfig | 删除推流回调配置。 | 删除直播推流回调配置 |
直播推流状态回调
推断流状态回调会将参数封装在MultiDict内。
直播推流状态回调中开播(publish)状态回调逻辑
a.RTMP推流在摩杜云直播服务收到On
Publish消息后2秒内,如果推流端不主动断开,摩杜云直播服务就会发推流成功回调。如果您的业务需要摩杜云直播收到On
Publish建联并真正收到直播流数据后才发推流成功回调,请提交工单联系我们后台配置。
b.假设您有推流域名A和播流域名B,如果您的域名B使用拉流直播(固定拉流和触发回源拉流)需要回调,请在域名A配置推流回调。配置后域名B的拉流回调逻辑与上一条一致,建联后默认2秒无主动断开即认为拉流成功,需要真正收到数据才认为成功。请提交工单申请配置。
说明 建议业务方不仅根据回调通知判断推流、拉流接入正常,同时配合在线流列表查询推流正常后,再下发直播流播放地址。
直播推流状态回调参数
参数 | 描述 |
---|---|
action |
事件。
publish:推流。 publish_done:断流。 |
ip | 推流的客户端IP。 |
id | 推流流名称。 |
app | 推流域名。默认为自定义的推流域名,如果未绑定推流域名即为播流域名。 |
appname | 推流应用名称。 |
time | Unix时间戳。单位:秒。 |
usrargs | 用户推流的参数。 |
node | CDN接受流的节点或者机器名。 |
height | 分辨率的高。单位:像素。
说明 分辨率信息(height和width)仅在首次回调时产生。 |
width | 分辨率的宽。单位:像素。 |
推流状态回调参数示例
http:// 1.1.1.1?action=publish&ip=192.168.XX.XX&id=world&app=test****.alivecdn.com&appname=hello&time=1609220385&usrargs={用户参数}&
node=cdnvideocenter01020711****.cm3&height=720&width=1280
断流流状态回调参数示例
http:// 1.1.1.1?action=publish_done&ip=192.168.XX.XX&id=world&app=test****.alivecdn.com&appname=hello&time=1609220385&usrargs={用户参数}&
node=cdnvideocenter01020711****.cm3&height=720&width=1280
直播录制回调包括录制状态回调、文件生成回调,支持通过控制台和API进行配置。
录制状态回调:在文件开始录制与结束录制时发出,主要表示文件已经开始和结束录制。
文件生成回调:在文件生成时发出,主要包括文件名称,开始结束时间与时长信息。
直播录制回调设置方式
控制台
在 视频直播控制台
的域名管理页面,选择需要配置的播流域名,单击域名配置,进入模版配置 >
录制配置页面,添加或修改回调地址。
API
接口 | 描述 | 参考文档 |
---|---|---|
AddLiveRecordNotifyConfig | 添加域名级别录制回调配置。 若需要开启录制任务状态回调,请将NeedStatusNotify参数值设置为true。 | 添加直播录制回调配置 |
DescribeLiveRecordNotifyConfig | 查询域名级别录制回调配置。 | 查询直播录制回调配置 |
DeleteLiveRecordNotifyConfig | 删除域名级别录制回调配置。 | 删除直播录制回调配置 |
录制状态回调
录制状态回调参数
参数 | 描述 |
---|---|
domain | 录制的播流域名。 |
app | 应用名。 |
stream | 流名。 |
event |
事件名。
record_started:录制已经成功开始。 record_paused:录制已经成功暂停。 record_resumed:录制已经成功恢复继续录制。 |
录制状态回调参数示例
{
"domain": "test****.alivecdn.com",
"app": "gs****_app",
"stream": "gs****_stream",
"event": "record_started"
}
文件生成回调
文件生成回调参数
参数 | 描述 |
---|---|
domain | 录制的播流域名。 |
app | 应用名。 |
stream | 流名。 |
uri | 目标录制文件在用户录制MOS Bucket下的路径。 |
duration | 目标录制文件录制内容时长,单位:秒。 |
start_time | 录制开始时间。Unix时间戳,单位:秒。 |
stop_time | 录制结束时间。Unix时间戳,单位:秒。 |
push_args | 推流参数中以callback_为前缀的参数,如callback_arg1、callback_myid等。
说明 同一个参数名只能有一个参数值,如果传入多个值,回调仅包含第一个值。 如推流参数包含callback_args1=value1&callback_args1=value2,回调中仍为"callback_args1": "value1"。 |
文件生成回调参数示例
推流URL为:
rtmp://qt01****.alivecdn.com/mp4flvtest****_flv/callback****_test?callback_args1=value1&callback_myid=1231389741
则回调内容为:
{
"domain": "qt01****.alivecdn.com",
"app": "mp4flvtest****_flv",
"stream": "callback****_test",
"uri": "mp4flvtest****_flv/callback****_test/0_2017-03-08-23:09:46_2017-03-08-23:10:40.flv",
"duration": 69.403,
"start_time": 1488985786,
"stop_time": 1488985840,
"push_args": {
"callback_args1": "value1",
"callback_myid": "1231389741"
}
}
说明 以上回调示例,适用于所有没有定制回调模版的客户。
按需录制回调是录制之前通过回调的方式,传递直播流的相关参数给用户,由用户判断是否需要录制的功能。
用户指定一个回调地址,并设置一个domain、app或stream级别的录制为按需录制。当录制服务收到匹配domain、app或stream名称的流时,向用户的回调地址发送请求(请求包含5个参数),来询问用户是否需要录制这路流。
请求参数
参数 | 类型 | 描述 |
---|---|---|
domain | String | 播流域名。 |
app | String | 播流所属应用名称。 |
stream | String | 播流名称。 |
codec | String | 编码方式。取值: h264 h265 |
vbitrate | String | 视频码率。单位:Kbps。 |
返回参数
参数 | 类型 | 是否必选 | 描述 |
---|---|---|---|
ApiVersion | String | 否 | API版本。默认为1.0版本。 |
NeedRecord | Bool | 是 | 是否需要录制。 |
Interval | Json Object | 否 | 具体格式的录制周期变化。取值范围:5~21600。单位:秒。 |
Format | Array | 否 | 录制格式。支持MP4、FLV、M3U8。 |
请求示例
GET /?app=seq_all&domain=qt01.alivecdn.com&stream=ondemand8&vbitrate=2000&codec=h264 HTTP/1.1
Host: live.abc.com
User-Agent: Go-http-client/1.1
Accept-Encoding: gzip
返回示例
{
"ApiVersion" : "1.0",
"NeedRecord" : true,
"Interval" : {
"Mp4": 300,
"Flv": 120,
"M3U8": 180
},
"Format" : ["mp4","flv"]
}
返回参数处理
录制服务会对用户返回的参数配置和既有配置进行覆盖。
例如,显示指定了Interval,那么录制服务会覆盖数据库中的录制配里面的Interval,Format会和数据库中的配置取交集。如果用户指定的格式全不在既有配置之中,则不会录制这路直播流。
说明
所有非200 http status code,都会被认为是调用用户接口失败。
对于范围body长度有限制,超过2048会被截断,以防恶意攻击。
直播提供截图文件回调,您可以通过调用UpdateLiveAppSnapshotConfig接口,配置Callback参数开启。更多信息,请参见
更新直播截图配置。
截图文件回调参数
参数 | 描述 |
---|---|
Event | 事件。 |
DomainName | 截图的播流域名。 |
AppName | 应用名。 |
StreamName | 流名。 |
MosBucket | 存储截图的Bucket名。 |
MosEndpoint | 存储截图的MOS。 |
MosObject | 截图的文件名。 |
CreateTime | 截图时间。 |
SnapshotUrl | 截图文件在用户录制MOS Bucket下的路径。 |
Size | 图片大小。 |
Width | 图片宽。单位:像素。 |
Height | 图片高。单位:像素。 |
截图文件回调参数示例
{
"Event":"Snapshot",
"DomainName":"test****.alivecdn.com",
"AppName":"app****_name",
"StreamName":"stream****_name",
"MosBucket":"bucket",
"MosEndpoint":"mos-cn-shan****.moduyuncs.com",
"MosObject":"1****.jpg",
"CreateTime":"2015-12-01T17:36:00Z",
"SnapshotUrl":"http://bucket.mos-cn-shan****.moduyuncs.com/1****.jpg",
"Size":"36291",
"Width":"1280",
"Height":"720"
}
视频直播支持视频审核和语音审核的结果回调,您可以在控制台或通过API配置回调地址。
视频审核回调设置方式
控制台
您可以在 视频直播控制台
的域名管理页面需要选择配置的播流域名,单击域名配置,进入模版配置 >
审核配置页面,添加或修改回调地址。
说明 中国内地的直播中心中,青岛直播中心的域名暂不支持智能审核;海外的直播中心中,只有新加坡支持智能审核。
API
接口 | 描述 | 参考文档 |
---|---|---|
AddLiveDetectNotifyConfig | 添加直播视频审核回调配置。 | 添加直播审核回调配置 |
DescribeLiveAudioAuditNotifyConfig | 查询直播视频审核回调配置。 | 查询直播审核回调配置 |
UpdateLiveDetectNotifyConfig | 更新直播视频审核回调配置。 | 更新直播审核回调配置 |
DeleteLiveDetectNotifyConfig | 删除直播视频审核回调配置。 | 删除直播审核回调配置 |
视频审核回调
只会对于有问题的视频内容进行回调通知,通知内容包含问题视频截图的审核信息和存储信息。
视频审核回调参数
参数 | 类型 | 描述 |
---|---|---|
DomainName | String | 播流域名。 |
AppName | String | 应用名称。 |
StreamName | String | 流名称。 |
MosEndpoint | String | 存储对象Endpoint。 |
MosBucket | String | 存储对象的Bucket。 |
MosObject | String | 存储对象的文件名。 |
Result | JSONArray | 检测结果。请参见表 1。 |
表 1. Result
参数 | 类型 | 描述 |
---|---|---|
BizType | String | 业务类型。可用于选择模型,默认值为域名。 |
Scene | String |
检测场景
porn:鉴黄。 terrorism:暴恐涉政。 ad:图文违规。 live:不良场景。 logo:图片logo。 |
Label | String |
检测结果的分类。不同检测场景的结果分类不同,具体如下:
图片智能鉴黄(porn)结果分类: normal:正常。 sexy:性感。 porn:色情。 图片暴恐涉政(terrorism)结果分类: normal:正常。 bloody:血腥。 explosion:爆炸烟光。 outfit:特殊装束。 logo:特殊标识。 weapon:武器。 politics:涉政。 violence :打斗。 crowd:聚众。 parade:游行。 carcrash:车祸现场。 flag:旗帜。 location:地标。 others:其他。 图文违规(ad)结果分类: normal:正常。 ad:其他广告。 npx:牛皮癣广告。 qrcode:含二维码。 programCode:含小程序码。 不良场景(live)结果分类: normal:正常。 meaningless:图片中无内容(例如,黑屏、白屏)。 PIP:画中画。 smoking:吸烟。 drivelive:车内直播。 图片logo(logo)结果分类: normal:正常。 TV:含受管控的logo。 trademark:含商标。 |
Rate | Float | 置信度分数。取值范围:0(表示置信度最低)~100(表示置信度最高)。
说明 该值仅作为参考,强烈建议您不要在业务中使用。建议您参考Label结果用于内容违规判定。 |
Extent | String | 预留字段。 |
说明 默认新用户将使用此版本,老用户维持不变,如需使用此版本
视频审核回调参数示例
{
"DomainName": "test****.alive.com",
"AppName": "app****_name",
"StreamName": "stream****_name",
"MosEndpoint": "mos-cn-hang****.moduyuncs.com",
"MosBucket": "xbucket",
"MosObject": "abc.jpg",
"Result": [
{
"BizType": "test****.alive.com",
"Result": [
{"Label": "Porn", "Rate":11, "Suggestion": "review", "Scene":"porn", "Extent": {}},
{"Label": "Ad", "Rate":11, "Suggestion": "review", "Scene":"ad", "Extent": {}}
]
}
]
}
语音审核回调设置方式
目前不支持控制台方式设置语音审核,您可以通过API设置。
接口 | 描述 | 参考文档 |
---|---|---|
AddLiveAudioAuditNotifyConfig | 添加直播语音审核回调配置。用户可以根据自己需求自定义回调JSON格式。 | 添加直播语音审核回调配置 |
DeleteLiveAudioAuditNotifyConfig | 删除直播语音审核回调配置。 | 删除直播语音审核回调配置 |
UpdateLiveAudioAuditNotifyConfig | 更新直播语音审核回调配置。 | 更新直播语音审核回调配置 |
DescribeLiveAudioAuditNotifyConfig | 查询直播语音审核回调配置。 | 查询直播语音审核回调配置 |
语音审核回调
只会对于有问题的音频内容进行回调通知,通知内容包含问题语音的文本信息以及最近一分钟内的上下文信息。
语音审核回调参数
参数 | 类型 | 描述 |
---|---|---|
domain | String | 播流域名。 |
app | String | 应用名称。 |
stream | String | 流名称。 |
timestamp | Int | 回调时间戳。单位:秒。 |
result | JSONArray | 检测结果。请参见表 2。 |
表 2. Result
参数 | 类型 | 描述 |
---|---|---|
scene | String | 检测场景。 |
label | String | 检测结果的分类。取值:
normal:正常文本 spam:含垃圾信息 ad:广告 politics:涉政 terrorism:暴恐 abuse:辱骂 porn:色情 flood:灌水 contraband:违禁 meaningless:无意义 customized:自定义(例如命中自定义关键词) |
suggestion | String | 处理建议。取值:
pass:结果正常,无需进行其余操作。 review:结果不确定,需要进行人工审核。 block:结果违规,建议直接删除或者限制公开。 |
rate | Float | 置信度分数。取值范围:0(表示置信度最低)~100(表示置信度最高)。
说明 该值仅作为参考,强烈建议您不要在业务中使用。建议您参考Label结果用于内容违规判定。 |
details | JSONArray | 语音对应的文本详情,每一句文本对应一个元素,可以包含一个或者多个元素。关于每个元素的结构描述,请参见表 3。 |
表 3. Detail
参数 | 类型 | 描述 |
---|---|---|
startTime | Int | 句子开始的时间戳,单位:秒。 |
endTime | Int | 句子结束的时间戳,单位:秒。 |
text | String | 问题语音转换成文本的结果。 |
label | String |
检测结果的分类。取值:
normal:正常文本 spam:含垃圾信息 ad:广告 politics:涉政 terrorism:暴恐 abuse:辱骂 porn:色情 flood:灌水 contraband:违禁 meaningless:无意义 customized:自定义(例如命中自定义关键词) |
语音审核回调参数示例
{
"domain": "live.abc.com",
"app": "live",
"stream": "5d9747eba39b44769852d276f9ff690c",
"timestamp": 1572248095,
"result": [
{
"scene": "antispam",
"label": "ad",
"suggestion": "block",
"rate": 99.91,
"details": [
{
"startTime": 1572248023,
"endTime": 1572248040,
"text": "丽江陇川等酒店免费居住权120天居住权可与亲友共享来云栖社国际烧酒店接待中心地址芒市团结大街96号邓朝ktv旁咨询热线2285699",
"label": "ad"
},
{
"startTime": 1572248040,
"endTime": 1572248070,
"text": "典藏经典别墅尊享隆多温泉、梁河金塔、温泉旅游小镇二期滨江苑地区11月2号盛大开盘天然龙窝、温泉水入户户型多样,设计经典价位超值,值得您拥有开盘当天还有超值优惠,欢迎您前来品鉴,凭借地址,然和县遮岛镇先锋路229号分享热线069269557776955777",
"label": "normal"
},
{
"startTime": 1572248072,
"endTime": 1572248077,
"text": "快乐的时光,有你相伴惬意的日子,格外轻松。",
"label": "normal"
},
{
"startTime": 1572248078,
"endTime": 1572248086,
"text": "fme043忙里偷闲音乐时光有歌曲温暖,有你想念影院。",
"label": "normal"
}
]
}
]
}
视频直播具有直播录制和截图功能,录制和截图产生的文件可以通过控制台或存储的MOS进行管理。本文介绍管理方式。
您可以在
视频直播控制台
的直播管理 > 录制文件管理页面,查看指定域名下的录制文件,请参见
录制文件管理。
若存储至MOS,也可以通过录制文件生成的回调信息,查看对应目标录制文件在用户录制MOS Bucket下的路径。请参见
直播录制回调。
您可以在视频直播控制台的直播管理 > 截图管理页面,查看指定域名下的截图文件,请参见截图管理。
若您开启了截图回调,也可通过截图回调信息查看图片存储路径,请参见
直播截图回调。
本文详细介绍如何查询视频直播中上行推流数据和下行播流数据。
您可以登录
视频直播控制台
,在数据监控、访问统计和用量查询页签中查询对应数据。
资源监控可以监控流量带宽-上行、流量带宽-下行、回源带宽流量、HTTPCODE等数据。更多详情,请参见
资源监控。
实时监控可以监控推流、流量带宽等数据。更多详情,请参见
实时监控。
访问统计可以查询独立访客数、用户分布、域名排行等数据。更多详情,请参见
访问统计。
用量查询可以查询播放带宽/流量、推流路数、转码时长、截图张数等查询功能。更多详情,请参见
用量查询。
API提供以下接口供您查询对应的数据:
查询直播域名带宽数据
查询直播域名录制时长
查询直播域名截图张数
查询直播域名流量数据
查询域名转码用量数据
查询直播域名实时带宽数据
查询直播域名实时HTTP返回码占比
查询直播域名实时流量监控数据
查询直播流历史在线人数
查询在线直播流数量
查询域名在特定计费区域的用量数据
实时监测上行推流的质量可以定位直播中的卡顿、延时等问题。推流监控是秒级监控,实时返回每秒钟的推流监控数据,包括主播到CDN节点的接收音视频帧率、音视频时间戳、接受头次数、音视频码率(Kbps)、最大音视频帧间隔(毫秒)、
推流断开错误码和实时日志。通过查看每秒中视频流的状态可判断推流的稳定性,及时对直播的内容进行监测,减少观看视频时的卡顿影响。
操作步骤
1.登录 视频直播控制台
2.在左侧导航栏中,选择数据监控 > 实时监控。
3.选择正在推流的域名、时间段、应用名称和流名称,单击查询。
如果您想要实时获取监控信息,可以选择 10分钟实时监控。实时监控数据延迟为3分钟。
如果查看历史的监控信息,也可以选择近半小时、近1小时,以及 自定义 的监控时间。查询的时间跨度最大支持1天查询。
关于监控项的详细信息,请您参见以下内容。
流详情
流监控 | 含义 | 场景 |
---|---|---|
推流地址 | 主播的推流地址。格式:rtmp://domainName/appName/streamName。 | 查看推流地址。 |
AppName | 流的应用名称。 | 查看应用名。 |
StreamName | 主播推的流名。 | 查看流名。 |
开始推流时间 | 主播单次推流的开始推流时间。 | 查看开始推流时间点。 |
结束推流时间 | 主播单次推流的结束推流时间。 | 查看结束推流时间点。 |
推流主播IP | 主播推流端的IP地址。 | 监控主播端IP。 |
编码信息 | 主播所推直播流的metadata。格式:{视频编码}{分辨率}/{音频编码}{音频采样率}。视频编码、分辨率、音频编码和音频采样率分别采集自meta的videocodecid,frame_rate, audiocodecid和aac header。 | 监控流的编码信息。 |
历史推流记录 | 主播针对同一路流名,其不同的推断流记录。 | 监控主播的推断流时间点。 |
主播到CDN节点的接受音视频帧率
监控项 | 含义 | 场景 |
---|---|---|
视频帧率 | 服务端每秒采集的接受视频帧数。 | 监控主播到服务器端的上行视频帧率稳定性。 |
音频帧率 | 服务端每秒采集的接受的音频帧数。 | 监控主播到服务器端的上行音频帧率稳定性。 |
音视频时间戳
监控项 | 含义 | 场景 |
---|---|---|
视频时间戳 |
服务器端采集的每秒最后一帧视频帧所携带的视频时间戳(单位:毫秒)。
说明 采集的一秒周期内如果没有收到视频帧,则设置为-1。 |
监控视频时间戳的单调性。 |
音频时间戳 |
服务器端采集的每秒最后一帧音频帧所携带的音频时间戳(单位:毫秒)。
说明 采集的一秒周期内如果没有收到音频帧,那么设置为-1。 |
监控音频时间戳的单调性。 |
音视频时间戳差值 | 以上采集的视频时间戳和音频时间戳所得出的差值(单位:毫秒)。 | 通过监控音视频时间戳差值的趋势进而判断主播推流音视频时间戳是否同步。 |
接受头次数
监控项 | 含义 | 场景 |
---|---|---|
AVC | 服务器端采集的接受主播端推流的AVC sequence header的累计次数。 | 监控主播端推的AVC sequence header 次数。 |
AAC | 服务器端采集的接受主播推流的AAC sequence header的累计次数。 | 监控主播端推的AAC sequence header 次数。 |
音视频码率
监控项 | 含义 | 场景 |
---|---|---|
视频码率 | 服务器端每秒采集的视频码率(单位:Kbps)。 | 监控主播推流的视频码率。 |
音频码率 | 服务器端每秒采集的音频码率(单位:Kbps)。 | 监控主播推流的音频码率。 |
最大音视频帧间隔
监控项 | 含义 | 场景 |
---|---|---|
视频帧间隔 | 服务端每秒采集的最大的视频帧之间的时间戳间隔。 | 监控视频帧本身的时间戳是否出现跳变。 |
音频帧间隔 | 服务端每秒采集的最大的音频帧之间的时间戳间隔。 | 监控音频帧本身的时间戳是否出现跳变。 |
推流断开错误码
监控项 | 含义 | 场景 |
---|---|---|
错误码 | 服务器端每秒采集的推流断开错误码。 |
监控主播推流断开的原因。常见错误码如下:
2:推流端主动断开; 1,3,4,6:客户端连接发送超时; 101:被断流接口踢掉; 103:推流端超过10秒没有发送数据; 104,106:chunk stream id太大,数值超过32; 105:推流一帧数据大小超过限制,超过5,242,880字节; 122,123:推流鉴权不通过; 125:推流时相同名称的流在中心已存在; 其他错误码:若出现其他错误码,请您截图提交工单与我们联系。 |
实时日志
实时日志延时小(秒级延时),可以帮助您快速了解直播推流、访问详情。更多详情,请参见
日志管理
操作步骤
1.登录 视频直播控制台
2.在左侧导航栏中,选择日志管理。
3.选择待查询的域名及时间,单击查询,查询该域名在指定时间的日志。
4.上行推流日志字段,请参见 实时日志推送字段说明。
您可以通过播流的带宽流量、状态码、独立访客数、用户分布等数据进行播流数据分析
名称 | 说明 | 查询方式 |
---|---|---|
实时流量带宽 | 播流域名下某个区域、运营商、时间段内的实时带宽流量。 |
1.登录 视频直播控制台
2.在左侧导航栏中,选择数据监控 > 实时监控 > 流量带宽。 3.选择播流域名、运营商、区域、时间段,单击查询 |
播流带宽流量 | 查询指定域名的流量和带宽使用情况。 |
1.登录 视频直播控制台
2.在左侧导航栏中,选择用量查询。 3.您可以选择待查询的域名、区域、及查询的时间段(今天、昨天、近7天、近30天或自定义),查看域名的流量和带宽使用情况。 |
HTTP状态码 | HTTP请求返回状态码。 |
1.登录 视频直播控制台
2.在左侧导航栏中,选择数据监控 > 实时监控 > 质量监控。 |
用户分布 | 观看视频用户所在地域分布。 |
1.登录 视频直播控制台
2.在左侧导航栏中,选择访问统计。 3.选择您所要查看 独立访客数、用户分布或域名排行。 4.选择您想要查看的 域名和时间段,并单击查询。 |
域名排名 | 各个加速域名的访问排名。 | |
独立访客数(UV) | 统计当前域名下一定时间段内独立请求的IP次数。 |
日志管理提供日志下载和实时日志推送功能。可以将日志推送至日志服务进行分析,帮您快速发现和定位问题。本文详细为您介绍实时日志推送和日志下载的功能。
日志生成规则
日志下载可以下载最近一个月(30天)的日志数据。日志文件按小时粒度分割。
日志文件延迟时间:日志下载通常情况可下载4小时之前的日志,若数据量大、有堆积时可能超过24小时。
日志命名规则:加速域名_年_月_日_时间开始_时间结束。示例:www.example.com_2021_01_06_000000_010000.gz
使用方法
您可以在
视频直播控制台
日志管理中下载日志。具体操作,请参见
日志管理。
日志下载字段格式说明
字段 | 参数 |
---|---|
时间 | [9/Jun/2015:01:58:09 +0800] |
访问IP | 188.165.15.75 |
代理IP | 无 |
responsetime(单位:ms) | 1542 |
referer | 无 |
method | GET |
访问URL | https://www.moduyun.com/index.html |
httpcode | 200 |
requestsize(单位:Byte) | 191 |
responsesize(单位:Byte) | 2830 |
cache命中状态 | HIT(命中),MISS(未命中) |
UA头 | Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/) |
文件类型 | text、html |
功能介绍
您可以通过实时日志推送功能,将直播域名日志实时推送至日志服务,并进行日志分析,
便于快速发现和定位主播推流问题,或者分析直播观看用户数据为运营策略提供依据。
此功能涉及摩杜云日志服务产品,如果您想深入了解日志服务,请参考
什么是日志服务。
计费说明
如果您开启了实时日志推送服务,将会产生额外的增值服务费用。您需要按实
时日志推送成功条数进行付费,该费用仅包含日志采集推送服务的费用,不包含SLS日志服务的费用。更多详情,请参见
实时日志费用。
实时日志推送服务的优势
传统的日志分析模式,需要将日志下载,重新上传至数据库后再进行数据分析,
整个过程需耗费人力、时间维护。实时日志延时小(秒级延时),可帮您快速了解直播的推流、
访问详情日志。开通实时日志推送服务,数据将自动推送到日志服务,可实时查看日志分析结果。
使用方法
实时日志推送可以在
视频直播控制台
中配置。具体操作,请参见
实时日志推送。
说明 目前仅支持配置播流域名,如需推送上行实时日志(即配置推流域名),请联系摩杜云客服配置。
实时日志推送请参见 实时日志推送字段说明。
实时日志为实时采集的日志数据,日志数据延迟不超过3分钟。帮助您快速对日志进行分析,发现问题,及时决策。
日志下载通常情况可下载4小时之前的日志,若数据量大有堆积时可能超过24小时。
在直播控制台开通、配置实时日志推送服务后,您可以根据下表查看日志中各字段的含义。
上行推流日志字段
名称 | 说明 | 默认是否创建索引 |
---|---|---|
unixtime | 请求时间 | 是 |
domain | 请求域名 | 是 |
uri | 请求资源 | 是 |
uri_param | 请求参数 | 是 |
client_ip | 和服务器建联客户端IP | 是 |
client_port | 和服务器建联客户端端口 | 是 |
request_size | 请求大小 | 是 |
request_time | 请求响应时间,单位:毫秒 | 是 |
response_size | 请求返回大小,单位:字节 | 是 |
server_addr | 服务器IP | 是 |
server_port | 服务器端口 | 是 |
vfcnt | 视频帧率 | 是 |
vfts | 视频时间戳(1秒内最后一帧的时间戳) | 是 |
vfdropped | 视频每秒丢帧数 | 是 |
afcnt | 音频帧率 | 是 |
afts | 音频时间戳(1秒内最后一帧的时间戳) | 是 |
afdropped | 音频每秒丢帧数 | 是 |
wait | 应用层堆积数 | 是 |
first_frame_duration | 首帧时间 | 是 |
v_header_count | 收到的视频头个数 | 是 |
a_header_count | 收到音频头个数 | 是 |
vbytes_merge | 视频码率,单位:Bps
说明 常用单位是Kbps,例如100000 Bps=100000÷1000×8=800 Kbps。 |
是 |
abytes_merge | 音频码率,单位:Bps | 是 |
publish_type | 上行接入协议类型 | 是 |
下行播放日志字段
名称 | 说明 | 默认是否创建索引 |
---|---|---|
unixtime | 请求时间 | 是 |
domain | 请求域名 | 是 |
method | 请求方法 | 是 |
scheme | 请求协议 | 是 |
uri | 请求资源 | 是 |
uri_param | 请求参数 | 是 |
client_ip | 用户真实IP | 是 |
proxy_ip | 代理IP | 是 |
remote_ip | 和CDN节点建连IP | 是 |
remote_port | 和CDN节点建连客户端端口 | 是 |
refer_protocol | HTTP Refer中的协议 | 是 |
refer_domain HTTP | Refer中Domain信息 | 是 |
refer_uri HTTP | Refer中URI信息 | 是 |
refer_param HTTP | Refer中的参数信息 | 是 |
request_size | 请求大小 | 是 |
request_time | 请求响应时间,单位:毫秒 | 是 |
response_size | 请求返回大小,单位:字节 | 是 |
return_code | 请求响应码 | 是 |
sent_http_content_range | 应答头里表示的Range信息(由源站创建),如Bytes:0~99/200 | 是 |
server_addr | 服务的CDN节点IP | 是 |
server_port | 服务的CDN节点服务端口 | 是 |
body_bytes_sent | 实际发送Body大小,单位:字节 | 是 |
content_type | 请求的资源类型 | 是 |
hit_info | 用户请求中Header头中Range字段取值,如Bytes:0~100 | 是 |
user_agent | 用户代理信息 | 是 |
user_info | User Info信息 | 是 |
uuid | 请求唯一标识 | 是 |
via_info | Via头信息 | 是 |
xforwordfor | 请求头中XForwardFor字段 | 是 |
视频直播控制台提供了直播管理、域名管理、导播台、数据监控、访问统计、用量查询、日志管理的配置与使用。通过阅读本文,您可以了解控制台概览及各功能的简介。
1.登录 视频直播控制台
2.查看控制台概览。
功能区名称 | 说明 |
---|---|
昨日基础数据 | 昨日视频直播服务使用的总流量及带宽峰值。 |
用量趋势 | 最近七日推流趋势、转码时长趋势及录制时长趋势图。 |
使用指南 | 一些常见问题及使用说明的文档链接。 |
计费方式 | 当前计费类型、变更计费类型入口及价格明细。 |
通用资源包 | 已购的通用资源包及购买入口。 |
鉴黄审核资源包 | 已购的鉴黄审核资源包及购买入口。 |
云导播资源包 | 已购的云导播资源包及购买入口。 |
关联产品 | 视频直播关联的产品。 |
视频直播控制台左侧导航栏提供功能如下所示:
功能名称 | 说明 |
---|---|
直播管理 | 对视频直播的流、录制的文件、截图进行管理及提供地址生成器生成推流地址,用于第三方软件(如OBS)推流。 |
域名管理 | 域名的配置、管理及其所占资源的监控。 |
导播台 | 视频导播服务的配置、使用及管理。 |
数据监控 | 对各域名进行资源监控及实时监控。 |
访问统计 | 对独立访客数、用户分布、域名排行的统计。 |
用量查询 | 对播放带宽/流量、推流路数、转码时长等进行查询。 |
日志管理 | 进行日志下载及实时日志的推送。 |
流管理服务提供了在线流、历史流和禁推流管理功能。通过阅读本文,您可以了解各视频流的管理方法。
1.登录 视频直播控制台
2.在左侧导航栏选择直播管理 > 流管理。
3.选择待查询的域名,输入AppName和StreamName。
4.单击查询,查询当前实时在线流数。
5.单击操作列的链接,管理在线流。
单击流监控,查看流监控数据。
查看在线流的基本信息。
查看不同时刻的视频帧率和音频帧率
查看不同时刻的码率。
单击禁推,进行在线流禁推。
禁推类型如下所示:
永久:永久禁推此直播流。
限时:恢复时间之前禁推此直播流。
单击直播地址,查看不同转码及格式的直播地址。
1.登录 视频直播控制台
2.在左侧导航栏选择直播管理 > 流管理。
3.单击历史流页签。
4.选择待查询的域名及起始时间,选择或输入AppName和StreamName
5.单击查询,查询历史流数。
6.单击操作列的链接,管理历史流。具体操作,请参考步骤5。
1.登录 视频直播控制台
2.在左侧导航栏选择直播管理 > 流管理。
3.单击禁推流页签。
4.选择待查询的域名及起始时间,选择或输入AppName和StreamName。
5.单击查询,查询禁推流数。
6.单击操作列的恢复。
7.在恢复流对话框中单击确定,直播流从禁推列表中恢复成功。您可以在历史流中查看该直播流。
视频录制服务支持直播视频按照设定的录制周期对正在直播的视频进行录制, 保存至VOD或指定的MOS存储位置。通过阅读本文,您可以了解怎样在视频直播控制台查看录制的文件。
1.登录 视频直播控制台
2.在左侧导航栏选择直播管理 > 录制文件管理。
3.选择待查询的域名。
4.单击存储至MOS页签。本文以录制文件存储至MOS为例说明,录制文件存储至VOD与存储至MOS的查看方法类似。
说明 如果待查询域名的区域已开通点播,并且已设置存储至VOD和存储至MOS, 则此处会显示存储至VOD和存储至MOS页签。更多信息,请参见 录制存储至VOD 和 录制存储至MOS。
5.(可选)录制索引剪辑。
i.单击录制索引剪辑。
ii.选择待录制索引的域名、起止时间、AppName和StreamName。
iii.设置索引的开始和结束时间。
iv.单击保存新文件
v.输入待保存索引文件的名称。
vi.单击确定。
vii.在录制文件管理列表中查看录制的索引剪辑。
6.选择待查询的时间,然后输入或选择AppName和StreamName。
7.单击查询,查看选择时间段内的录制文件。若录制文件无法查看,请确定MOS Bucket读写权限是否为公共读,具体操作,请参见
配置MOS bucket读写权限。
8.单击操作列的查看录制文件。
1.登录MOS Bucket控制台。
2.在Bucket列表中单击待设置Bucket所在的行。获取Bucket名称,请参见
录制存储至MOS。
3.在左侧导航栏选择权限管理 > 读写权限。
4.在读写权限设置区域,单击设置,选择公共读。
5.单击保存。
视频截图服务支持直播视频按照设定的时间间隔对正在直播的视频进行截图,保存至指定的MOS存储位置。通过阅读本文,您可以了解怎样在视频直播控制台查看截图。
1.登录 视频直播控制台
2.在左侧导航栏选择直播管理 > 截图管理。
3.选择待查询的域名及时间,然后输入或选择AppName和StreamName。
4.单击查询,查看选择时间段内的截图。若截图无法查看,请确定MOS Bucket读写权限是否为公共读,具体操作,请参见
配置MOS bucket读写权限。
5.将鼠标移动到某一图片上方,可以查看大图或复制截图的流地址。
1.登录MOS Bucket控制台。
2.在Bucket列表中单击待设置Bucket所在的行。获取Bucket名称,请参见 配置截图。
3.在左侧导航栏选择权限管理 > 读写权限。
4.在读写权限设置区域,单击设置,选择公共读。
5.单击保存。
使用地址生成器可以快速生成推流地址,用于第三方软件(如OBS)推流。通过阅读本文,您可以了解地址生成器的使用方法。
1.登录 视频直播控制台
2.在左侧导航栏选择直播管理 > 地址生成器。
3.选择播流域名及其关联的推流域名。
4.输入AppName和StreamName。
5.根据实际需求选择转码模版。
6.单击开始生成,获取推流地址和播流地址。
视频直播依托于摩杜云强大的CDN服务,为您提供视频分发加速服务。 在您的域名接入摩杜云视频直播服务前,可阅读本文快速了解摩杜云视频直播加速域名的接入条件和限制,防止因域名涉及违规内容而造成的损失。
1.实名认证:登录摩杜云官网,单击实名认证,按照页面提示完成操作。
2.工信部备案:推荐您进入摩杜云ICP代备案管理系统进行备案。
3.域名审核:加速域名的源站内容,您可选择使用直播提供的存储服务或MOS进行保存。如源站内容不在摩杜云,接入前,请联系摩杜云客服
4.添加CNAME记录:将您的域名指向视频直播生成的CNAME域名,即在DNS服务商处为您的域名添加CNAME记录,请参见
配置CNAME域名解析。
所有接入视频直播服务的域名都要经过审核。目前不支持接入的加速域名类型包括但不限于:
无法正常访问或内容不含任何实质信息
游戏私服类
传奇或纸牌类游戏
盗版软件等无版权下载网站
P2P类金融网站
彩票类网站
违规医院和药品类网站
涉黄、涉毒、涉赌等
说明
含有以上违规内容的加速域名,由您自行承担任何可能的风险。摩杜云CDN系统也将定期复审域名内容,如果发现以上任何违规行为,则系统将会立即下线或封禁域名。情节严重的将封禁整个账号下域名服务,且永不恢复。
如果您在摩杜云视频直播接入了一个泛域名(例如*.example.com)进行加速,该泛域名包含的某个精确域名(例如a.example.com)出现了以上违规内容,摩杜云视频直播将下线该泛域名(*.example.com)。
如果您的域名审核被拒绝,请在控制台的域名列表查看拒绝原因,请自行整改后重新提交域名审核。详细说明,请参见CDN控制台查询域名审核失败原因以及重新提交审核方法。
数量 | 限制数量 |
---|---|
域名 | 每个摩杜云账户下,最多支持加速20个域名。如果您的域名的总带宽日均峰值大于50 Mbps,且业务无风险,则可联系摩杜云客服申请增加域名个数。 |
如果您的加速域名… | 系统会… | 如需继续使用视频直播加速域名,您需要… |
---|---|---|
超过90天没有任何访问流量(包含处于正常运行状态) | 自动停用该域名,但保存该加速域名的相关记录。 | 启用加速域名。 |
处于停用状态超过120天(包含审核未通过状态) | 自动删除该域名的相关记录。 | 重新添加域名。 |
当您首次将一个新域名添加至摩杜云视频直播时,需要您完成验证域名的归属权。本文介绍如何通过DNS解析验证或文件验证的方法,验证域名归属权。
验证通过后视为您拥有该域名。您在视频直播控制台再次添加该域名或子域名时,不需要再进行验证。
摩杜云为您提供DNS解析验证和文件验证两种方法,您可以任选其一。本文以添加a.com为例,为您介绍验证域名归属权的操作方法。
添加新的加速域名时,DNS验证方法如下:
1.获取加速域名的记录类型、主机记录及记录值。
i.登录 视频直播控制台
ii.在左侧导航栏,选择域名管理 > 添加域名。当您首次添加新域名时,需按页面提示添加指定的TXT记录。
2.添加记录。
i.登录摩杜云域名解析控制台。
以摩杜云解析为例,DNSPod、新网等其他DNS解析服务商操作类似。
ii.进入域名解析页面,在a.com域名的右侧,单击解析设置。
iii.单击添加记录。填写步骤1中查看的记录类型、主机记录及记录值。
3.验证。
返回 视频直播控制台 。单击点击验证,完成验证。
添加新的加速域名时,文件验证方法如下:
1.登入 视频直播控制台
2.选择域名管理 > 添加域名 > 方法2:文件验证。
3.单击下载verification.html验证文件。
4.将验证文件上传到您的域名源站服务器(例如您的MCS、MOS、CVM、COS、EC2等)的根目录。
5.摩杜云CDN系统后台将访问您的源站http://a.com/verification.html获取校验文件,判断您是否按要求上传指定的验证文件。请确保该文件可被访问。
6.单击点击验证,完成验证。
在进行添加新的加速域名时,您可能会遇到如下问题:
Q:为什么要做域名归属权验证?
A:为了确保域名只被真正的拥有者添加,避免出现用户A的域名被用户B添加导致的域名冲突及安全隐患。
Q:我有多个摩杜云账号,每个账号首次添加新域名时都需要做归属权验证吗?
A:是的。多个账号视为多个不同的独立用户,每个账号都需要对新域名进行一次归属权验证。
Q:我已完成DNS验证或文件验证,是否可以删除用作验证的DNS记录或文件?
A:可以。要求您添加的DNS解析或文件,只用作添加域名时的归属权验证,验证通过后,您可以删除记录或文件。
Q:已经加到摩杜云直播控制台的存量域名,需要做域名归属权校验吗?
A:不需要。例如您已经添加了b.a.com,且配置了CDN分配的CNAME在正常使用中,则视为您拥有a.com的解析权。您后续再添加xx.a.com、xxx.a.com等任意a.com的子域名,都无需再校验。
Q:通过API接口AddLiveDomain添加域名是否需要校验?
A:需要。和控制台添加一样,您可以选择DNS或文件校验的方式,先配置好DNS或在源站根目录放置好校验文件,然后调用AddLiveDomain接口创建域名。
Q:我无法完成DNS验证或文件验证,怎么办?
A:您可以 联系摩杜云客服说明无法完成域名归属权验证的原因,并提交可以证明您持有该域名的资料,我们将进行人工审核。
视频直播服务分上行推流和下行播流。上行推流通过推流域名就近接入直播流, 下行播流通过播流域名进行分发加速。您可以阅读本文,了解在视频直播添加加速域名的方法。
如果您要进行中国内地的直播活动,需提供已备案的域名才可使用直播服务。
如果您的域名还未备案,请先将域名备案。
视频直播已提供直播流的上行接入和下行分发加速服务,不需再开通CDN服务对直播流进行加速。
您需要分别添加推流域名和播流域名。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.单击添加域名。
4.配置加速域名、直播中心、业务类型和CDN 加速区域。
参数 | 参数分类 | 说明 |
---|---|---|
加速域名 | 无 |
输入您需要加速的域名,例如:example.com。注意事项如下:
加速域名一般使用子域名,例如: live.example.com。 直播服务暂不支持添加泛域名,例如: *.example.com。 加速域名不允许重复添加,如果出现域名已添加的提示,请检查您的域名是否已经添加到其他云产品中, 例如视频点播、全站加速、SCDN和视频监控,您也可以联系摩杜云客服处理。 开通视频直播服务后,每个账户最多可添加20个域名, 如果您域名的总带宽日均峰值大于50 Mbps,且业务无风险,可联系摩杜云客服申请增加域名个数。 加速内容必须合法且符合业务规范,详情请参见 域名准入标准。 说明 子域名必须在同一个账号下。您在添加域名时, 直播服务会进行检查,如果子域名被添加到不同账号, 系统会报错。如果您无法自行解决,请联系摩杜云客服处理。 |
直播中心 | 无 |
直播中心用来提供云上直播流的媒体处理服务,如截图、录制、转码、云导播等。
直播推流域名与播流域名的直播中心所在地域要保持一致。 |
CDN 加速区域 | 中国内地 | 如果选择中国内地,则需要工信部备案。域名备案方法,请参见加速域名备案。 |
全球加速 | 如果选择全球加速,则需要工信部备案。域名备案方法,请参见加速域名备案。 | |
海外及港澳台加速 | 如果选择海外及港澳台加速且直播中心也在海外,则无需工信部备案。 |
5.单击提交。
当您首次将一个新域名添加至摩杜云视频直播时,需要验证域名的归属权,请参见
验证域名归属权。
完成添加推流域名和播流域名的操作后,还需要对添加的域名进行CNAME解析,请参见
配置CNAME域名解析。
您可以通过阅读本文,了解域名解析和配置CNAME域名解析。
直播域名添加成功后,摩杜云视频直播会分配对应的CNAME地址。如果您想启用直播服务,则需要将直播域名的DNS解析记录指向CNAME地址,访问加速域名的请求才能转发到视频直播节点上,达到加速效果。
说明 由于Local DNS的解析记录存在缓存时间,因此配置了域名的CNAME解析记录之后大约会延迟10分钟才会显示CNAME解析记录配置成功。
如果您是初次接触域名解析,对“什么是域名解析”、“为什么要解析域名”、“如何进行域名解析”、
“什么是A记录”、“什么是CNAME记录”、“CNAME记录与A记录的差别”有疑问,请参见什么是域名解析?。
在配置CNAME域名解析前,您需要先了解CNAME记录和CNAME域名的概念。
CNAME记录(CNAME Record)
CNAME(Canonical Name)即别名,可以用来把一个域名解析到另一个域名,再由另一个域名提供IP地址。
例如,您有一台服务器上存放了很多资料,您使用docs.example.com去访问这些资源,但又希望通过documents.example.com也能访问到这些资源,那么您可以在您的DNS解析服务商添加一条CNAME记录,将documents.example.com指向docs.example.com,添加该条CNAME记录后,所有访问documents.example.com的请求都会被转到docs.example.com,获得相同的内容。
CNAME域名
接入视频直播,在摩杜云控制台添加域名后,您会得到一个摩杜云视频直播给您分配的CNAME域名。该CNAME域名的形式为*.*kunlun*.com。
您需要在您的DNS解析服务商添加一条CNAME记录,将自己的直播域名指向这个*.*kunlun*.com的域名。记录生效后,域名解析的工作就正式转向视频直播服务,该域名所有的请求都将转向视频直播节点,达到加速效果。
如果您的域名是在摩杜云,请参见
摩杜云解析与配置CNAME流程。
如果您的域名是在摩杜云,请参见
摩杜云解析与配置CNAME流程
如果您的域名在DNSPod解析,请参见
DNSPod配置CNAME流程。
如果您的域名在新网解析,请参见
新网配置CNAME流程。
说明
如果您的域名不是在摩杜云域名服务申请,可先将域名转入摩杜云域名服务管理,执行 域名转入流程,域名转入摩杜云域名服务后,再按步骤执行CNAME解析操作。
添加解析时如遇添加冲突,可考虑换一个域名,或参考解析记录互斥规则调整记录。
您需要分别对播流域名和推流域名进行CNAME解析操作。
配置CNAME后,不同的DNS服务商CNAME配置生效的时间也不同。您可以ping或dig您所添加的直播域名,如果被转向*.*kunlun*.com,即表示CNAME配置已经生效,视频直播推流域名和播流域名也已生效。
您也可以通过 视频直播控制台 的域名管理页面,查看CNAME配置是否已生效。
说明 CNAME栏中没有感叹号(!)提示,说明配置生效。
如果控制台显示不正常的解析,则可能有以下几种原因:
确认配置的CNAME解析的记录值是否和视频直播控制台获取的记录值一致,如不一致则解析失败。
配置完域名解析以后,运营商DNS的TTL还未更新,则需要耐心等待下,一般情况下TTL时间为10分钟,具体以解析配置的时候选择的TTL为准。
视频直播服务会去全网检查域名是否解析到视频直播,如果大部分区域已经解析,但是还是有个别地区没有解析的话,也会显示感叹号,需要全网解析生效以后才会显示正常。
如果您想启用视频直播加速服务,需要将您的域名指向摩杜云视频直播分配的CNAME地址,这样访问加速域名的请求才能转发到视频直播节点上,达到加速效果。本文档以您的域名在摩杜云解析为例。
添加域名后,您需要分别对推流域名和播流域名进行CNAME解析才可使用域名。
1.登录 视频直播控制台
2.在左侧导航栏选择域名管理,进入域名管理页面。
3.选择所需的播流域名,并复制域名对应的CNAME。
说明 若CNAME栏中有感叹号(!)提示,说明还没有配置CNAME信息。请您按照以下步骤添加CNAME记录。
4.添加CNAME记录。
i.登录摩杜云云解析DNS控制台。
ii.在左侧导航栏选择域名解析,进入域名解析页面,在您需要设置的域名后面,单击解析设置。
iii.单击添加记录,添加CNAME记录。
记录类型:选择CNAME。
主机记录:播流域名的前缀。
如您的加速域名为... | 主机记录为... |
---|---|
testcdn.moduyun.com | testcdn |
www.moduyun.com | www |
moduyun.co | @ |
*.moduyun.com | * |
解析路线:默认值。
记录值:粘贴复制的CNAME值。
TTL:默认值。
iv.单击确认,配置CNAME完毕。
5.播流域名进行CNAME解析之后,您需要按照步骤1~4对推流域名进行CNAME解析。
说明
解析参数设置后,CNAME域名解析正常会很快生效。
CNAME配置生效时间:新增CNAME记录会实时生效,而修改CNAME记录需要最多72小时生效时间。
添加时如遇添加冲突,可考虑换一个加速域名,或参考解析记录互斥规则自行调整冲突的记录。
配置完CNAME后,由于状态更新约有10分钟延迟,摩杜云视频直播控制台的域名列表页可能仍提示未配置CNAME,请忽略。
配置CNAME后,不同的DNS服务商CNAME配置生效的时间也不同。 您可以ping或dig您所添加的加速域名,如果被转向*.*kunlun*.com,即表示CNAME配置已经生效,视频直播推流域名和播流域名也已生效。
另外我们还提供域名在 DNSPod配置CNAME 和 新网配置CNAME。
如果您想启用视频直播加速服务,需要将您的域名指向摩杜云视频直播分配的CNAME地址,这样访问加速域名的请求才能转发到视频直播节点上,达到加速效果。本文档以您的域名在摩杜云解析为例。
添加域名后,您需要分别对推流域名和播流域名进行CNAME解析才可使用域名。
1.登录 视频直播控制台。
2.在左侧导航栏选择域名管理,进入域名管理页面。
3.选择所需的播流域名,并复制域名对应的CNAME。
说明 若CNAME栏中有感叹号(!)提示,说明还没有配置CNAME信息。请您按照以下步骤添加CNAME记录。
4.添加CNAME记录。
i.登录摩杜云云解析DNS控制台。
ii.在左侧导航栏选择域名解析,进入域名解析页面,在您需要设置的域名后面,单击解析设置。
iii.单击添加记录,添加CNAME记录。
记录类型:选择CNAME。
主机记录:播流域名的前缀。
如您的加速域名为... | 主机记录为... |
---|---|
testcdn.aliyunyun.com | testcdn |
www.aliyunyun.com | www |
aliyunyun.co | @ |
*.aliyunyun.com | * |
解析路线:默认值。
记录值:粘贴复制的CNAME值。
TTL:默认值。
iv.单击确认,配置CNAME完毕。
5.播流域名进行CNAME解析之后,您需要按照步骤1~4对推流域名进行CNAME解析。
说明
解析参数设置后,CNAME域名解析正常会很快生效。
CNAME配置生效时间:新增CNAME记录会实时生效,而修改CNAME记录需要最多72小时生效时间。
添加时如遇添加冲突,可考虑换一个加速域名,或参考解析记录互斥规则自行调整冲突的记录。
配置完CNAME后,由于状态更新约有10分钟延迟,摩杜云视频直播控制台的域名列表页可能仍提示未配置CNAME,请忽略。
配置CNAME后,不同的DNS服务商CNAME配置生效的时间也不同。 您可以ping或dig您所添加的加速域名,如果被转向*.*kunlun*.com,即表示CNAME配置已经生效,视频直播推流域名和播流域名也已生效。
另外我们还提供域名在 DNSPod配置CNAME 和 新网配置CNAME。
要启用视频直播服务,需要将您的推流域名和播流域名指向视频直播节点的CNAME地址, 这样访问直播域名的请求才能转发到视频直播节点上。本文为您介绍了如何在DNSPod配置CNAME。
说明 添加域名后,您需要分别对推流域名和播流域名进行CNAME解析才可使用域名。
1.登录 视频直播控制台
2.单击域名管理。
3.选择所需的播流域名,并复制域名对应的CNAME。
说明 CNAME 栏中有感叹号(!)提示的说明还没有配置CNAME信息。请您按照以下步骤配置CNAME信息。
4.添加CNAME记录。
i.前往DNSPod(腾讯云)的域名解析控制台。
ii.进入对应域名的域名解析页,单击添加记录。
iii.添加CNAME记录。
记录类型选择为CNAME。
主机记录即加速域名的前缀。例如,您的加速域名为testlive.moduyun.com,前缀就是testlive。
记录值填写您复制的CNAME值。
线路类型和TTL 默认值即可。
iv.单击保存 。
CNAME配置生效时间:新增CNAME记录会实时生效,而修改CNAME记录需要最多72小时生效时间。
添加时如遇添加冲突,可考虑换一个加速域名,或参考解析记录互斥规则调整记录。
配置完CNAME后,由于状态更新约有10分钟延迟,摩杜云视频直播控制台的域名列表可能仍提示未配置CNAME,请忽略。
配置CNAME完毕,CNAME配置生效后,视频直播服务也会立即生效。
5.播流域名进行CNAME解析之后,您需要按照同样的步骤对推流域名进行CNAME解析。
配置CNAME后,不同的DNS服务商CNAME配置生效的时间也不同。您可以ping或dig您所添加的域名,如果被转向 *.*kunlun*.com,即表示CNAME配置已经生效,视频直播推流域名和播流域名也已生效。
要启用视频直播服务,需要将您的推流域名和播流域名指向节点的CNAME地址,这样访问域名的请求才能转发到视频直播的节点上。本文为您介绍了如何在新网配置CNAME。
说明 添加域名后,您需要分别对推流域名和播流域名进行CNAME解析才可使用域名。
播流域名进行CNAME解析之后,您需要按照同样的步骤对推流域名进行CNAME解析。
1.登录 视频直播控制台
2.单击域名管理。
3.选择所需的播流域名,并复制域名对应的CNAME。
说明 CNAME栏中有感叹号(!)提示的说明还没有配置CNAME信息。请您按照以下步骤配置CNAME信息。
4.添加CNAME记录。
i.登录新网的域名解析控制台。
ii.进入对应域名的域名解析页。
iii.选择添加新的别名。
记录类型选择为CNAME。
主机记录即域名的前缀。例如,要添加testlive.moduyun.com,前缀就是testlive。
记录值填写为您复制的CNAME值。
解析线路和TTL默认值即可。
iv.单击提交。
CNAME配置生效时间:新增CNAME记录会实时生效,而修改CNAME记录需要最多72小时生效时间。
添加时如遇添加冲突,可考虑换一个加速域名,或参考解析记录互斥规则调整记录。
配置完CNAME后,由于状态更新约有10分钟延迟,摩杜云视频直播控制台的域名列表可能仍提示未配置CNAME,请忽略。
配置CNAME完毕,CNAME配置生效后,视频直播服务也会立即生效。
5.播流域名进行CNAME解析之后,您需要按照同样的步骤对推流域名进行CNAME解析。
配置CNAME后,不同的DNS服务商CNAME配置生效的时间也不同。 您可以ping或dig您所添加的加速域名,如果被转向*.*kunlun*.com,即表示CNAME配置已经生效,视频直播推流域名和播流域名也已生效。
在直播控制台的域名管理页面,您可以停用、启用和删除域名。本文介绍通过直播控制台管理域名的操作。
如果您暂时不想使用此域名,可以停用域名,请按照以下步骤操作。
说明 停用该直播域名后,域名信息仍保留。针对直播域名的请求,系统将自动回源处理。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您想要停用的域名,并在右侧的操作项中单击停用。
3.在弹出的窗口中,单击确定。
在状态列下可见域名当前为已停止状态。
如果您需要重新启用已经停用的域名,请您按照以下步骤操作。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您想要启用的域名,并在右侧的操作项中单击启用。
4.在弹出的窗口中,单击确定。
在状态列下可见域名当前为正常运行状态。
如果您想要删除不需要的域名,请按照以下步骤完成操作。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您想要删除的域名,并在右侧的操作项中单击更多,在下拉菜单中选择删除。
4.在弹出的窗口中,单击确定。
在直播控制台的域名管理页面,您可以停用、启用和删除域名。本文介绍通过直播控制台管理域名的操作。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要查看的推流域名或播流域名,单击域名配置。
4.进入直播管理 > 基本配置页面,单击基础信息页签。
在此页面,您可以查看该域名的CNAME、创建时间、业务类型、直播中心、加速区域。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择你要修改的推流域名或播流域名,单击域名配置。
4.单击加速区域后编辑图标,修改该域名的加速区域。
单击推流信息页签。
您可以查看关联推流域名的全部推流信息。
您可以进行添加或删除推流域名操作。可根据需求设置回调地址,返回当前域名推流状态。
设置回调地址。
单击添加图标,输入回调地址并单击确定。
配置推流回调地址后,视频直播会以消息回调的形式,通知当前域名推流状态,包括推流成功、断流状态。本文介绍如何配置推流回调地址。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的推流域名,单击域名配置。
4.进入直播管理 > 基本配置页面,单击推流信息页签。
5.在单击推流回调地址的编辑图标,输入回调地址并单击确定。
直播推流状态回调中开播(publish)状态回调逻辑
1.RTMP推流在摩杜云直播服务收到On Publish消息后2秒内,如果推流端不主动断开,摩杜云直播服务就会发推流成功回调。如果您的业务需要摩杜云直播收到On
Publish建联并真正收到直播流数据后才发推流成功回调,请摩杜云客服联系我们后台配置。
2.假设您有推流域名A和播流域名B,如果您的域名B使用拉流直播(固定拉流和触发回源拉流)需要回调。
请在域名A配置推流回调。配置后域名B的拉流回调逻辑与上一条一致,建联后默认2秒无主动断开即认为拉流成功,
需要真正收到数据才认为成功请摩杜云客服申请配置。
说明 建议业务方不仅根据回调通知判断推流、拉流接入正常,同时配合在线流列表查询推流正常后,再下发直播流播放地址给业务方。
本文档为您介绍了关联推流域名和播流域名的操作步骤及说明,若采用边缘推流方式,请先完成本文档操作内容。
您需要准备至少1个推流域名和1个播流域名。具体操作,请参见 添加域名。
关联推流和播流域名可以实现一个播流域名对应多个推流域名。
说明
一个推流域名不能同时关联多个播流域名,如果您的推流域名已经关联了其他播流域名,将会出现报错。
若需要使用多个播流域名播放同一个推流,请把多个播流域名关联成主播流域名和子播流域名的关系。具体操作,请参见
关联主、子播流域名。
边缘推流可以优先将视频推流至最优CDN节点,保证您访问的都是最佳的上行网络,减少因上行传输带来的卡顿、拉流缓慢的问题。 直播服务已在逐步下线旧有的中心推流方式。2019年2月21日之后新增的播放域名,不再支持中心推流的方式推流,请进行推流域名和播流域名的关联。
1.登录 视频直播控制台
2.在左侧导航栏,单击域名管理。
3.在域名管理页面,找到目标播流域名并单击其操作列的域名配置。
4.在基本配置中,单击推流信息页签,并单击未配置或添加推流信息按钮。
5.选择要关联的推流域名,单击确定。
若您需要删除关联的推流域名,单击删除按钮,并单击确定。
本文为您介绍关联主、子播流域名的步骤及说明,以及查看和解除关联关系的步骤。当您需要一个推流域名对应多个播流域名时,可通过关联主、子播流域名实现。
您需要准备至少2个播流域名。具体操作,请参见 添加域名。
关联主、子播流域名可以实现一个推流域名对应多个播流域名。
一个推流域名只能配置一个主播流域名,若需要使用多个播流域名播放同一个推流,请把多个播流域名关联成主播流域名和子播流域名的关系。
说明
子播流域名会继承主播流域名的推流配置、转码配置,子播流域名配置这些信息无效,例如转码模板需要配置在主播流域名。
子播流域名不能再嵌套子播流域名。
子播流域名添加成功后,将删除该域名原业务配置,请确认没有重要线上业务再操作,为避免故障建议使用新建域名。
1.登录 视频直播控制台
2.在左侧导航栏,单击域名管理。
3.在域名管理页面中,找到目标主播流域名,并单击其操作列的域名配置。
4.在基本配置页面中,单击播放信息页签,单击添加子播放信息按钮。
5.选择要关联的子播流域名,单击确定。
1.登录 视频直播控制台
2.在左侧导航栏,单击域名管理。
3.在域名管理页面中,找到需要查看的主播流域名,并单击其操作列的域名配置。
4.在基本配置中,单击播放信息,即可查看相关配置。
5.主播流域名的信息展示如下,可以查看主播流域名、子播流域名的全部播流信息。
1.登录 视频直播控制台
2.在左侧导航栏,单击域名管理。
3.在域名管理页面中,找到目标主播流域名,并单击其操作列的域名配置。
4.在基本配置页面中,单击播放信息页签,找到需要解除关联的子播流域名,并单击解除关联
功能项 | 主播流域名生效 | 子播流域名生效 | |
---|---|---|---|
直播管理 | 查看在线流 | √ | |
查看历史流 | √ | ||
查看禁推流 | √ | ||
设置禁推流 | √ | ||
录制文件管理 | 查询录制文件 | √ | |
录制索引剪辑 | √ | ||
截图管理 | 查询截图文件 | √ | |
域名管理 | 修改加速区域 | √ | |
添加推流信息 | √ | ||
删除推流信息 | √ | ||
添加子播放域名 | √ | 子域名间不允许嵌套 | |
HLS回源host | √ | 子域名回源HOST头需配置为主域名 | |
延迟配置高中低 | √ | ||
http头配置 | √ | ||
https配置 | √ | ||
refer防盗链 | √ | ||
url鉴权 | √ | ||
ip黑/白名单 | √ | ||
带宽峰值监控 | √ | ||
IPv6配置 | √ | ||
转码模板配置 | √ | ||
录制模板配置 | √ | ||
录制回调配置 | √ | ||
截图配置 | √ | ||
截图回调配置 | √ | ||
审核配置 | √ | ||
审核回调配置 | √ | ||
直播时移 | √ | ||
直播延时配置 | √ | ||
拉流配置 | √ | ||
海外链路加速配置 | √ | ||
数据监控 | 资源监控-流量带宽下行 | √ | |
资源监控-回源统计 | √ | ||
资源监控-HTTPCODE | √ | ||
实时监控-流量带宽 | √ | ||
实时监控-质量监控 | √ | ||
访问统计 | 独立访客数 | √ | |
用户分布 | √ | ||
用量查询 | 播放带宽/流量 | √ | |
推流路数 | √ | ||
转码时长 | √ | ||
截图张数 | √ | ||
直播时移 | √ | ||
海外链路加速 | √ | ||
日志管理 | 日志下载 | √ | |
实时日志推送 | √ |
您可以通过配置HTTP消息头,定义HTTP事务中的具体操作参数。通过阅读本文,您可以了解设置HTTP头响应的操作方法。
HTTP消息头是指,在超文本传输协议HTTP(Hypertext Transfer Protocol)的请求和响应消息中,协议头部的组件。HTTP消息头准确描述了正在获取的资源、服务器或客户端的行为。
说明
HTTP消息头的设置会影响该加速域名下所有资源,当您通过客户端(例如浏览器)访问资源时,会影响请求响应,但不会影响缓存服务器。
目前不支持泛域名设置。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > HTTP头配置。
5.单击添加
6.选择参数,输入取值,单击确定。
参数和描述请参见下表。
参数 | 描述 | 示例 |
---|---|---|
Content-Type | 指定客户端程序响应对象的内容类型。 | image |
Cache-Control | 指定客户端程序请求和响应遵循的缓存机制。 | no-cache |
Content-Disposition | 指定客户端程序把请求所得的内容存为一个文件时提供的默认的文件名。 | 123.txt |
Content-Language | 指定客户端程序响应对象的语言。 | zh-CN |
Expires | 指定客户端程序响应对象的过期时间。 | Wed, 21 Oct 2015 07:28:00 GMT |
Access-Control-Allow-Origin | 指定允许的跨域请求的来源。 |
*
说明 您可以填写*表示全部域名;也可以填写完整域名,例如www.moduyun.com。 |
Access-Control-Allow-Headers | 指定允许的跨域请求的字段。 | X-Custom-Header |
Access-Control-Allow-Methods | 指定允许的跨域请求方法。 |
POST、GET
说明 如果您需要同时添加POST和GET,请使用英文逗号(,)隔开。 |
Access-Control-Max-Age | 指定客户端程序对特定资源的预取请求返回结果的缓存时间。单位:秒。 | 600 |
Access-Control-Expose-Headers | 指定允许访问的自定义头信息。 | Content-Length |
安全超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer,简称 HTTPS), 是以安全为目标的HTTP通道。简单来说,HTTPS是HTTP的安全版,即将HTTP用SSL或TLS协议进行封装,HTTPS的安全基础是SSL或TLS。
传输过程中对用户的关键信息进行加密,防止类似Session ID或者Cookie内容被攻击者捕获造成的敏感信息泄露等安全隐患。
传输过程中对数据进行完整性校验,防止DNS或内容遭第三方劫持、篡改等中间人攻击(MITM)隐患。
摩杜云直播服务提供HTTPS安全加速方案,仅需开启安全加速模式后上传加速域名证书或私钥,并支持对证书进行查看、停用、启用、编辑操作。
证书配置正确且处于开启状态,同时支持HTTP访问和HTTPS访问。证书不匹配或者停用证书,仅支持HTTP访问。
配置相关
功能 | 说明 |
---|---|
停用和启用HTTPS功能 | 停用后,不支持HTTPS请求且将不再保留证书或私钥信息。启用后,再次开启证书,需要重新上传证书或私钥。 |
查看证书 | 允许用户查看证书,但是只支持查看证书,由于私钥信息敏感不支持私钥查看,请您妥善保管证书相关信息。 |
修改编辑证书 | 支持修改编辑证书,但注意生效时间是1小时,请慎重操作。 |
证书相关
开启HTTPS安全加速功能的加速域名,须上传证书,包含证书或私钥,均为PEM格式。
说明 直播服务采用的Tengine服务是基于Nginx的,因此只支持Nginx能读取的证书,即PEM格式。
只支持带SNI信息的SSL或TLS握手。
您上传的证书和私钥要匹配,否则会校验出错。
更新证书的生效时间是1小时。
不支持带密码的私钥。
步骤一:购买证书
开启HTTPS安全加速,需要具备匹配加速域名的证书。您可以在云盾证书服务单击立即购买,购买证书。
步骤二:配置直播域名
1.打开HTTPS安全加速。
i.登录 视频直播控制台
ii.单击域名管理,选择需要配置HTTPS安全加速的播流域名,并单击域名配置。
iii.单击HTTPS配置,并单击HTTPS证书下方的开关按钮。
2.选择证书。
摩杜云直播服务支持两种证书部署。
自有证书:需要设置证书名称后上传证书内容和私钥,该证书将会在云盾证书控制台保存,可以在我的证书部分查看。
摩杜云证书:支持在云盾证书服务购买过的证书,可以通过证书名称直接选择适配该加速域名。
说明 仅支持PEM的证书格式。
3.设置跳转类型。
单击跳转类型右方的修改配置。
支持设置强制跳转,即自定义将用户的原请求方式进行强制跳转。
例如,开启HTTP > HTTPS跳转后,用户发起了一个HTTP请求,服务端返回302重定向响应,原来的HTTP请求强制重定向为HTTPS请求。
默认:兼容用户的HTTP和HTTPS请求。
HTTP > HTTPS跳转:用户的请求将强制重定向为HTTPS请求。
HTTPS > HTTP跳转:用户的请求将强制重定向为HTTP请求。
步骤三:验证证书是否生效
设置完成待证书生效后,使用HTTPS方式访问资源,如果浏览器中出现绿色HTTPS标识,表明当前与网站建立的是私密连接,HTTPS安全加速生效。
您需要配置HTTPS证书,才能通过HTTPS方式访问资源,实现HTTPS安全加速。本文为您介绍了视频直播支持的证书格式和不同证书格式的转换方式。
Root
CA机构提供的证书是唯一的,一般包括Apache、IIS、Nginx和Tomcat。视频直播使用的证书是Nginx,证书格式为.crt,证书私钥格式为.key。
证书上传格式为:
请将开头-----BEGIN CERTIFICATE-----和结尾 -----END CERTIFICATE-----一并上传。
每行64字符,最后一行不超过64字符。
在Linux环境下,PEM格式的证书示例如下图。
中级机构颁发的证书文件包含多份证书,您需要将服务器证书与中间证书拼接后,一起上传。
说明 拼接规则为:服务器证书放第一份,中间证书放第二份。一般情况下,机构在颁发证书的时候会有对应说明, 请注意规则说明。
中级机构颁发的证书链:
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
证书链规则:
证书之间不能有空行。
每一份证书遵守证书上传的格式说明。
RSA私钥规则:
本地生成私钥:openssl genrsa -out privateKey.pem 2048。其中,privateKey.pem为您的私钥文件。
以-----BEGIN RSA PRIVATE KEY-----开头,以-----END RSA PRIVATE KEY----- 结尾,请将这些内容一并上传。
每行64字符,最后一行长度可以不足64字符。
如果您并未按照上述方案生成私钥,得到如-----BEGIN PRIVATE KEY-----或-----END PRIVATE KEY-----样式的私钥时,您可以按照如下方式转换:
openssl rsa -in old_server_key.pem -out new_server_key.pem
然后将new_server_key.pem的内容与证书一起上传。
HTTPS配置只支持PEM格式的证书,其他格式的证书需要转换成PEM格式,建议通过openssl工具进行转换。下面是几种比较流行的证书格式转换为PEM格式的方法。
DER转换为PEM
DER格式一般出现在Java平台中。
证书转化:
openssl x509 -inform der -in certificate.cer -out certificate.pem
私钥转化:
openssl rsa -inform DER -outform pem -in privatekey.der -out privatekey.pem
P7B转换为PEM
P7B格式一般出现在Windows Server和Tomcat中。
证书转化:
openssl pkcs7 -print_certs -in incertificat.p7b -out outcertificate.cer
获取outcertificat.cer里面-----BEGIN CERTIFICATE-----, -----END
CERTIFICATE-----的内容作为证书上传。
私钥转化:P7B证书无私钥,您只需在CDN控制台填写证书部分,私钥无需填写。
PFX转换为PEM
PFX格式一般出现在Windows Server中。
证书转化:
openssl pkcs12 -in certname.pfx -nokeys -out cert.pem
私钥转化:
openssl pkcs12 -in certname.pfx -nocerts -out key.pem -nodes
强制跳转功能,将客户端至边缘节点的原请求方式强制重定向为HTTP或者HTTPS。您可以阅读本文,了解配置强制跳转的操作步骤。
配置强制跳转之前,请您确保已成功配置HTTPS证书,具体操作,请参见 配置HTTPS安全加速。
如果您的加速域名开启了HTTPS安全加速,您可以自定义设置,将终端用户的原请求方式进行强制跳转。
例如,您开启HTTP -> HTTPS,终端用户发起了一个HTTP请求,服务端返回301重定向响应,原来的HTTP请求强制重定向为HTTPS请求,如下图所示。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > HTTPS配置。
5.单击修改配置。
6.选择跳转类型。
跳转类型 | 说明 |
---|---|
默认 | 同时支持HTTP和HTTPS方式的请求。 |
HTTPS -> HTTP | 客户端到边缘节点的请求将强制重定向为HTTP方式。 |
HTTP -> HTTPS | 客户端到边缘节点的请求将强制重定向为HTTPS方式,确保访问安全。 |
7.单击确定。
为了保障互联网通信的安全性和数据完整性,视频直播提供TLS版本控制功能。 您可以根据不同域名的需求,灵活地配置TLS协议版本。本文为您介绍TLS协议的配置方法。
执行该操作前,请您确保已成功配置HTTPS证书,操作方法请参见 配置HTTPS安全加速。
TLS(Transport Layer Security)即安全传输层协议,在两个通信应用程序之间提供保密性和数据完整性。 最典型的应用就是HTTPS。HTTPS,即HTTP over TLS,就是安全的HTTP,运行在HTTP层之下,TCP层之上,为HTTP层提供数据加解密服务。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理,进入域名管理页面。
3.选择您要配置的播流域名或推流域名,单击域名配置。
4.单击直播管理 > HTTPS配置。
5.在TLS版本控制区域,根据所需开启或关闭对应的TLS版本。
说明 如果没有成功配置HTTPS证书,则不会显示TLS版本控制区域。
TLS协议说明如下表所示。
协议 | 说明 | 支持的主流浏览器 |
---|---|---|
TLSV1.0 | RFC2246,1999年发布,基于SSLv3.0,该版本易受BEAST和POODLE等攻击, 另外支持较弱加密,对当今网络连接的安全已失去应有的保护效力,不符合PCI DSS合规判定标准。 |
IE6+
Chrome 1+ Firefox 2+ |
TLSV1.1 | RFC4346,2006年发布,修复TLSv1.0若干漏洞。 |
IE 11+
Chrome 22+ Firefox 24+ Safari 7+ |
TLSV1.2 | RFC5246,2008年发布,目前广泛使用的版本。 |
IE 11+
Chrome 30+ Firefox 27+ Safari 7+ |
TLSV1.3 | RFC8446,2018年发布,最新的TLS版本,支持0-RTT模式(更快),只支持完全前向安全性密钥交换算法(更安全)。 |
Chrome 70+
Firefox 63+ |
说明 目前TLSV1.0、TLSV1.1和TLSV1.2版本默认开启。
为限制访问视频直播缓存节点资源的用户,提高视频直播的安全性, 您可以配置Referer防盗链设置黑名单或白名单,实现对访客身份的识别和过滤。通过本文,您可以了解Referer防盗链的配置方法。
防盗链功能基于HTTP协议支持的Referer机制,通过Referer跟踪来源,对来源进行识别和判断。
目前防盗链功能支持黑名单或白名单机制,您对资源发起请求后,请求到达视频直播节点,
视频直播节点会根据您预设的防盗链黑名单或白名单,对访客的身份进行过滤。符合规则的用户可以顺利请求到资源,不符合规则的用户,请求会返回403响应码。
说明
防盗链是可选配置,默认不启用。
黑白名单互斥,同一时间您只能选择一种方式。
配置防盗链后,视频直播支持自动添加泛域名。例如,如果您填写a.com,则最终配置生效的是*.a.com,所有子级域名都会生效。
您可以设置是否允许空Referer字段访问资源,即允许通过浏览器地址栏直接访问资源URL。
由于移动端一般获取不到referer,目前默认支持空referer访问。如果设置为不允许空referer访问,在移动端可以配合摩杜云播放器SDK设置referer。
当您设置不允许空referer访问时,请务必配置HTTPS 安全加速,并开启强制跳转HTTPS(HTTP >
HTTPS),部分浏览器处理HTTPS请求HTTP的资源时,会移除referer,导致无法访问。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > 访问控制。
5.开启Refer防盗链。
6.配置Refer类型和规则,单击确定。
Referer防盗链类型及说明如下表所示。
类型 | 说明 |
---|---|
黑名单 | 黑名单内的域名均无法访问当前的资源。 |
白名单 | 只有白名单内的域名能访问当前资源,白名单以外的域名均无法访问当前的资源 |
因Refer防盗链方式无法彻底保护直播资源,建议您配置URL鉴权来保护直播资源不被非法盗用。本文介绍控制台配置URL鉴权的步骤。
URL鉴权功能通过摩杜云视频直播服务与客户业务服务配合,形成了更为安全可靠的直播资源防盗方法。
1.客户的直播业务服务端提供加密URL,URL中包含权限验证信息。
2.推流或播放用户使用加密后的URL向摩杜云直播服务发起请求。
3.摩杜云直播服务加速节点对加密URL中的权限信息进行验证,判断请求的合法性。正常响应合法请求,拒绝非法请求。
说明 您的请求URL经过摩杜云直播服务鉴权后,URL中的特殊字符,例如:=、+等会被转义。
了解更多关于URL鉴权的适用场景、鉴权URL的组成、原理等,请参见 URL鉴权。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > 访问控制。
5.单击URL鉴权页签,单击修改配置。
说明 默认开启URL鉴权,初次关闭,需要了解盗刷风险并签署《直播服务关闭URL鉴权免责协议》。
6.配置URL鉴权信息,单击确定。
配置项和说明如下表所示。
配项置 | 说明 |
---|---|
鉴权类型 |
视频直播推流和播流域名仅支持使用鉴权A,来实现对源站资源的有效保护。
说明
URL鉴权错误,都会返回403报错,请重新计算。
|
主KEY | 初始化时,会随机生成一个主用密码。您可以重新输入自定义的鉴权方式对应的主用密码。 |
备KEY | 输入自定义的鉴权方式对应的备用密码。 |
有效时长 | 有效时长是指该URL鉴权仅在有效期内可用来发起推流或者播放。直播推流和播放都是长链接行为,在有效期内已经发起的直播推流或者播放行为,不会因为有效期过期而中止,但新发起的推流和播放请求会因为有效时长过期会失败。 初始化时,默认为30分钟。你可以自定义输入鉴权方式的默认有效时长,单位:分钟。 |
7.生成鉴权URL。
在生成鉴权URL区域,配置原始URL和鉴权信息。
配置项和说明如下表所示。
参数 | 说明 |
---|---|
原始URL | 您可以输入完整的原始URL地址,例如:https://www.moduyun.com。 |
鉴权类型 | 默认为鉴权A方式。 |
鉴权KEY | 您可以根据所需,设置鉴权密码。鉴权KEY是鉴权URL设置中配置的主KEY或备KEY。 |
有效时间 | 您可以根据所需,设置URL鉴权的有效时长。单位为:秒,例如:1800。
说明 视频直播URL鉴权的有效时间默认为30分钟,如果您想使链接 生成的有效时间小于30分钟,需要将有效时间设置为负数。例如,您想设置链接有效时间为10s,则需要设置有效时间为-1790s。 |
8.单击开始生成。
为限制访问视频直播缓存节点资源的用户,提升视频直播的安全性, 您可以设置黑名单或白名单,实现对访客身份的识别和过滤。您可以阅读本文了解IP黑白名单的配置方法。
添加IP到黑名单,那么该IP无法访问当前加速域名。
添加IP到白名单,那么只有该IP能够访问当前加速域名。
说明
IP黑名单和白名单均支持IPv6地址(地址中的字母仅支持大写字母),例如:2001:DB8:0:23:8:800:200C:417A或2001:0DB8:0000:0023:0008:0800:200C:417A。IPv6地址不支持缩写格式,例如:2001:0DB8::0008:0800:200C:417A。
IP黑名单和白名单均支持IP网段添加。例如:192.168.0.0/24,24表示采用子网掩码中的前24位有效位,即用32-24=8bit来表示主机号,该子网可以容纳2^8-2=254台主机。故192.168.0.0/24表示IP网段范围是:192.168.0.1~192.168.0.254。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > 访问控制。
5.单击IP黑/白名单页签,开启IP黑/白名单。
6.配置名单类型和规则,单击确定
类型 | 说明 |
---|---|
黑名单 | 黑名单内的域名均无法访问当前的资源。 |
白名单 | 只有白名单内的域名能访问当前资源,白名单以外的域名均无法访问当前的资源。 |
视频直播支持针对指定播流域名的指定协议进行禁播,本文介绍配置协议禁播的操作步骤。
协议禁播功能是对播流域名(包括主、子播流域名)进行协议级别的禁播,开启后此域名此协议的播放地址将无法播放直播流。
除了控制台,您还可以通过调用BatchSetLiveDomainConfigs接口,通过Functions参数传入alilive记录,详情请参见
批量配置域名。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > 访问控制。
5.单击协议禁播页签,选择需要禁播的协议,开启禁播功能。
您可以根据域名的实际使用情况,选择开启或者关闭带宽峰值监控功能。
说明
设置带宽峰值监控功能后,当前直播服务不受影响。
带宽峰值监控功能暂不支持泛域名,设置后不生效。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > 高级配置。
5.开启带宽峰值监控。
6.设置带宽上限阈值。
带宽单位可选Mbps、Gbps和Tbps。
7.单击确定。
通过开启IPv6开关,支持IPv6的客户端以IPv6协议访问直播流。
摩杜云视频直播中国内地的节点已经支持接收IPv6协议的请求,您可以在域名配置中开启IPv6开关。
开启IPv6开关后,当您的用户处于IPv6环境,且就近的视频直播节点也支持IPv6的请求时,客户端可以通过IPv6协议访问视频直播节点。当用户就近区域的视频直播节点不支持IPv6协议时,客户端仍可以IPv4协议访问视频直播节点。
说明 目前海外、中国香港、中国澳门和中国台湾节点不支持IPv6配置。
推流和播流域名都支持配置IPv6。该操作以播流域名为例,为您展示配置IPv6的操作。推流域名与播流域名操作一致。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击直播管理 > IPv6配置。
5.开启IPv6开关。
通过阅读本文,您可以了解配置视频直播通用转码服务的操作步骤。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 转码模板配置。
5.单击通用转码页签,单击添加。
6.配置转码模板。
转码模板参数及说明如下表所示。
参数 | 说明 |
---|---|
AppName | AppName必须与推流地址中的AppName名称对应,转码模板才能生效。 |
触发转码 |
开启时:首次拉流时才启动转码。
关闭时:只要有推流就启动转码,与是否有拉流无关。 |
转码模板类型 |
转码模板类型:标准模板和窄带高清™模板。每个类型提供四种转码模板:流畅、标清、高清、超清。
标准模板和窄带高清™模板质量和性能不同,价格也不同。
说明
转码模板类型一次仅能选择一个,转码模板可以一次选择多个。
|
7.单击确定。
通过阅读本文,您可以根据实际的视频输出需求,自定义配置分辨率、帧率、码率等参数。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 转码模板配置。
5.单击自定义转码页签,单击添加。
6.配置转码模板。
转码模板参数及说明如下表所示。
参数 | 说明 |
---|---|
AppName | AppName必须与推流地址中的AppName名称对应,转码模板才能生效。 |
转码模板类型 | 转码模板类型:标准模板、窄带高清™模板和纯音频转码模板。 标准模板和窄带高清™模板质量和性能不同,价格也不同。原画模板 不对视频进行处理。纯音频转码模板删除视频只输出OPUS音频流。 |
编码格式(标准模板) | 支持H.264和H.265。 |
分辨率 |
视频输出的分辨率,单位:像素。不同的分辨率档位对应不同的价格,分辨率档位如下所示:
LD:(640×480)及以下。 SD:(1280×720)及以下。 HD:(1920×1080)及以下。 2K:(2560×1440)及以下。 4K:(3840×2160)及以下。
说明
自定义转码计费根据分辨率档位(LD、SD、HD、2K、4K)决定,与通用模板中标准模板的模板ID(包括lld、lsd、lhd、lud)和窄带高清™模板的模板ID(包括ld、sd、hd、ud)无关,请勿混淆。
以输出SD(1280×720)规格为例: 如果输出视频的分辨率长边小于等于1280且短边小于等于720,则该视频属于该输出规格。 如果输出视频的长边大于1280或输出视频的短边大于720,则该输出视频属于更高的输出规格。 |
视频码率 |
分辨率使用指定的码率,单位:Kbps。分辨率档位指定的码率如下所示:
LD:100~800。 SD:200~1500。 HD:500~4000。 2K:2000~8000。 4K:4000~30000。 |
视频帧率 | 输出视频帧率,单位:FPS。数值低于或等于输入帧率。 |
视频GOP | 输出视频GOP即Group of picture(图像组),指两个I帧之间的间隔,数值低于或等于输入值。为了保障低延时效果不能大于3秒。 |
编码格式(纯音频转码) | 目前仅支持AAC编码格式。 |
编码档次(纯音频转码) |
LC-AAC:低复杂性高级音频编码。转码效率较高。
HE-AAC:高效性高级音频编码。在低音频码率(通常128 Kbps以下)时音效要高于LC-AAC。 |
码率(纯音频转码) | 音频码率,取值范围:8~1000。 |
声道数(纯音频转码) | 声音轨道的个数,取值:1或2。 |
触发转码 |
开启时:首次拉流时才启动转码。
关闭时:只要有推流就启动转码,与是否有拉流无关。 |
模板ID |
转码模板ID。
模板ID是拼接转码地址的参数,拼接方式参见 推流地址和播放地址 。输出的直播地址后携带模板ID参数即可访问指定分辨率的转码流。 说明 请勿设置与通用转码模板ID相同的模板ID。通用转码模板ID包括:lld、lsd、lhd、lud、ld、sd、hd、ud。 |
7.单击确定。
通过阅读本文,您可以了解RTS转码的基本操作配置和说明。
低延时直播(RTS)H5播放SDK对音视频解码存在以下限制。具体详情,请参见
低延时直播。
不支持视频含B帧,否则会出现画面跳跃。
不支持AAC编码,否则会出现噪音。
建议您使用RTS低延时直播时推流配置为不含B帧。如果您无法控制直播推流输入情况,可以使用RTS转码功能自定义设置转码的分辨率、帧率、码率、音频编码格式、B帧等参数。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 转码模板配置。
5.单击RTS转码页签,单击添加。
6.配置转码模板。
转码模板参数及说明如下表所示。
参数 | 说明 |
---|---|
AppName | AppName必须与推流地址中的AppName名称对应,转码模板才能生效。 |
转码模板类型 | 转码模板类型:标准模板、窄带高清™模板、原画模板和纯音频转码模板。 标准模板和窄带高清™模板质量和性能不同,价格也不同。原画模板不对视频进行处理。纯音频转码模板删除视频只输出OPUS音频流。 |
分辨率 |
视频输出的分辨率,单位:像素。不同的分辨率档位对应不同的价格,分辨率档位如下所示:
LD:(640X480)及以下。 SD:(1280X720)及以下。 HD:(1920X1080)及以下。 2K:(2560X1440)及以下。 4K:(3840X2160)及以下。 说明 自定义转码计费根据分辨率档位(LD、SD、HD、2K、4K)决定, 与通用模板中标准模板的模板ID(包括lld、lsd、lhd、lud) 和窄带高清™模板的模板ID(包括ld、sd、hd、ud)无关,请勿混淆。 分辨率档位判定规则:输出规格按输出视频分辨率的长边和短边是否属于输出规格划定的范围进行判定。以输出SD(1280X720)规格为例: 如果输出视频的分辨率长边小于等于1280且短边小于等于720,则该视频属于该输出规格。 如果输出视频的长边大于1280或输出视频的短边大于720,则该输出视频属于更高的输出规格。 |
视频码率 |
分辨率使用指定的码率,单位:Kbps。分辨率档位指定的码率如下所示:
LD:100~800。 SD:200~1500。 HD:500~4000。 2K:2000~8000。 4K:4000~30000。 |
视频帧率 | 输出视频帧率,数值低于或等于输入帧率。 |
视频GOP | 输出视频GOP即Group of picture(图像组),指两个I帧之间的间隔,数值低于或等于输入值。为了保障低延时效果不能大于3秒 |
去B帧 | 开启时:输出视频编码将不含B帧。 |
OPUS转码 | 开启时:输出音频编码将改成OPUS编码,48 KHz采样率。 |
触发转码 |
开启时:首次拉流时才启动转码。
关闭时:只要有推流就启动转码,与是否有拉流无关。 |
模板ID |
转码模板ID。
模板ID是拼接转码地址的参数,拼接方式参见 拼接规则 。
输出的直播地址后携带模板ID参数即可访问指定分辨率的转码流。
说明 请勿设置与通用转码模板ID相同的模板ID。通用转码模板ID包括:lld、lsd、lhd、lud、ld、sd、hd、ud |
7.单击确定。
通过阅读本文,您可以了解多码率的基本操作配置和说明,以及多码率地址的规则。
若您当前的域名第一次添加多码率功能,需要联系摩杜云客服开启。 您可以先进行模板配置,再提交申请,开启后可正常使用。当您使用其他域名第一次使用多码率需要再次申请开通。
部分地区网络环境差异较大,网络波动会影响终端的播放体验, 因此业务方需要配置多码率来匹配带宽情况。配置多码率转码后, 播放器可根据终端网络带宽环境,自动播放相应码率的直播流,从而提高播放体验。
说明 此功能仅支持新加坡、日本、印尼直播中心的播流域名。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 转码模板配置。
5.单击多码率转码页签,单击添加。
6.添加多码率转码模板组。
i.添加多码率转码模板组基本信息。
参数及说明如下表:
参数 | 说明 |
---|---|
AppName | AppName必须与推流地址中的AppName名称对应,转码模板才能生效。 |
模板组ID | 转码模板组ID。模板组ID是拼接多码率转码地址的参数,支持数字、大小写字母、短横线,添加不超个10个字符。 |
封装格式 | 目前仅支持HLS。 |
触发转码 | 目前仅支持推流时触发转码。会产生转码费用,暂不支持播流时触发转码。 |
时间戳对齐 | 开启后每个模板的GOP项不可设置,采用源视频的GOP。 |
ii.单击+添加模板,并填写转码模板的参数。
不同模板类型需填写的参数可能不同,参数及说明如下表:
参数 | 说明 |
---|---|
模板ID |
转码模板ID。
模板ID是拼接转码地址的参数,拼接方式参见推流地址和播放地址。 输出的直播地址后携带模板ID参数即可访问指定分辨率的转码流。 说明 请勿设置与通用转码模板ID相同的模板ID。通用转码模板ID包括:lld、lsd、lhd、lud、ld、sd、hd、ud。 |
转码模板类型 | 转码模板类型:标准模板、窄带高清™模板和纯音频转码模板。 标准模板和窄带高清™模板质量和性能不同,价格也不同。原画模板不对视频进行处理。纯音频转码模板删除视频只输出OPUS音频流。 |
编码格式(标准模板) | 支持H.264和H.265。 |
分辨率 |
视频输出的分辨率,单位:像素。不同的分辨率档位对应不同的价格,分辨率档位如下所示:
LD:(640×480)及以下。 SD:(1280×720)及以下。 HD:(1920×1080)及以下。 2K:(2560×1440)及以下。 4K:(3840×2160)及以下。 说明 转码计费根据分辨率档位(LD、SD、HD、2K、4K)决定,与 通用模板中标准模板的模板ID(包括lld、lsd、lhd、lud)和 窄带高清™模板的模板ID(包括ld、sd、hd、ud)无关,请勿混淆。 分辨率档位判定规则:输出规格按输出视频分辨率的长边和短边是否属于输出规格划定的范围进行判定。以输出SD(1280×720)规格为例: 如果输出视频的分辨率长边小于等于1280且短边小于等于720,则该视频属于该输出规格。 如果输出视频的长边大于1280或输出视频的短边大于720,则该输出视频属于更高的输出规格。 |
视频码率 |
分辨率使用指定的码率,单位:Kbps。分辨率档位指定的码率如下所示:
LD:100~800。 SD:200~1500。 HD:500~4000。 2K:2000~8000。 4K:4000~30000。 |
视频帧率 | 输出视频帧率,单位:FPS。数值低于或等于输入帧率。 |
视频GOP | 输出视频GOP即Group of picture(图像组),指两个I帧之间的间隔,数值低于或等于输入值。为了保障低延时效果不能大于3秒。 |
编码格式(纯音频转码) | 目前仅支持AAC编码格式。 |
编码档次(纯音频转码) |
LC-AAC:低复杂性高级音频编码。转码效率较高。
HE-AAC:高效性高级音频编码。在低音频码率(通常128 Kbps以下)时音效要高于LC-AAC。 |
码率(纯音频转码) | 音频码率,取值范围:8~1000。 |
声道数(纯音频转码) | 声音轨道的个数,取值:1或2。 |
带宽上限阈值 | 建议设置大于视频码率的数值。 |
7.单击确定。
示例:
http://test****.moduyun.com/appnanme/steamname_groupid.m3u8?moduyunols=on&auth_key=123456789
其中moduyunols=on为必填的固定字段。
appname、streamname和groupid根据实际业务设定。
涉及鉴权的更多信息,请参见
推流地址和播放地址。
您也可以前往地址生成器选择对应的转码模板组,生成多码率地址。具体操作,请参见
地址生成器。
视频直播服务将直播内容进行录制存储,并转入视频点播系统中。 视频点播支持使用云剪辑功能对直播流的内容进行剪辑加工,实现视频直播与短视频的内容联动。
您需要先开通视频点播服务,才能将视频存储至VOD。视频点播服务,具体请参见开始使用视频点播。
注意 同一路直播流录制到VOD和录制到MOS Bucket二者不能同时生效,只能选其一。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 录制配置。
5.单击存储至VOD页签,单击添加。
6.配置录制模板。
录制模板参数及说明如下表所示。
参数 | 描述 |
---|---|
AppName | 视频的应用名称,输入的AppName必须与直播推流的AppName保持一致,方可生效。如果您想要进行域名级别录制,输入星号(*)号即可。 |
StreamName |
存储至VOD支持流级别的录制。您只需输入指定的流名称即可。如果您想要进行全部流录制,即该AppName下的流全部录制,输入星号(*)号即可。
说明 AppName与StreamName参数支持英文、数字、“-”、“_”符号,长度限制在255字符以内。 |
录制周期 |
录制周期范围为15~360分钟,最大支持 6 小时录制。超过 6 小时,系统将按照录制命名规则生成新文件。ts切片时长默认为
30s。
说明 录制周期为当前直播转为点播文件后的最大时长。 |
录制转码模板 |
从列表中选择存储转码规则,可以在点播服务中对录制的视频进行转码处理。
存储转码规则设置是将录制下来的视频转换为可供传播的点播文件格式。可转码为不同规格的视频,也可以不转码即保持原画格式。
录制转码模板具体操作,请参见视频点播转码配置。
说明 视频点播转码模板所在区域需与您当前域名所在区域需保持一致。 例如:当前域名为华东2区,视频点播转码模板区域也需要在华东2区。 |
7.单击确定。
如果要将直播录制下来的文件存储在MOS产品中,您需要先创建MOS Bucket,授予直播写入MOS的权限,才能在MOS列表进行查看、下载、播放等操作。
如果更改MOS录制配置,需要进行重新推流配置才生效。
1.登录 MOS控制台。
2.在右侧Bucket 管理页签中,单击创建Bucket。
3.输入Bucket信息。
说明
Bucket地域与直播域名所在地域必须一致。
如,直播域名所在地域是华东2,则,Bucket也必须选择 华东2(北京)。Bucket创建完成后,您可以根据使用需求来创建Bucket的文件夹。
4.在Bucket列表中,单击您创建的Bucket名称,并在文件管理页面单击新建目录 。
说明 当您的录制文件较多时,创建目录是为了对录制内容进行分类,方便对录制内容进行管理。
5.在新建目录中,输入目录名,并单击确定。
视频直播录制文件和截图文件保存到用户MOS,需要授权live访问MOS,目前使用的是ModuyunMTSDefaultRole角色。
1.要将直播录制下来的文件存储在用户MOS的Bucket中,需要对直播服务Live授权访问MOS,去授权。
2.查看授权是否成功。
i.使用摩杜云账号登录摩杜云官网,进入RAM访问控制控制台。
ii.在左侧导航栏选择RAM角色管理。
iii.搜索角色:ModuyunMTSDefaultRole,单击ModuyunMTSDefaultRole可查看此角色权限。
3.如使用RAM账号查看是否有ModuyunMTSDefaultRole授权,需要摩杜云账号为其RAM账号配置ModuyunRAMFullAccess权限
如录制文件存储在MOS中,您可以配置一个CDN加速域名,查看录制视频时会进行CDN加速服务。 CDN会将您MOS存储的视频分发到全国各地的节点。用户访问时只需访问最近的CDN节点读取文件,而无需访问MOS的源文件,也不会消耗MOS的外网流量。 不仅可提升边缘用户的访问速度和体验,同时,CDN的外网流量费用相对MOS外网流量较低,仅为MOS外网流量的50%,可有效的节省整体应用的网络费用。
1.在您所创建的bucket页面,在左侧导航栏选择传输管理,单击域名管理页签的绑定域名。
2.在绑定域名中,配置CDN加速域名,并单击提交。
如果您仅对视频进行存储,可不用配置CDN加速域名。
说明 CDN加速域名与直播服务域名不能是同一个,请您分别进行配置。
为了便于您对录制内容进行回看,视频直播服务将直播内容进行录制存储,并存储到MOS中。您可以在MOS中进行回看。
创建MOS Bucket。具体操作,请参见 配置MOS。
说明 MOS Bucket必须与域名的直播中心同地域,不支持跨地域录制。
说明 同一路直播流录制到VOD和录制到MOS Bucket二者不能同时生效,只能选其一。
1.单击模版配置 > 录制配置。
2.单击存储至MOS页签,单击添加。
3.配置录制模板。
录制模板参数及说明如下表所示。
参数 | 描述 |
---|---|
AppName | 视频的应用名称,输入的AppName必须与直播推流的AppName保持一致,方可生效。如果您想要进行域名级别录制,输入星号(*)号即可。 |
StreamName |
存储至MOS支持流级别的录制。您只需输入指定的流名称即可。如果您想要进行全部流录制,即该AppName下的流全部录制,输入星号(*)号即可。
说明 AppName与StreamName参数支持英文、数字、短划线(-)、下划线(_)符号,长度限制在255字符以内。 |
存储格式 |
支持flv、m3u8、mp4三种格式。
说明 目前青岛区域暂不支持flv与mp4格式的录制。 |
存储规则 |
默认的存储路径为
m3u8:record/{AppName}/{StreamName}/{EscapedStartTime }_{EscapedEndTime } ts:record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence} mp4:record/{AppName}/{StreamName}/{EscapedStartTime }_{EscapedEndTime } flv:record/{AppName}/{StreamName}/{EscapedStartTime }_{EscapedEndTime } 示例 AppName为app,StreamName为stream,当录制m3u8格式的存储路径为record/app/stream/{EscapedStartTime}_{EscapedEndTime }。 |
录制周期 |
录制周期范围为15分钟~360分钟,最大支持6小时录制。超过6小时,系统将按照录制命名规则生成新文件。ts切片时长默认为30秒。
说明 录制周期为当前直播转为点播文件后的最大时长。 |
存储位置 |
选择存储位置。
说明 存储Bucket列表中包含标准Bucket和媒体bucket。标准Bucket是MOS Bucket,用于存储。媒体Bucket是MPS定制的Bucket,存入媒体Bucket中的视频, 可执行MPS转码任务。目前Bucket列表中,未对Bucket做区分。如果您需要将视频转成媒体文件,需要自行记住媒体Bucket的名称。 |
4.单击确定。
1.单击模版配置 > 录制配置。
2.单击存储至MOS页签,单击回调地址:后的编辑图标。
3.在弹出的回调设置窗口中,输入需要配置的回调地址。
您还可以通过AddLiveRecordNotifyConfig接口添加域名级别录制回调配置,请参见添加直播录制回调配置。
回调方式和回调内容,请参见
回调管理。
查看或管理录制文件:录制文件管理。
视频截图服务支持直播视频按照设定的间隔时间对正在直播的视频进行画面截图操作,并以JPG格式的文件保存至指定的MOS存储位置。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 截图配置。
5.单击添加。
6.配置截图模板。
截图模板参数及说明如下表所示。
参数 | 描述 |
---|---|
AppName | 视频的应用名称,输入的AppName必须与直播推流的AppName保持一致,方可生效。如果您想要进行域名级别截图配置,输入星号(*)号即可。 |
截图频率 | 截图频率,单位:秒,取值范围:5~3600。 |
存储位置 | 选择截图文件在MOS上的存储位置。 |
存储方式 |
存储方式分两种类型,支持复选。
覆盖截图:视频截图按照截图频率依次截图,新截取的图片覆盖上一张旧图。 实时截图:视频截图按照截图频率依次截图,新图片按照N+1(N≥0)的顺序依次存储在MOS中。 说明 复选时,会同时以两种方式进行截图。 |
说明 配置完成后该域名下所有AppName(设置好的AppName),都会按照设置好的模板配置进行截图并存储。 截图设置修改后,会在下次推流后生效。
7.单击确定。
直播安全审核采用截帧画面进行审核,自动检测视频直播的内容是否涉嫌违规。违规的内容将会被记录到MOS,用户可进行查询,并对违规内容进行处理。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 审核配置。
5.单击添加。
6.配置审核模板。
审核模板参数及说明如下表所示。
参数 | 描述 |
---|---|
AppName | 视频的应用名称,输入的AppName必须与直播推流的AppName保持一致,方可生效。如果您想要进行域名级别审核,输入星号(*)号即可。 |
审核场景 |
目前支持审核以下四种场景。
涉黄 暴恐涉政 广告 无意义直播 |
截图频率 | 截图频率,单位:秒,取值范围:5~3600。 |
存储位置 | 选择截图文件在MOS上的存储位置。 |
7.单击确定。
1.添加回调地址
2.输入回调地址。
3.在您的回调服务器中查看回调信息。回调信息的格式与示例,请参见
智能审核回调。
4.在MOS中查找识别的内容。
您可以根据审核回调信息,在MOS控制台查找指定的审核内容。
根据AppName与StreamName查找指定的审核内容。
根据推流日期查找指定的审核内容。
通过阅读本文,您可以开通直播时移功能,让直播能够进行回溯观看。
直播时移基于常规的HLS(HTTP Live
Streaming)视频直播,直播推流被切分成TS分片,通过HLS协议向播放用户分发,用户请求的M3U8播放文件中包含不断刷新的TS分片地址。
常规的HLS直播,TS分片地址及相应的TS文件并不是持久化保存,导致当前时间之前的直播视频内容无法回溯。而对于开通了直播时移功能的HLS直播而言,TS分片地址及相应TS文件会分别在数据库和MOS中持久化保存(最长保存30天),从而使得从直播开始时间到当前时间之间的视频能够进行回溯。
直播时移是后付费的增值功能,收费项包括时移功能费用和时移流播放产生的带宽、流量费用。时移功能费根据设置的时移天数规格,按每日时移数据写入量进行收费。时移流播放费用按直播播放带宽、流量单价收费。具体费用,请参见直播产品定价说明。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置 > 直播时移。
5.单击添加。
6.配置直播时移。
直播时移配置参数及说明如下表所示。
参数 | 描述 |
---|---|
AppName | 视频的应用名称,输入的AppName必须与直播推流的AppName保持一致,方可生效。如果您想要进行域名级别直播时移配置,输入星号(*)即可。 |
StreamName | 直播流名称。 |
时移天数 |
视频直播为您提供以下时移天数。
1天 3天 7天 15天 30天 |
说明
直播时移配置后需要重新推流才会生效,对正在进行中的直播流,新设置的时移不生效。
直播时移流通过直播播放域名对应的URL直接访问,URL的访问规格说明,具体请参见直播时移规则说明。
7.单击确定。
通过阅读本文,您可以对直播延时进行配置,根据不同的播流协议来配置延时时间。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置。
4.单击模版配置直播延时配置直播延时配置。
5.单击修改配置。
6.修改直播延时配置。
直播为您提供三种协议的延时配置,每种协议的延时都分为低、中、高三种配置,实际延时与延时设置、 推流的关键帧间隔(GOP)两个因素相关,具体延时可参考下表。您可以根据您的业务自行配置。延时直播更多详情,请参见 直播延时 说明。
推流GOP | 协议 | 低 | 中 | 高 |
---|---|---|---|---|
1s | RTMP | 3-4s | 4-6s | 6-8s |
FLV | 3-4s | 4-6s | 6-8s | |
HLS | 5-6s | 6-8s | 10-15s | |
2s | RTMP | 4-5s | 5-7s | 7-9s |
FLV | 4-5s | 5-7s | 7-9s | |
HLS | 6-8s | 10-15s | 20-25s | |
4s | RTMP | 4-8s | 6-10s | 8-12s |
FLV | 4-8s | 6-10s | 8-12s | |
HLS | 15-20s | 20-30s | 30s+ |
7.单击确定。
拉流是对第三方直播流地址进行直播流的接入,您可以将接入的流再通过摩杜云 直播进行直播流处理和直播CDN加速分发。拉流是直接推流接入摩杜云视频直播外的另一种直播流的接入方式。
支持固定拉流和触发拉流两种方式:
固定拉流:指定拉流的起始时间和结束时间,在指定时间一直进行拉流直播,不受是否有播放请求影响。
触发拉流:当使用此域名的播放地址进行播放时,自动触发摩杜云视频直播服务进行拉流直播。无人播放时不会回源站进行拉流。
说明 拉流暂时不支持H.265编码的第三方直播流接入。
1.单击模版配置 > 拉流配置。
2.选择固定拉流页签,单击添加。
3.配置固定拉流。
使用限制:
回源地址仅支持4个。
同时进行固定拉流的模版最多支持10个。
拉流开始到结束的时间最多支持7天。
固定拉流配置参数及说明如下表所示。
参数 | 描述 |
---|---|
AppName | 视频的应用名称,此AppName用于生成播放URL,不必与源站推流的AppName保持一致。 如果您想要进行域名级别拉流,配置为ali_all_app。 |
StreamName | 直播流名称。直播流不能与其他拉流模板重复。 |
回源地址 | 第三方直播的拉流地址。最多可添加4个地址。 |
起始时间 | 拉流开始时间和结束时间,当前时间超过结束时间后,将会停止拉流。 |
4.单击确定。
1.单击模版配置 > 拉流配置。
2.选择触发拉流页签,单击添加。
3.配置触发拉流。
使用限制:
回源地址仅支持4个。
同时进行触发拉流的模版最多支持20个。
触发拉流配置参数及说明如下表所示。
参数 | 描述 |
---|---|
播流AppName |
播流所属应用名称。此AppName用于生成播放URL,不必与源站推流的AppName保持一致。
但如果没有配置回源AppName,此处必须与源站推流的AppName保持一致。 如果您想要进行域名级别拉流,需配置为ali_all_app。 |
回源AppName |
回源拉流AppName,必须与源站推流的AppName保持一致。
若不填写,则会使用播流AppName作为回源AppName,此时播流AppName必须和源站AppName保持一致。 |
回源地址 | 第三方直播的拉流地址。最多可添加4个地址。 |
回源拉流协议 | 支持RTMP、FLV格式协议。 |
4.单 击确定。
此功能可用于紧急处理源站不可用的情况。
1.在拉流配置页面,选择触发拉流或固定拉流页签,可以查看已有的拉流配置。
2.选择需要修改的配置模板,在操作列单击修改。
3.在弹出的拉流配置窗口中,修改拉流配置。
配置参数说明,请参见
固定拉流
和
触发拉流。
4.单击确定。
注意事项
固定拉流
修改配置后,会按照修改后配置重新拉流,请确保修改不会影响线上业务。
触发拉流
修改配置后,已有的播放仍然会遵循修改前的源站配置,新的播放会遵循修改后的源站配置。
若添加配置时,回源AppName不为空,修改时也不可置空。
海外链路加速是在主播或观众所在地域与中国内地建立一条高速通道。通过阅读本文,您可以了解海外链路加速的配置操作。
主播在海外或港澳台地区,将视频流通过海外链路加速功能推流至中国内地,并在中国内地进行内容分发。
主播在中国内地,将视频流通过海外链路加速拉取到指定的加速区,并进行内容分发。
更多场景示例,请参见海外链路加速。
海外链路加速只对直播中心配置在华东2、华南1、华北1、华北2、新加坡地域的域名生效。
海外链路加速必须使用边缘推流功能,当您关联推流域名后,视频直播系统会自动开启智能边缘推流加速服务。关联推流域名操作,请参见
关联推流和播流域名。
1.登录 视频直播控制台
2.在视频直播控制台左侧导航栏,单击域名管理 ,进入域名管理页面。
3.选择您要配置的播流域名,单击域名配置
4.单击模版配置 > 海外链路加速配置。
5.单击添加。
6.配置海外链路加速。
海外链路加速参数及说明如下表所示。
参数 | 描述 |
---|---|
AppName | 视频的应用名称,输入的AppName必须与直播推流的AppName保持一致,方可生效。 |
StreamName | 直播流名称。如果您想要进行流级别加速,输入星号(*)号即可。 |
专线区域 |
使用推流加速:选择主播所在区域。
使用播流加速:选择观众所在区域。 |
说明 如果您在海外链路加速模板中配置的StreamName使用星号(*), 同时在相同的AppName下又配置有多条流。此海外链路加速默认为执行全部流配置。
7.单击确定。
资源监控服务提供了流量带宽、回源统计等监控功能。通过阅读本文,您可以了解查看各监控项的操作方法。
1.登录 视频直播控制台
2.在左侧导航栏选择数据监控 > 资源监控。
3.查看资源监控详情。
您可以选择待监控的域名、运营商、区域及查询的时间段(今天、昨天、近7天、近30天或自定义),查看以下各监控项及其指标的具体情况。
监控项 | 监控指标 |
---|---|
流量带宽-上行 | 上行带宽、流量。 |
流量带宽-下行 | 下行带宽、流量。 |
回源统计 | 回源带宽、流量。 |
HTTPCODE | 5xx、4xx、3xx、2xx。 |
实时监控服务提供了推流监控、流量带宽等监控功能。通过阅读本文,您可以了解查看各监控项的操作方法。
实时监控的数据粒度为1分钟,与资源监控和用量查询的数据粒度统计规则不同,因此同时间段实时数据和其他数据也会不同。直播的用量计费以用量查询的数据为准。
实时监控支持7天内的数据查询,最长时间跨度不超过24小时。
1.登录 视频直播控制台
2.在左侧导航栏选择数据监控 > 实时监控。
3.查看实时监控详情。
您可以选择待监控的域名及查询的时间段(10分钟实时、近半小时、近1小时或自定义),查看以下各监控项及其指标的具体情况。
监控项 | 监控指标 |
---|---|
推流监控 | 主播到CDN节点的接收音视频帧率、音视频时间戳、接受头次数、音视频码率(单位:Kbps)、最大音视频帧间隔(单位:ms)、推流断开错误码。 |
流量带宽 | 带宽(单位:bps)、流量(单位:KB)。 |
质量监控 | 5xx状态码、4xx状态码、3xx状态码、2xx状态码。 |
访问统计服务提供了独立访客数、用户分布等统计功能。通过阅读本文,您可以了解查看各统计项的操作方法。
1.登录 视频直播控制台
2.在左侧导航栏选择访问统计。
3.查看访问统计详情。
您可以选择待统计的域名及查询的时间段(今天、昨天、近7天、近30天或自定义),查看以下各统计项及其指标的具体情况。
统计项 | 统计指标 | 查询周期 |
---|---|---|
独立访客数 | 独立访客数。 | 今天、昨天、近7天、近30天、自定义。 |
用户分布 | 区域、总流量、流量占比、访问占比、相应时间。 | 今天、昨天、近7天、近30天、自定义。 |
域名排列 | 各个加速域名的访问排名。 | 昨天、近7天、近30天、自定义。 |
用量查询服务提供了播放带宽/流量、推流路数等查询功能。通过阅读本文,您可以了解查看各项用量的操作方法。
1.登录 视频直播控制台
2.在左侧导航栏选择用量查询。
3.查看用量查询详情
您可以选择待查询的域名、区域、及查询的时间段(今天、昨天、近7天、近30天或自定义),查看以下各资源用量及其使用情况。
资源用量 | 查询内容 |
---|---|
播放带宽/流量 | 查询指定域名的流量和带宽使用情况。 |
推流路数 | 查询指定域名的推流路数。 |
转码时长 | 查询不同清晰度的转码时长统计。
说明 转码时长统计中转码模板对应含义,请参见 转码类型说明。 |
截图张数 | 查询指定域名的截图数量。 |
直播时移 | 查询指定域名时移的时间和数据量。 |
海外链路加速 | 查询指定域名的加速带宽。 |
计费用量 | 查询不同维度下计费时间与用量。 |
转码类型是一个字符串,由分辨率字段、前缀字段和后缀字段组成,字段之间由下划线分隔。分辨率字段为必备字段,前缀和后缀字段为可选字段。
分辨率字段
LD:低清
SD:标清
HD:高清
2K:2K
4K:4K
EX:大于4K
codec前缀
没有:H.264
265:H.265
profile后缀
没有:窄带高清1.0转码
S:标准质量转码
NBHD15:窄带高清1.5转码
NBHD2:窄带高清2.0转码
WM:水印转码
CASTER:导播转码
输出帧率后缀
没有:标准输出帧率(≤30fps)
OFH:高输出帧率(>30fps)
举例:
HD:H.264、高清、窄带高清1.0转码、标准输出帧率。
265_SD_NBHD2:H.265、标清、窄带高清2.0转码、标准输出帧率。
LD_S_OFH:H.264、低清、标准质量转码、高输出帧率。
如果您需要导出用量数据,请参考以下方式导出。
1.单击明细导出页签。
2.单击创建导出任务。
3.输入任务名称,选择查询时间,并选择导出内容的类型。
说明 如果导出类型选择域名明细,最多选择100条域名。
4.单击确定。
日志管理服务提供日志下载和实时日志推送功能。通过阅读本文,您可以了解日志下载及创建实时日志推送服务的方法。
日志文件延迟时间:一般情况下延迟在24小时之内,业务高峰期也有可能超过24小时。
您可以下载最近一个月(30天)的日志数据。
日志命名规则:加速域名_年_月_日_时间开始_时间结束。例如:www.test.com_2018_10_30_000000_010000.gz。
[9/Jun/2015:01:58:09 +0800] 188.165.15.75 - 1542 "-" "GET https://www.moduyun.com/index.html" 200 191 2830 MISS "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "live"
示例说明
字段 | 参数 |
---|---|
时间 | [9/Jun/2015:01:58:09 +0800] |
访问IP | 188.165.15.75 |
代理IP | 无 |
responsetime(单位:ms)
说明 对于开启周期性记录日志的直播请求,该字段为本次与上次日志记录时间间隔,并不是长链接的真实响应时间。 |
1542 |
referer | 无 |
method | GET |
访问URL | https://www.moduyun.com/index.html |
httpcode | 200 |
requestsize(单位:byte) | 191 |
responsesize(单位:byte) | 2830 |
cache命中状态 | HIT(命中),MISS(未命中) |
UA头 | Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/) |
文件类型 | live |
1.登录 视频直播控制台
2.在左侧导航栏选择日志管理。
3.选择待查询的域名及时间。
4.单击查询,查询该域名在指定时间的日志。
5.单击操作列的下载,下载该域名在指定时间段的日志。
说明 目前仅支持配置播流域名,如需推送上行实时日志(即配置推流域名),请联系摩杜云客服配置。
1.登录 视频直播控制台
2.在左侧导航栏选择日志管理。
3.单击实时日志推送页签。
4.单击创建实时日志推送服务。
5.设置参数,然后单击下一步
参数 | 说明 |
---|---|
Project名称 | 创建的日志服务的Project(项目)名称。不能与日志服务控制台上的其他Project名称重复。 |
Logstore名称 | Logstore(日志库)是创建在Project(项目)下的资源集合, Logstore中的所有数据都来自于同一个数据源。收集到的日志数据的查询、分析、投递均以Logstore为单位。如果不填写Logstore名称,系统会默认生成。 |
区域 | 收集指定地区的实时日志。 |
日志服务角色 | 需要授予Live访问日志服务。 |
6.根据实际需求选择关联域名,并勾选付费说明。
7.单击创建。
如果您需要查看实时日志推送关联的域名或者需要对其进行修改,请单击指定的实时日志服务后面操作相应功能。
功能 | 说明 |
---|---|
查看 | 查看指定实时日志推送服务关联的域名。 |
修改域名 | 修改指定实时日志推送服务关联的域名。 |
迁移域名 | 某域名的数据需要从Logstore1推送至Logstore2,迁移未成功前,该数据会一直推送至Logstore1,迁移成功后直接推送至Logstore2,中间的数据不会中断。 |
暂停服务 | 暂停指定实时日志的推送服务。 |
更多 |
启动服务:启动指定实时日志的推送服务。
删除服务:删除指定实时日志的推送服务。 |
云导播依托视频直播、媒体处理服务,对传统视频生产工具进行云端再造, 融合视频AI识别、双语翻译、多种互动能力,进行视频导播效果创新,无需采购硬件,随时随地使用,本文介绍了导播台的优势及功能。
优势 | 描述 |
---|---|
低延时 | 多链路多环节延迟优化,有效降低切播延迟,视频切播延迟最低600ms,随时切换观看。 |
低成本 | 云端处理,节省硬件采购成本,按量计费。 |
多内容源支持 | 支持直播点播视频源、图片、文档、页面多种内容源,最大6路视频源实时混编。 |
云端能力加持 | 依托摩杜云的云端服务能力,不断融合视频AI、双语翻译、直播互动等能力,打造能力矩阵。 |
灵活易用 | 导播服务提供控制台、API多种使用方式,您可以通过直播控制台内的导播台直接配置、使用、管理视频导播服务,也可以基于API构建您自己的导播应用。 |
弹性使用 | 按需使用,可根据需求随时购买或释放导播实例。 |
功能 | 描述 |
---|---|
垫流垫片 | 多种内容输入源,最大同时支持6路视频混流。 |
预监预看模式 | PVW预监、PGM监看两种模式,低延时切换。 |
自定义布局 | 提供横竖屏两种模式,按需自定义混流排版布局。 |
备播延播 | 设置直播前暖场和临时备播资源,最长5分钟延播。 |
调音台 | 多路音频输出大小调节、音频增益调节,启停音频跟随。 |
组件叠加 | 支持图片、文字、字幕组件叠加,可实现在直播流中插入水印、LOGO、横幅文字、实时字幕等。 |
ET实时字幕 | 结合语音识别技术,绑定直播视频源,实时输出双语字幕。 |
云端自动录制 | 输出直播流同时自动完成录制多种格式视频文件。 |
多清晰度可选 | 从流畅到高清,提供多种视频清晰度,满足多终端大小屏需求。 |
轻量级轮播 |
用于快速聚合多个视频节目,创建轮播台类型直播间,丰富直播场景和内容形态。支持节目单的增删改查功能,支持节目内容的编辑设置。灵活调用、轻松配置,高效协同业务场景落地。
创建节目单实现直播功能。 多个轮播节目单同时运行进行多房间的并发直播。 节目单的内容循环播放或单次播放。 节目单的内容可能在播放过程中被替换,改变播放顺序。 停止播放某节目单。 删除某节目单。 对节目单内容进行微调。 彻底更改节目单内容。 |
虚拟演播厅 |
虚拟演播厅是导播服务提供的抠像导播功能,导播服务针对绿幕流提供了自动的专业抠像融合能力,支持多种设备、多机位、异地开播,通过云端抠像合成能力,实现双屏幕、分屏、画中画等开播场景,打造沉浸式直播体验。
适用于多种设备、异地远程直播。 支持多路视频源抠像。 支持添加多个多媒体展位,可以插入视频或图片文件。 配置简单灵活,快速开播,随时随地使用。 |
类别 | 功能 | 说明 |
---|---|---|
输入源 | 直播源:RTMP推流 |
不支持外链直播源,仅支持:
摩杜云RTMP协议推流。 摩杜云iOS、Android、Web等推流SDK及Demo。 常见的第三方如OBS/XSplit/FMLE等推流软件。 |
媒体文件 |
视频格式:
3gp、asf、avi、dat、dv、flv、f4v、gif、m2t、m3u8。 m4v、mj2、mjpeg、mkv、mov、mp4、mpe、mpg、mpeg。 mts、ogg、qt、rm、rmvb、swf、ts、vob、wmv、webm。 说明 所有媒体文件需预先上传到点播素材库,请参见媒资管理。 |
|
输出流 | 直播流 |
支持协议:
RTMP。 HLS。 HTTP-FLV。 |
直播录制 |
可自定义录制时长,支持录制格式:
FLV。 MP4。 M3U8。 |
|
媒体处理 | 视频布局 | 可自定义多画面布局,画面单元可自由填充直播源或者媒体文件。 |
垫流 | 切换直播流。 | |
垫片 | 切换媒体文件。 | |
组件叠加 | 支持文件水印、图片水印叠加。 | |
导播特性 | PVW、PGM支持 | 可自定义多画面布局,画面单元可自由填充直播源或者媒体文件。 |
紧急备播 | 可配置备播片,在直播中随时切换到备播片源,仅支持媒体文件备播。 | |
延时播放 | 可配置直播流延时播放。 |
在控制台上支持创建按量付费导播台和包年包月导播台,本文介绍如何开通导播服务。
开通导播服务前,您需要先开通点播服务和直播服务。操作步骤如下:
1.视频点播
i.开通视频点播服务(用于媒体库上传视频素材)。
ii.添加视频点播域名(媒体库上传视频素材时选择的储存地址),配置视频点播CNAME。
说明 导播台支持的3种视频源中,包含了将点播媒体库的视频素材 应用于直播导播,导播台支持用户在摩杜云直播产品域名下的直播流和点播视频。
2.视频直播
i.开通
视频直播服务。
ii.添加
视频直播域名 ,配置
视频直播CNAME。
iii.配置
HTTP消息头。
iv.开启
配置HTTPS安全加速
导播服务提供灵活的计费方案,您可以根据使用情况选择按时长付费或者包年包月,计费方式请参见
云导播费用。
购买导播后付费实例
购买导播预付费(包年包月)实例
开通视频直播服务后,导播服务默认未启用,即无任何导播台实例。
1.登录 视频直播控制台
2.在左侧导航栏选择导播台,单击添加导播台。
3.在创建按量付费导播台对话框中,填写导播台信息。
参数 | 说明 |
---|---|
名称 | 填写导播台名称,导播台名称可以重复。 |
直播中心 |
选择导播台实例所属直播中心。
说明 由于导播台需要调用媒资文件,一般选择存储了媒资内容的直播中心。 |
类型 |
根据使用场景分为如下类型:
播单型:主要适用于轮播场景,通过播单管理API把多个点播文件以节目单形式编排后以直播流形式输出。 如果使用场景包括轮播和其他场景,请使用通用型导播。 播单型导播不能对导播合流的内容进行预监查看,导播合流后内容直接输出。 通用型:主要适用于所有的导播场景,包括管理资源、组件、切换台、预览、备播等,可以把直播流、点播文件、图片、文字作为素材,进行导播合流输出,对导播合流的内容可进行预监查看,对合成内容满意后进行导播输出。 虚拟演播厅:主要适用于需要使用抠像能力的导播场景,请参见 虚拟演播厅。 |
计费方式 | 使用此步骤创建的导播台,默认按照时长计费。 |
4.单击立即创建。
创建完成后,还需配置该导播台。具体操作,请参见 设置导播台实例。
开通视频直播服务后,导播服务默认未启用,即无任何导播台实例。
1.登录 视频直播控制台
2.在左侧导航栏选择导播台,单击创建包年包月导播台。
3.选择类型、输出分辨率、区域和使用时长。
参数 | 说明 |
---|---|
类型 |
根据使用场景分为如下类型:
通用型:主要适用于所有的导播场景,包括管理资源、组件、切换台、预览、备播等,可以把直播流、点播文件、图片、文字作为素材,进行导播合流输出,对导播合流的内容可进行预监查看,对合成内容满意后进行导播输出。 播单型:主要适用于轮播场景,通过播单管理API把多个点播文件以节目单形式编排后以直播流形式输出。 如果使用场景包括轮播和其他场景,请使用通用型导播。 播单型导播不能对导播合流的内容进行预监查看,导播合流后内容直接输出。 |
输出分辨率 | 选择输出分辨率。 |
区域 |
选择导播台实例所属直播中心。
说明 由于导播台需要调用媒资文件,一般选择存储了媒资内容的直播中心。 |
说明 导播服务计费方式请参见 云导播费用。
4.单击立即购买。
5.勾选服务协议,单击去支付。
创建完成后,还需配置该导播台。具体操作,请参见 设置导播台实例。
本文为您介绍了如何快速使用导播台进行视频直播。
说明 本文从控制台角度介绍流程,若使用API,请参见 API调用Demo。
1.进入导播台
登录 视频直播控制台 ,选择导播台后单击进入导播台。
2.设置导播台
创建导播台实例并首次进入导播台操作界面时,会自动弹出导播台的设置窗口,
非首次进入设置也可以在操作界面的右上角单击设置进入实际设置窗口。具体操作请参见
设置导播台实例。
3.添加视频素材源
单击添加视频,选取视频源。具体操作请参见添加视频源。
4.设置输出画面布局
i.单击新增布局,选择您需要的视频源画面输出布局类型。具体操作请参见 自定义布局 。
ii.新增布局后单击您需要使用的视频源布局,选中状态的布局会呈现绿色焦点。
5.开始导播
单击开始直播,预监PVW区域输出视频源混流内容。
说明 预监(PVW)一般为工作人员调试画面的显示区域,观众无法观看该路流,预览后可通过单击切换到PGM来生效到观众侧。
6.切换到PGM
单击切换到PGM,为终端用户的节目显示区域,可通过设置以下功能调整节目效果。
调音台 :调节节目大小音量。
切换布局 :更换视频流布局。
设置组件
:在直播流中插入水印、LOGO、横幅文字、实时字幕等效果。
切换备播
:当遇到直播流异常或者其他原因时,可以切备播视频进行热场。
说明
直接关闭导播台页面或单击导播台右上方退出导播台 > 直接退出,导播台不会停止直播,继续计费。
单击导播台右上方停止直播或单击导播台右上方退出导播台 > 退出并停止直播,导播台停止直播,停止计费。
本文介绍了导播台的功能区域及用途。
序号 | 区域 | 描述 |
---|---|---|
① | 视频源区域 |
添加和预览用于导播服务的视频源。
通用型导播台:用于导播的视频源。 虚拟演播厅:包含抠像输入源和多媒体输入源 。 |
② | 预监(PVW)区域 | 导播服务的视频源监控、效果调试区域,终端用户无法观看该路流,调试预览后可通过单击切换到PGM来生效到节目(PGM)区域。 |
③ | 节目(PGM)区域 | 和终端用户观看节目画面保持一致的节目预览区域。 |
④ | 布局区域 | 支持自定义多个视频源混流时采用的布局。 |
⑤ | 调音台区域 |
视频分轨调节的控制区域,对导播输出音频进行调节、增益、本地监听。
说明 音量增益功能在虚拟演播厅下不可用。 |
⑥ | 组件区域 | 叠加到视频流之上的图片、文字等组件管理区域。 |
本文介绍了管理设置导播台实例的相关操作及说明。
单击添加导播台,进入到导播服务订单页。
您可以根据自己的需要进行导播实例购买,具体操作请参见
服务开通
。购买成功之后,将在下方的列表中显示新的导播台实例。
说明
导播台属于实例型服务,默认仅允许创建十个导播台实例。如需要更多,请您联系摩杜云客服申请。
目前导播台仅在上海(华东2)、北京(华北2)中心开放,后续将会扩展至其他中心。
如果导播台实例不再需要使用,您可以在操作列中,选择更多 > 删除完成导播台实例的删除操作。
创建导播台实例并首次进入导播台操作界面时, 会自动弹出导播台的设置窗口;非首次进入设置也可以在操作界面进入实际设置窗口。操作步骤如下:
1.在操作列中,选择需要进行设置的导播台实例,单击进入。
2.在导播台右上方区域单击设置。
弹出设置窗口。
3.单击域名文本框,在域名下拉列表中,选择您需要使用并已经完成CNAME绑定的直播域名。
4.单击输出配置文本框,在输出配置下拉列表中,选择直播流原始分辨率(流畅、标清、高清、超高清)。
5.单击勾选项(流畅、标清、高清、超清)选择直播流转码规格(可多选)。
说明 如果选择输出设置为标清,那么可选的转码设置为标清、 流畅(不超过原始流清晰度的格式),如果选择转码格式为流畅,那么播流时就可以选择原画和流畅两种清晰度。
6.单击录制配置滑动按钮开启录制(根据需求开启)。
i.设置直播流录制的存储位置。
说明 录制的存储位置仅支持配置在和导播台同区域的MOS Bucket。 如导播台使用的华东2(上海)只能录制在华东2(上海)的MOS Bucket,不支持跨区域录制。需要您确保先开通MOS产品,请参见 直播录制至MOS。
ii.选择录制文件储存格式。
iii.设置录制周期(例如:设置10分钟,为10分钟生成1个录制文件)。
7.单击开启延时播放滑动按钮(根据需求开启),设置导播内容输出的延时时长,区间为:15s~300s。
8.单击选择视频,在点播视频源列表中,选择需要作为直播流异常或热场时的视频源。
说明 所有使用到的点播产品素材(点播源、备播视频)必须存在与导播台同区域才能使用。 导播台不支持跨区域选择点播视频作为素材(如果您使用华东2的导播台,您的素材也需要存在华东2的点播产品中)。具体操作请参见 添加视频源。
9.在设置窗口右下方区域单击确定完成导播台设置。
单击查看配置,查看导播台实例设置信息。修改设置请参见 设置导播台实例。
域名:导播服务播流域名,默认从直播域名列表中获取,若需使用新的播流域名,请您到域名管理页添加域名,具体操作请参见 配置指南 。
录制配置:默认未开启。开启录制后,自动录制直播内容并生成视频至指定存储位置(目前是MOS bucket )。
备播视频:当视频源存在异常或直播未开始时,可以播放备播视频进行热场。
延时播放:支持设置导播内容输出的延时时长,区间为:15s~300s。
播放信息:选择输出配置和转码格式后,自动生成转码格式(流畅、标清、高清、超清)下的协议播放地址。
导播台的输入流URL构成如下:
导播台默认的appname为caster,流名由导播服务自动生成(同一个导播台实例的流名一经生成保持不变)。
导播台的输出流播流URL地址构成如下:
协议头://{您导播台配置的导播输出流播流域名}/caster/{流名}?auth_key={导播台根据您配置的播流域名鉴权key和过期时间生成的鉴权串}
示例如下:
原画(Original)播流URL | flv协议 | http://abc.test.com/caster/6cb1ce433a574acabe00b41a44068d16.flv?auth_key=1609159424-0-0-a0ca55b2252681e0affe69736e14**** |
rtmp协议 | rtmp://abc.test.com/caster/6cb1ce433a574acabe00b41a44068d16?auth_key=1609159424-0-0-abddd80d6bb55e19bdc867092b35**** | |
m3u8协议 | http://abc.test.com/caster/6cb1ce433a574acabe00b41a44068d16.m3u8?auth_key=1609159680-0-0-60305f41884b21ae29af12c29acc**** | |
标清转码流URL(流名后缀命名规则与直播转码流名后缀命名规则保持一致) | flv协议 | http://abc.test.com/caster/6cb1ce433a574acabe00b41a44068d16_lsd.flv?auth_key=1609159936-0-0-968bd8893f325a957f75d17d33aa**** |
本文介绍了添加视频源的操作步骤及说明。
导播台中支持的视频源有三种:
OpenAPI:支持从第三方直播流的播放地址作为导播台的视频源。
控制台:支持用户在摩杜云直播产品域名下的直播流和点播视频。
直播流:在流管理模块可查看的任意域名中处于推流中状态的直播流,均可以直接引用作为导播服务的输入视频源。
点播视频:视频点播媒资库的视频素材。支持用户在摩杜云直播产品域名下的直播流和点播视频。
说明 目前控制台默认支持6个输入源,如果您的业务需要更多输入源,请您联系我们配置。
1.登录 视频直播控制台 ,在左侧选择导播台,在右侧操作列中选择需要添加视频源的导播实例,单击进入。
2.单击添加视频。
从直播控制台选取:填写备注名,选择域名 > 推流地址后,单击确定完成视频添加。系统会自动显示您当前选择域名下的直播流列表,您可根据需要选择推流地址作为导播服务的视频源使用。
从媒体库选取:填写备注名,单击选择视频,在弹出的视频素材列表中选择目标视频后,选择单次播放或循环播放,单击确定完成视频添加。
说明 从媒资库选取的视频素材为视频点播的媒资库视频素材, 必须在视频点播控制台上传并完成预处理后才可以在导播服务中使用,预处理规则和计费方式请参见视频点播定价。
将视频点播媒资库的视频素材用于直播导播需进行如下操作:
a.在视频点播控制台上传媒体文件到媒资库,具体操作请参见媒资上传。
b.登录视频点播控制台在左侧导航栏,选择音/视频,在操作列中,选择更多 > 用于直播导播,完成预处理操作。
预处理完成后,在视频源列表中可以添加使用视频源。
说明 如果您在点播中的视频采用先审后发规则,那么应用于导播台的素材视频除了完成上述预处理操作之外,也需要确保该视频状态为正常,否则在导播视频源列表不可见。
3.添加完成后,在视频源区域的小窗口可以进行视频预览。
说明 摩杜云直播控制台中导播台操作页面只支持HTTPS资源的播放(视频)和显示(图片、文字组件),如果您的素材(包括视频、图片、文字组件)使用的点播媒资库资源存储的域名不支持HTTPS, 将无法正常显示,具体操作请参见点播HTTPS安全加速设置。如果您的业务系统所使用的浏览器或播放器无HTTPS要求,则不受此限制影响。
将直播视频源的位置按照自定义布局进行混流输出。
目前在导播台中提供了6种视频源输出固定布局,您可以自由选择使用。
1.单击新增布局,弹出布局配置窗口。
2.根据您选择的具体布局,在窗口右侧会展示不同的视频位,以便您确定具体的位置绑定哪一路视频源。
说明 布局中的视频源不允许重复,不允许为空。
3.单击已经创建的布局 > 开始直播,视频源将按照布局位置显示在PVW窗口。
调音台是视频分轨调节的控制区域,您可以使用调音台对导播 输出音频进行调节、增益、本地监听。本文介绍了使用调音台的操作步骤及说明。
音频跟随视频(勾选):PVW只是视频显示没有声音,当您选中音频跟随视频,并单击切换到PGM时,PVW中视频源的声音会跟随到PGM对外输出,其他视频源音频默认为静音,所有视频源音频都可通过调音台设置对外输出。
音频跟随视频(不勾选):PVW切换到PGM时,不选中音频跟随视频,PVW预监画面视频源的声音不会输出到PGM。
说明 音频不跟随视频应用在直播过程中音频不变,只切换画面的场景,如活动现场一直使用主音频,不同机位的画面进行PVW到PGM的切换。
PGM本地监听的音量调节功能仅应用在导播台本地机监听PGM的声音效果,不改变PGM对外直播输出的音频。
使用场景
预监(PVW)切换到节目(PGM)
使用说明
当视频源从PVW切换到PGM后,音量调节功能开启,视频源中引入的直播源、点播源的音频调节从静音状态变成对外输出状态,音量效果为原始音量大小,调节范围从静音到2倍原始音量。
操作步骤
单击调音块按钮上下滑动,进行音量大小调节。
使用场景
节目(PGM)对外输出多个音频(不限于PGM中视频源的声音)
使用说明
例如:视频源区域共有6个直点播视频源,PGM使用的布局使用了视频源1和2,通过滑动调音块按钮,可将视频1到视频6中,任何一到多个视频源的声音进行对外输出,也可以跟使用场景任意搭配音频输出。
操作步骤
单击调音块按钮上下滑动,进行音量大小调节。
说明 PVW状态时(未切换到PGM),调音台区域音频跟随视频、音量增益为不可操作状态。
将视频源按照自定义布局推送到不同场景。
使用场景(一)
更换PVW布局内的视频源至PGM。
操作步骤
将当前应用布局内的视频源(媒体2)切换为其他视频源。
i.在视频源区域选择布局中需要切换的视频源,这里以视频源(媒体2)为例。单击设置图标按钮。
ii.删除当前视频源。
iii.单击选择视频,添加新的视频源后,设置播放模式,单击确定。
在预监PVM区域可以看到该位置的视频源已经切换至新视频源。
iv.单击切换至PGM,该位置的新视频源也更新至PGM观众侧。
使用场景(二)
切换PVW布局至PGM。
操作步骤
将当前PVW画面正在应用的视频源布局,切换为其他需要使用的布局。
i.创建布局请参见 自定义布局
,单击其他布局(以布局1为例),布局1处于预监PVW状态,见图中绿色部分。
ii.单击切换至PGM,将布局1更新至PGM观众侧,之前布局的应用状态取消。
使用场景
当直播视频源异常或其他原因无法继续通过节目(PGM)对终端用户输出视频时,可用于继续对外输出的备用视频。
操作步骤
在PGM区域右下角单击切换备播视频,在对话框中单击确定,完成切换。
本文介绍了如何在直播流中使用导播台组件。
导播台支持图片、文字、字幕三类组件,可以实现在直播流中插入水印、 LOGO、横幅文字、实时字幕等,您可根据使用需求添加以下任意一款组件。具体操作如下:
添加图片
i.单击图片,弹出图片组件窗口。
ii.单击上传图片,在本地选择需要上传的图片源,图片上传后设置组件名称、缩放比例(尺寸)、位置,可在左侧区域进行效果预览,完成后单击确定保存即可。
添加文字
i.单击文字,弹出文字组件窗口。
ii.在输入框中填写文字后,设置组件名称、字体样式、尺寸、显示方式、位置,可在左侧区域进行效果预览,完成后单击确定保存。
添加实时字幕
实时字幕是通过对直播流中的音频进行实时的语音识别,把识别后的文字以字幕的方式同步显示在直播流上。识别的字幕可进行实时翻译,支持显示直播流音频源的源语言字幕、翻译后的目标语言字幕,或者双语字幕。
翻译语言支持中、英、西、俄语互译。实时字幕功能不仅增加了内容的专业性,对于不方便听声音的场景提供了一种很棒的观看体验。实时翻译进一步降低了跨国多语言用户对直播流内容理解的门槛,在跨境电商直播、跨国活动直播中都有很好实践应用。
i.单击字幕,弹出字幕组件窗口。
ii.设置组件名称、字体样式、尺寸、位置、视频源、源语言、翻译语言,可在左侧区域进行效果预览,设置完成后单击确定保存即可。
添加组件后,将组件效果应用于视频直播画面。具体操作如下:
1.选择需要使用的布局,单击开始直播。
2.单击需要应用的组件,该组件显示预监状态(绿色标注),并在预监PVW中生效并展示(存在一定延时)。
3.单击切换至PGM,可以将组件切换至观众侧进行对外输出。
如果您需要将应用于视频直播画面的组件效果取消时,具体操作如下:
预监PVW状态:如果当前组件在预监PVW状态(绿色标注),单击需要取消的应用组件,取消PVW画面效果。
取消后,组件无应用状态(无颜色标注),PVW无组件画面效果。
节目PGM状态:如果当前组件在节目PGM状态(红色标注)。
i.单击需要取消的应用组件,可以看到在预监PVW中组件效果已取消。
ii.单击切换至PGM,取消PGM画面组件效果。
取消后,组件无应用状态(无颜色标注),PGM无组件画面效果。
说明 PVW切换到PGM后,由于在控制台PGM状态是优先显示状态, 即使在PVW窗口取消应用状态后,组件依然处于红色标注状态 (PGM正在应用),再次单击切换到PGM后,取消应用组件生效至PGM,该组件恢复到无标注状态。
如果您需要对组件效果进行修改或删除无用的组件,具体操作如下:
编辑组件:将鼠标移动到需要编辑的目标组件,单击编辑图标,弹出组件弹窗后进行组件编辑。
删除组件:将鼠标移动到需要删除的目标组件,单击删除图标,弹出确认删除组件弹窗后进单击确定。
虚拟演播厅是导播服务提供的具备抠像能力的导播功能, 本文介绍云导播台虚拟播厅的使用流程,使用虚拟演播厅发起直播的步骤和配置演播厅布局的步骤。
虚拟演播厅基于标准导播台,集成抠像能力,使用流程与导播台相似,以下为开播链路流程图。
1. 创建虚拟演播厅
在创建导播台时,选择虚拟演播厅类型,创建虚拟演播厅。
2. 配置导播台
i.在导播台添加输入源,添加抠像输入源会自动抠像处理。
ii.选择直播间背景模板,并添加多媒体窗口(1~3个)。
iii.根据直播场景需要,配置直播间布局样式。
3. 发起直播
1.登录 视频直播控制台
2.在左侧导航栏选择直播管理 > 导播台。
3.在云导播台页面,单击添加导播台。
4.在创建按量付费导播台窗口,填写名称、直播中心、类型。其中类型需要选择虚拟演播厅。
5.单击立即创建。
1.添加输入源。具体操作,请参见
添加视频源。
导播台支持添加两种视频源:
抠像输入源:绿色背景直播流,经过导播台的抠像处理后,可抠去绿色背景。在导播台的视频源区域中选择抠像输入源页签添加。
多媒体输入源:多媒体窗口视频源,可以添加点播或直播流。在导播台的视频源区域中选择多媒体输入源页签添加。
2.添加布局。具体操作,请参见
配置演播厅布局。
导播台可以根据需要添加两类布局:通用布局和演播厅布局,用于备播片、广告和正式直播流的切换。
可以添加多个通用布局和演播厅布局,并在直播时随时进行布局切换。
添加通用布局,请参见 自定义布局 。本章介绍添加演播厅布局的操作。
1.单击+布局,添加演播厅布局。
2.在布局配置窗口,布局类型选择演播厅布局, 并填写布局名称。
3.在布局配置窗口的背景图片页签,添加背景图片。
支持从模板库选择,或本地上传背景图使用。
说明 背景图将会按照直播画面全屏展示,建议尺寸与画面同等大小,文件大小不超过10M。
4.在布局配置窗口的抠像素材页签,单击+立即添加,添加抠像素材。i.在抠像素材区域,选择输入源和抠像色域。
说明 目前只支持绿色抠像色域。
ii.在位置/大小区域,设置位置和大小。也支持在预览区域通过拖拽方式调整位置和大小。
iii.单击抠像素材右侧的上移或下移图标,调整素材叠加的顺序。
iv.单击抠像素材右侧的删除图标,删除素材。
5.在布局配置窗口的多媒体素材页签,单击+立即添加,添加多媒体素材
一个直播间可以添加1~3个多媒体窗口,支持插入视频或图片素材。
说明 需提前在导播台主页多媒体输入源中添加。
若添加图片素材,单击+选择图片,从点播服务中的媒资库选择,或从本地上传。
ii在位置/大小区域,设置位置和大小。也支持在预览区域通过拖拽方式调整位置和大小。
iii单击多媒体素材右侧的上移或下移图标,调整素材叠加的顺序。
iv单击多媒体素材右侧的删除图标,删除素材。
6.单击确定。
1.直播推流。
i.单击需要使用的布局,再单击开始直播。
视频源将按照布局位置显示在PVW窗口。
ii.单击切换到PGM按钮推流,即可推送至观众端。
2.切换直播内容。
导播台可以通过切换配置好的演播厅布局,切换PVW预监窗口中的直播内容。若需要在直播中切换演播厅或演播厅中内容(如抠像源、多媒体窗口中的内容),需要提前配置不同的演播厅布局。
添加不同的演播厅布局时,建议通过名称区分。
i.单击要被切换上的新布局。此时,此布局处于预监PVW状态。
ii.单击切换到PGM推流,即可推送直播流至观众端。
3.结束直播。若要结束直播,请单击结束直播。
本文介绍了使用导播API服务的操作步骤及说明。
请您区分导播服务与云导播台,导播服务仅提供API服务,您需要自行开发完成前端页面与交互部分,本文适用于导播服务。
云导播台用户请忽略该文档,视频直播控制台提供了导播台产品,可直接使用前端页面进行导播操作。具体操作请参见
快速入门。
具备Java或者PHP开发能力
了解导播产品的基本功能
了解视频直播的基本功能
请开通导播需要的相关服务并绑定域名,具体操作请参见
服务开通。
下载视频直播SDK。
1.配置导播台
步骤说明
导播台实例创建完成后,根据使用需求完成导播台名称、域名、转码、录制、延播、备播素材等配置。
接口说明
名称 | 描述 |
---|---|
SetCasterConfig | 设置导播台配置信息 |
domainName | 将客户提供的域名绑定至导播台实例 |
casterTemplate | 配置导播台输出分辨率 |
liveTemplate | 配置导播台直播转码参数 |
recordConfig | 配置导播台直播录制参数 |
示例代码
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
SetCasterConfigRequest setCasterConfigRequest = new SetCasterConfigRequest();
setCasterConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
setCasterConfigRequest.setCasterName("LIVEPRODUCER_POST-cn-0pp123h****");
setCasterConfigRequest.setDomainName("LIVEPRODUCER_POST-cn-0pp123h****");
setCasterConfigRequest.setDelay(10F);
setCasterConfigRequest.setUrgentMaterialId("LIVEPRODUCER_POST-cn-0pp123h****");
JSONObject transcodeConfig = new JSONObject();
JSONArray liveTemplate = new JSONArray();
liveTemplate.add("lld");
transcodeConfig.put("LiveTemplate", liveTemplate);
transcodeConfig.put("CasterTemplate", "lp_ld"); // 导播台分辨率,lp_ld-流畅,lp_sd-标清,lp_hd-高清,lp_ud-超清
JSONObject recordConfig = new JSONObject();
JSONArray videoFormat = new JSONArray();
videoFormat.add(new JSONObject().fluentPut("Format", "flv").fluentPut("MosObjectPrefix", "record/{AppName}/{StreamName}/{StartTime}_{EndTime}").fluentPut("CycleDuration", 15*60));
videoFormat.add(new JSONObject().fluentPut("Format", "m3u8").fluentPut("MosObjectPrefix", "record/{AppName}/{StreamName}/{StartTime}_{EndTime}").fluentPut("SliceMosObjectPrefix", "record/{AppName}/{StreamName}/{UnixTimestamp}").fluentPut("CycleDuration", 15*60));
recordConfig.put("VideoFormat", videoFormat);
recordConfig.put("MosBucket", "mosBucket");
recordConfig.put("MosEndpoint", "mosEndpoint");
setCasterConfigRequest.setRecordConfig(recordConfig.toJSONString());
setCasterConfigRequest.setTranscodeConfig(transcodeConfig.toJSONString());
setCasterConfigRequest.setCallbackUrl(“http://192.168.1.1“);
SetCasterConfigResponse response = iAcsClient.getAcsResponse(setCasterConfigRequest);
2.编辑视频源
步骤说明
配置用于输出的视频源信息,目前支持直播流及点播素材两种类型。
接口说明
名称 | 描述 |
---|---|
AddCasterVideo | 新增视频源 |
ModifyCasterVideoResource | 修改视频源 |
DescribeCasterVideoResources | 查询视频源列表 |
DeleteCasterVideoResource | 删除视频源 |
liveStreamUrl | 视频源类型为直播流时需提供直播流地址 |
materialId | 视频源类型为点播素材时需提供点播素材ID,以及循环播放次数(repeatNum) |
locationId | 配置视频源名称及视频源位置,作为布局画面的引用编号 |
示例代码
// 新增视频源(AddCasterVideo)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
AddCasterVideoResourceRequest addCasterVideoResourceRequest = new AddCasterVideoResourceRequest();
addCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
addCasterVideoResourceRequest.setResourceName("LIVEPRODUCER_POST-cn-0pp123h****");
addCasterVideoResourceRequest.setLocationId("RV01" ); // RV01~RV06为视频源在预监窗口的位置ID,不可重复,布局通过该ID引用视频源
addCasterVideoResourceRequest.setLiveStreamUrl( null); // 采用点播素材时不输入
addCasterVideoResourceRequest.setMaterialId("LIVEPRODUCER_POST-cn-0pp123h****");
addCasterVideoResourceRequest.setRepeatNum( -1); // 视频播放完毕后循环播放
AddCasterVideoResourceResponse response = iAcsClient.getAcsResponse(addCasterVideoResourceRequest);
// 修改视频源(AddCasterVideo)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
ModifyCasterVideoResourceRequest modifyCasterVideoResourceRequest = new ModifyCasterVideoResourceRequest();
modifyCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
modifyCasterVideoResourceRequest.setResourceId("LIVEPRODUCER_POST-cn-0pp123h****");
modifyCasterVideoResourceRequest.setLiveStreamUrl(“rtmp://192.168.1.1“);
modifyCasterVideoResourceRequest.setResourceName("LIVEPRODUCER_POST-cn-0pp123h****");
ModifyCasterVideoResourceResponse response = iAcsClient.getAcsResponse(modifyCasterVideoResourceRequest);
// 查询视频源列表(DescribeCasterVideo)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
DescribeCasterVideoResourcesRequest describeCasterVideoResourcesRequest = new DescribeCasterVideoResourcesRequest();
describeCasterVideoResourcesRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
DescribeCasterVideoResourcesResponse response = iAcsClient.getAcsResponse(describeCasterVideoResourcesRequest);
// 删除视频源列表(DescribeCasterVideo)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
DeleteCasterVideoResourceRequest deleteCasterVideoResourceRequest = new DeleteCasterVideoResourceRequest();
deleteCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
deleteCasterVideoResourceRequest.setResourceId("LIVEPRODUCER_POST-cn-0pp123h****");
DeleteCasterVideoResourceResponse response = iAcsClient.getAcsResponse(deleteCasterVideoResourceRequest);
3.编辑组件
步骤说明
配置用于输出的组件信息,目前支持文字及图片两种类型。
接口说明
名称 | 描述 |
---|---|
AddCasterComponent | 新增组件 |
ModifyCasterComponent | 修改组件 |
DescribeCasterComponents | 查询组件列表 |
DeleteCasterComponent | 删除组件 |
说明
配置组件内容:
文字组件需提供文字内容、字体比例、颜色等。
图片组件需提供图片素材ID。
示例代码
// 新增组件(AddCasterComponent)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
JSONObject componentLayer = new JSONObject();
componentLayer.put("HeightNormalized", 0.2);
componentLayer.put("WidthNormalized", 0.2);
JSONArray positionNormalized = new JSONArray();
positionNormalized.add("0.3");
positionNormalized.add("0.3");
componentLayer.put("PositionNormalized", positionNormalized);
componentLayer.put("PositionRefer", "topLeft");
JSONObject textLayerContent = new JSONObject(); // 组件TextLayerContent
textLayerContent.put("Text", text);
textLayerContent.put("Color", 0xff0000);
textLayerContent.put("FontName", "KaiTi");
textLayerContent.put("SizeNormalized", 0.3F);
textLayerContent.put("BorderWidthNormalized", 0.3F);
textLayerContent.put("BorderColor", 0xff0000);
AddCasterComponentRequest addCasterComponntRequest = new AddCasterComponentRequest(); // 设置组件元素属性
addCasterComponntRequest.setCasterId(casterId);
addCasterComponntRequest.setLocationId(locationId);
addCasterComponntRequest.setComponentName(componentName);
addCasterComponntRequest.setComponentType("text");
addCasterComponntRequest.setEffect(effect);
addCasterComponntRequest.setComponentLayer(componentLayer.toJSONString());
addCasterComponntRequest.setTextLayerContent(textLayerContent.toJSONString());
AddCasterComponentResponse response = iAcsClient.getAcsResponse(addCasterComponntRequest);
// 修改组件(ModifyCasterComponent)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
JSONObject componentLayer = new JSONObject();
componentLayer.put("HeightNormalized", 0.6);
componentLayer.put("WidthNormalized", 0.6);
JSONArray positionNormalized = new JSONArray();
positionNormalized.add("0.3");
positionNormalized.add("0.3");
componentLayer.put("PositionNormalized", positionNormalized);
componentLayer.put("PositionRefer", "topLeft");
JSONObject textLayerContent = new JSONObject();// 组件TextLayerContent
textLayerContent.put("Text", text);
textLayerContent.put("Color", 0xff0000);
textLayerContent.put("FontName", "KaiTi");
textLayerContent.put("SizeNormalized", 0.3F);
textLayerContent.put("BorderWidthNormalized", 0.3F);
textLayerContent.put("BorderColor", 0xff0000);
ModifyCasterComponentRequest modifyCasterComponentRequest = new ModifyCasterComponentRequest(); // 设置组件元素属性
modifyCasterComponentRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
modifyCasterComponentRequest.setComponentId("LIVEPRODUCER_POST-cn-0pp123h****");
modifyCasterComponentRequest.setComponentName("LIVEPRODUCER_POST-cn-0pp123h****");
modifyCasterComponentRequest.setComponentType("text"); // 文本类型
modifyCasterComponentRequest.setEffect("none"); // 无特效
modifyCasterComponentRequest.setComponentLayer(componentLayer.toJSONString());
modifyCasterComponentRequest.setTextLayerContent(textLayerContent.toJSONString());
ModifyCasterComponentResponse response = iAcsClient.getAcsResponse(modifyCasterComponentRequest);
// 查询组件列表(DescribeCasterComponents)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
DescribeCasterComponentsRequest describeCasterComponentsRequest= new DescribeCasterComponentsRequest();
describeCasterComponentsRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
DescribeCasterComponentsResponse response = iAcsClient.getAcsResponse(describeCasterComponentsRequest);
// 删除组件列表(DescribeCasterComponent)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
DeleteCasterComponentRequest deleteCasterComponentRequest = new DeleteCasterComponentRequest();
deleteCasterComponentRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
deleteCasterComponentRequest.setComponentId("LIVEPRODUCER_POST-cn-0pp123h****");
DeleteCasterComponentResponse response = iAcsClient.getAcsResponse(deleteCasterComponentRequest);
4.编辑布局
步骤说明
配置用于导播输出的画面布局,用户可自定义画面及位置,目前支持最多四个画面。
接口说明
名称 | 描述 |
---|---|
AddCasterLayout | 新增布局 |
ModifyCasterLayout | 修改布局 |
DescribeCasterLayouts | 查询布局列表 |
DeleteCasterLayout | 删除视频源 |
videoLayer | 配置布局样式信息列表 |
audioLayer | 配置音频信息列表 |
blendList | 配置视频源位置列表 |
mixList | 音频位置列表 |
示例代码
// 新增布局(AddCasterLayout)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
JSONObject componentLayer = new JSONObject();
componentLayer.put("HeightNormalized", 0.6);
componentLayer.put("WidthNormalized", 0.6);
JSONArray positionNormalized = new JSONArray();
positionNormalized.add("0.3");
positionNormalized.add("0.3");
componentLayer.put("PositionNormalized", positionNormalized);
componentLayer.put("PositionRefer", "topLeft");
JSONObject imageLayerContent = new JSONObject(); // 组件ImageLayerContent
imageLayerContent.put("MaterialId", "materailId");
AddCasterComponentRequest addCasterComponntRequest = new AddCasterComponentRequest(); // 设置组件元素属性
addCasterComponntRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
addCasterComponntRequest.setLocationId("RC01"); // 与组件关联的LocationId
addCasterComponntRequest.setComponentName("LIVEPRODUCER_POST-cn-0pp123h****");
addCasterComponntRequest.setComponentType("image"); // 图片类型
addCasterComponntRequest.setEffect("none"); // 无特效
addCasterComponntRequest.setComponentLayer(componentLayer.toJSONString());
addCasterComponntRequest.setImageLayerContent(imageLayerContent.toJSONString());
AddCasterComponentResponse response = iAcsClient.getAcsResponse(addCasterComponntRequest);
// 修改布局(ModifyCasterLayout)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
ModifyCasterLayoutRequest modifyCasterLayoutRequest = new ModifyCasterLayoutRequest();
modifyCasterLayoutRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
modifyCasterLayoutRequest.setLayoutId("LIVEPRODUCER_POST-cn-0pp123h****");
List videoLayersList = new ArrayList(); // 视频layer
ModifyCasterLayoutRequest.VideoLayer videoLayer1 = new ModifyCasterLayoutRequest.VideoLayer();
videoLayer1.setHeightNormalized(0.5F);
videoLayer1.setWidthNormalized(0.5F);
videoLayer1.setPositionRefer("topLeft");
videoLayer1.setPositionNormalizeds(Arrays.asList(new Float[]{0F, 0F}));
videoLayersList.add(videoLayer1);
ModifyCasterLayoutRequest.VideoLayer videoLayer2 = new ModifyCasterLayoutRequest.VideoLayer();
videoLayer2.setHeightNormalized(0.5F);
videoLayer2.setWidthNormalized(0.5F);
videoLayer2.setPositionRefer("topLeft");
videoLayer2.setPositionNormalizeds(Arrays.asList(new Float[]{0.5F, 0F}));
videoLayersList.add(videoLayer2);
ModifyCasterLayoutRequest.VideoLayer videoLayer3 = new ModifyCasterLayoutRequest.VideoLayer();
videoLayer3.setHeightNormalized(0.5F);
videoLayer3.setWidthNormalized(0.5F);
videoLayer3.setPositionRefer("topLeft");
videoLayer3.setPositionNormalizeds(Arrays.asList(new Float[]{0.2F, 0.5F}));
videoLayersList.add(videoLayer3);
modifyCasterLayoutRequest.setVideoLayers(videoLayersList);
List audioLayerList = new ArrayList();
ModifyCasterLayoutRequest.AudioLayer audioLayer1 = new ModifyCasterLayoutRequest.AudioLayer(); // 音频layer
audioLayer1.setVolumeRate(1F);
audioLayer1.setValidChannel("all");
audioLayerList.add(audioLayer1);
ModifyCasterLayoutRequest.AudioLayer audioLayer2 = new ModifyCasterLayoutRequest.AudioLayer();
audioLayer2.setVolumeRate(1F);
audioLayer2.setValidChannel("all");
audioLayerList.add(audioLayer2);
ModifyCasterLayoutRequest.AudioLayer audioLayer3 = new ModifyCasterLayoutRequest.AudioLayer();
audioLayer3.setVolumeRate(1F);
audioLayer3.setValidChannel("all");
audioLayerList.add(audioLayer3);
modifyCasterLayoutRequest.setAudioLayers(audioLayerList);
modifyCasterLayoutRequest.setBlendLists(Arrays.asList(new String[]{"RV01", "RV02", "RV03"}));
modifyCasterLayoutRequest.setMixLists(Arrays.asList(new String[]{"RV01", "RV02", "RV03"}));
ModifyCasterLayoutResponse response = iAcsClient.getAcsResponse(modifyCasterLayoutRequest);
// 查询布局列表(DescribeCasterLayout)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
DescribeCasterLayoutsRequest request = new DescribeCasterLayoutsRequest();
request.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
DescribeCasterLayoutsResponse response = iAcsClient.getAcsResponse(request);
// 删除布局(DescribeCasterLayout)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
DeleteCasterLayoutRequest deleteCasterLayoutRequest = new DeleteCasterLayoutRequest();
deleteCasterLayoutRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
deleteCasterLayoutRequest.setLayoutId("LIVEPRODUCER_POST-cn-0pp123h****");
DeleteCasterLayoutResponse response = iAcsClient.getAcsResponse(deleteCasterLayoutRequest);
5.启动导播台
示例代码
导播台创建并配置完毕后,即可启动导播台,启动底层音视频处理任务。
前提条件
完成导播台配置,包括域名、导播台输出分辨率等。
接口说明
名称 | 描述 |
---|---|
StartCaster | 启动导播台 |
CasterID | 指定需要启动的导播台实例ID |
说明 接口启动成功后返回PVW及PGM场景信息列表,包括场景ID及流信息等,后续操作指定场景时指定场景ID即可。
示例代码
// 启动导播台(StartCaster)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
StartCasterSceneRequest startCasterSceneRequest = new StartCasterSceneRequest();
startCasterSceneRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
startCasterSceneRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
StartCasterSceneResponse response = iAcsClient.getAcsResponse(startCasterSceneRequest);
6.更新场景
步骤说明
导播台启动成功后,可将已配置好的布局(组件)生效至指定场景。
前提条件
完成指定布局(组件)的编辑
指定场景存在并启动
接口说明
名称 | 描述 |
---|---|
UpdateCasterSceneConfig | 更新场景配置 |
DeleteCasterSceneConfig | 删除场景配置 |
CasterID | 指定导播台实例ID |
SceneID | 指定场景ID |
LayoutID | 指定布局ID,若未指定则默认无变更。 |
示例代码
// 更新场景配置(UpdateCasterSceneConfig)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
UpdateCasterSceneConfigRequest updateCasterSceneConfigRequest = new UpdateCasterSceneConfigRequest();
updateCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
updateCasterSceneConfigRequest.setLayoutId("LIVEPRODUCER_POST-cn-0pp123h****");
updateCasterSceneConfigRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
updateCasterSceneConfigRequest.setComponentIds(componentList);
UpdateCasterSceneConfigResponse response = iAcsClient.getAcsResponse(updateCasterSceneConfigRequest);
// 删除场景配置(DeleteCasterSceneConfig)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
DeleteCasterSceneConfigRequest deleteCasterSceneConfigRequest = new DeleteCasterSceneConfigRequest();
deleteCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
deleteCasterSceneConfigRequest.setLayoutId("LIVEPRODUCER_POST-cn-0pp123h****");
deleteCasterSceneConfigRequest.setType("Component") // 清除场景中的组件配置
DeleteCasterSceneConfigResponse response = iAcsClient.getAcsResponse(deleteCasterSceneConfigRequest);
7.预监(PVW)切换到节目(PGM)
步骤说明
导播台启动成功后,可将PVW的布局配置信息设置到PGM场景。
前提条件
PVW场景存在并启动
PGM场景存在并启动
接口说明
名称 | 描述 |
---|---|
CopyCasterSceneConfig | 更新场景配置 |
CasterID | 指定导播台实例ID |
FromSceneID | 指定PVW场景ID |
ToSceneID | 指定PGM场景ID |
示例代码
// 场景切换(CopyCasterSceneConfig)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
CopyCasterSceneConfigRequest copyCasterSceneConfigRequest = new CopyCasterSceneConfigRequest();
copyCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
copyCasterSceneConfigRequest.setFromSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
copyCasterSceneConfigRequest.setToSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
CopyCasterSceneConfigResponse response = iAcsClient.getAcsResponse(copyCasterSceneConfigRequest);
8.预监开启、关闭
步骤说明
导播台启动成功后,可通过预监开启、关闭服务控制PVW场景,关闭PVW场景后布局及视频源变动可直接生效至PGM场景。
前提条件
PVW场景存在。
接口说明
名称 | 描述 |
---|---|
StartCasterScene | 预监开启 |
StopCasterScene | 预监关闭 |
CasterID | 指定导播台实例ID |
SceneID | 指定PVW场景ID |
示例代码
// 预监开启(StartCasterScene)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
StartCasterSceneRequest startCasterSceneRequest = new StartCasterSceneRequest();
startCasterSceneRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
startCasterSceneRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
StartCasterSceneResponse response = iAcsClient.getAcsResponse(startCasterSceneRequest);
// 预监关闭(StopCasterScene)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
StopCasterSceneRequest stopCasterSceneRequest = new StopCasterSceneRequest();
stopCasterSceneRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
stopCasterSceneRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
StopCasterSceneResponse response = iAcsClient.getAcsResponse(stopCasterSceneRequest);
9.备播切换、切回
步骤说明
导播台启动成功后,可通过备播切换服务将PGM场景切换至备播画面,若需要切回直播场景可通过回切直播服务完成。
前提条件
导播台实例已启动
完成备播素材ID配置
接口说明
名称 | 描述 |
---|---|
EffectCasterUrgent | 备播紧急生效 |
SetCasterSceneConfig | 切回直播 |
CasterID | 指定导播台实例ID |
SceneID | 指定PGM场景实例ID |
示例代码
// 切换备播(StartCasterScene)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
EffectCasterUrgentRequest effectCasterUrgentRequest = new EffectCasterUrgentRequest();
effectCasterUrgentRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
effectCasterUrgentRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
EffectCasterUrgentResponse response = iAcsClient.getAcsResponse(effectCasterUrgentRequest);
// 切回直播(SetCasterSceneConfig)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
SetCasterSceneConfigRequest setCasterSceneConfigRequest = new SetCasterSceneConfigRequest();
setCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
setCasterSceneConfigRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****");
setCasterSceneConfigRequest.setLayoutId(null); // 若需要退出备播播放传null,若需要转到指定布局输入layoutId即可
SetCasterSceneConfigResponse response = iAcsClient.getAcsResponse(setCasterSceneConfigRequest);
10.停止导播台
步骤说明
导播台启动成功后,可通过停止导播台服务停止指定导播台及底层音视频任务。
前提条件
导播台实例已启动。
接口说明
名称 | 描述 |
---|---|
StopCaster | 停止导播台 |
CasterID | 指定导播台实例ID |
示例代码
// 停止导播台(StopCaster)
IAcsClient iAcsClient = new DefaultAcsClient(DefaultProfile.getProfile("regionId", "accessKeyId", "secret"));
StopCasterRequest request = new StopCasterRequest();
request.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****");
StopCasterResponse response = iAcsClient.getAcsResponse(request);
导播服务提供了一系列API接口,可以分为导播台创建与配置、视频内容编辑、视频内容输出、查询和管理等五大类,另外还提供轻量级轮播API接口。
您可通过调API接口快速接入并使用导播服务,流程如下:
1.创建(CreateCaster)和配置导播台(SetCasterConfig)。
2.添加导播视频资源(AddCasterVideoResource)。
3.添加导播台布局(AddCasterLayout)。
4.启动导播台(StartCaster)。
5.停止导播台(StopCaster)。
核心接口
API | 描述 |
---|---|
CreateCaster | 创建导播台 |
SetCasterConfig | 配置导播台 |
AddCasterVideoResource | 添加视频源 |
SetCasterChannel | 设置导播台通道 |
AddCasterLayout | 添加导播台布局 |
AddCasterComponent | 添加导播台组件 |
StartCaster | 启动导播台 |
UpdateCasterSceneConfig | 更新导播场景配置 |
CopyCasterSceneConfig | 复制导播场景配置 |
DescribeCasterStreamUrl | 查询导播台流地址 |
DescribeCasters | 查询导播台列表 |
StopCaster | 停止导播台 |
DeleteCaster | 删除导播台 |
常用接口
API | 描述 |
---|---|
ModifyCasterVideoResource | 修改视频源 |
DeleteCasterVideoResource | 删除视频源 |
DescribeCasterVideoResources | 查询视频源 |
ModifyCasterLayout | 修改导播台布局 |
DeleteCasterLayout | 删除导播台布局 |
DescribeCasterLayouts | 查询导播台布局列表 |
ModifyCasterComponent | 修改导播台组件 |
DeleteCasterComponent | 删除导播台组件 |
DescribeCasterComponents | 查询导播台组件列表 |
DescribeCasterConfig | 查询导播台配置 |
DescribeCasterScenes | 查询导播台场景列表 |
SetCasterSceneConfig | 设置场景配置 |
DeleteCasterSceneConfig | 删除导播台场景配置 |
StopCasterScene | 停止场景 |
StartCasterScene | 启动场景 |
UpdateCasterSceneAudio | 更新场景音频配置 |
DescribeCasterSceneAudio | 查询导播台场景音频配置 |
DescribeCasterChannels | 查询导播台通道 |
CopyCaster | 复制导播台 |
EffectCasterVideoResource | 更新备播片 |
EffectCasterUrgent | 切换备播 |
CallBack | 添加回调 |
其他接口
API | 描述 |
---|---|
ModifyCasterEpisode | 修改导播台节目 |
DeleteCasterEpisodeGroup | 删除导播台节目列表 |
DeleteCasterEpisode | 删除导播台节目 |
AddCasterEpisodeGroupContent | 添加节目列表内容 |
AddCasterEpisodeGroup | 添加导播台节目列表 |
AddCasterEpisode | 添加导播台节目 |
说明 如果需要使用节目功能,推荐使用播单型导播台API。
API | 描述 |
---|---|
AddCasterProgram | 添加导播台节目单 |
ModifyCasterProgram | 修改导播台节目单 |
DescribeCasterProgram | 查询导播台节目单 |
DeleteCasterProgram | 删除导播台节目单 |
API | 描述 |
---|---|
AddPlaylistItems | 创建或添加节目单项 |
DeletePlaylistItems | 删除节目单项 |
ListPlaylistItems | 查询节目单项 |
EditPlaylist | 编辑节目单 |
DeletePlaylist | 删除节目单 |
ListPlaylist | 查询节目单 |
StartPlaylist | 启动节目单 |
StopPlaylist | 停止节目单 |
API | 描述 |
---|---|
AddStudioLayout | 添加虚拟演播厅布局 |
AddStudioLayout | 删除虚拟演播厅布局 |
DescribeStudioLayouts | 查询虚拟演播厅布局 |
ModifyStudioLayout | 修改虚拟演播厅布局 |
本文提供了直接调用导播台openAPI的Demo,具体逻辑请根据实际情况自行编写。
导播台整个生命流程顺序如下 :
1. 创建导播台
2. 设置导播台
3. 添加视频资源
4. 添加布局
5. (可选)添加组件
组件包括ET字幕、图片、文字等,可以不创建,请根据实际情况选择是否使用。
6. 启动导播台
7. 设置播放场景
8. 停止导播台
9. 删除导播台
说明 了解API的详细信息,请参见 API概述。
语言:Go。
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
uuid "github.com/satori/go.uuid"
"testing"
)
// 创建导播台
func CreateCaster(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
// 创建导播台请求参数
createCasterRequest := live.CreateCreateCasterRequest()
createCasterRequest.ClientToken = uuid.NewV1().String()
createCasterRequest.CasterName = "导播台测试" // 不生效的话,请通过接口【设置导播台】来设置
createCasterRequest.ChargeType = "PostPaid"
createCasterRequest.NormType = "1"
_, err = liveClient.CreateCaster(createCasterRequest)
if err != nil {
t.Fatal(err)
}
}
关于CreateCaster接口的请求参数等更多信息,请参见
创建导播台。
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
)
// 设置导播台
func SetCasterConfig(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
// 设置导播台配置参数
createSetCasterConfig := live.CreateSetCasterConfigRequest()
createSetCasterConfig.CasterId = "xxxxxx"
createSetCasterConfig.CasterName = "导播台测试"
createSetCasterConfig.ChannelEnable = "1"
createSetCasterConfig.Delay = "0"
createSetCasterConfig.DomainName = "xxxxxxxx"
createSetCasterConfig.ProgramEffect = "1"
createSetCasterConfig.ProgramName = "test loop play"
// 转码设置(横竖屏模式及清晰度设置)
// 参考如下文档:SetCasterConfig
// 其中:CasterTemplate取值范围如下
// lp_ld:流畅、lp_sd:标清、lp_hd:高清、lp_ud:超清。
// lp_ld_v:竖屏流畅、lp_sd_v:竖屏标清、lp_hd_v:竖屏高清、lp_ud_v:竖屏超清。
createSetCasterConfig.TranscodeConfig = `{"CasterTemplate": "lp_ld"}`
// 录制
// json字段含义请参考:AddLiveAppRecordConfig
createSetCasterConfig.RecordConfig = fmt.Sprintf(`{ "endpoint": "mos-cn-shanghai.moduyuncs.com", "mosBucket": "test-record", "videoFormat": [{"format": "flv", "interval": 900, "prefix":"record/{AppName}/{StreamName}/{StartTime}_{EndTime}" }]}`)
_, err = liveClient.SetCasterConfig(createSetCasterConfig)
if err != nil {
t.Fatal(err)
}
}
关于SetCasterConfig接口的更多信息,请参见
配置导播台
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
)
// 添加资源
func AddCasterVideoResource(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
// 创建导播台视频资源
addCasterVideoResourceRequest := live.CreateAddCasterVideoResourceRequest()
addCasterVideoResourceRequest.CasterId = "xxxx"
addCasterVideoResourceRequest.ResourceName = "测试使用视频资源"
addCasterVideoResourceRequest.LiveStreamUrl = "xxxxxxxxxxxx"
addCasterVideoResourceRequest.PtsCallbackInterval = "1000"
addCasterVideoResourceResp, err := liveClient.AddCasterVideoResource(addCasterVideoResourceRequest)
if err != nil {
t.Fatal(err)
}
resourceID := addCasterVideoResourceResp.ResourceId
// 视频资源与通道一一绑定
setCasterChannelRequest := live.CreateSetCasterChannelRequest()
setCasterChannelRequest.CasterId = "xxx"
setCasterChannelRequest.PlayStatus = "1"
setCasterChannelRequest.ChannelId = "RV01"
setCasterChannelRequest.ResourceId = resourceID
_, err = liveClient.SetCasterChannel(setCasterChannelRequest)
if err != nil {
t.Fatal(err)
}
}
关于AddCasterVideoResource接口的更多信息,请参见
添加导播台视频资源
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
)
// 添加布局
func AddCasterLayout(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
// 创建布局
addCasterLayoutRequest := live.CreateAddCasterLayoutRequest()
addCasterLayoutRequest.CasterId = "xxx"
addCasterLayoutRequest.BlendList = &[]string{"RV01"} // 对应于视频的位置
addCasterLayoutRequest.MixList = &[]string{"RV01"} // 对应于视频的位置
addCasterLayoutRequest.AudioLayer = &[]live.AddCasterLayoutAudioLayer{
{
VolumeRate: "1",
ValidChannel: "all",
FixedDelayDuration: "0",
},
}
addCasterLayoutRequest.VideoLayer = &[]live.AddCasterLayoutVideoLayer{
{
FillMode: "fit",
HeightNormalized: "1",
WidthNormalized: "1",
PositionRefer: "topLeft",
PositionNormalized: &[]string{"0", "0"},
FixedDelayDuration: "0",
},
}
_, err = liveClient.AddCasterLayout(addCasterLayoutRequest)
if err != nil {
t.Fatal(err)
}
}
关于AddCasterLayout接口的更多信息,请参见
添加导播台布局
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
)
// 添加ET字幕组件并应用到场景
func AddETComponent(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
// 此方法前提: 导播台已经存在,且添加的视频资源是直播流,且locationID是RV01
// 注:ET字幕必须是直播流才有效
casterID := "xxxxx"
// 创建组件
r := live.CreateAddCasterComponentRequest()
r.CasterId = casterID
r.ComponentType = "caption"
r.ComponentName = "ET字幕测试使用"
r.Effect = "none"
r.LocationId = "RC01"
r.ComponentLayer = `{"HeightNormalized":"1","WidthNormalized":"1","PositionRefer":"topLeft","PositionNormalized":["0.05", "0.7"]}`
// 字幕具体字段请参考:AddCasterComponent文档内的【CaptionLayerContent】字段说明
// 其中新增以下字段,目前官网文档尚未更新,请注意
// BoxWidthNormalized:文字背景宽度归一化值,该归一化值是基于文字的size来计算的,即boxWidth/font_size, 如果系统归一化反计算出来的值超过16,取16. 默认0。
// BoxColor:文字背景色彩,取值格式为 0xRGBA,比如: 取值"0xff0000ff" 表示红色, 不透明; 默认"" 表示无效。
// ShadowxWidthNormalized:文字阴影x坐标归一化值,该归一化值是基于文字的size来计算的,即shadowxWidth/font_size, 如果系统归一化反计算出来的值超过16,取16. 默认0。
// ShadowyWidthNormalized:文字阴影y坐标归一化值,该归一化值是基于文字的size来计算的,即shadowyWidth/font_size, 如果系统归一化反计算出来的值超过16,取16. 默认0。
// ShadowColor:文字阴影色彩,取值格式为 0xRGBA,比如: 取值"0xff0000ff" 表示红色, 不透明; 默认"" 表示无效。
r.CaptionLayerContent = `{
"SizeNormalized": 0.05,
"Color": "0xFFFFFF",
"LocationId": "RV01",
"BorderColor": "0x696969",
"BorderWidthNormalized": 0.1,
"BoxColor": "0xffffff",
"BoxWidthNormalized": 0.7,
"ShadowColor": "0x3c3c3c",
"ShadowxWidthNormalized": 0.4,
"ShadowyWidthNormalized": 0.4,
"SourceLan": "cn",
"TargetLan": "en",
"PtsOffset": -1000,
"SourceLanPerLineWordCount": 28,
"TargetLanPerLineWordCount": 60,
"ShowSourceLan": true,
"ShowTargetLan": true,
"Truncation": false,
"AppearDuration": 20000,
"AppearMode": "Movie"
}`
addCasterComponentResp, err := liveClient.AddCasterComponent(r)
if err != nil {
t.Fatal(err)
}
// 应用组件到指定的场景下
setCasterSceneConfigRequest := live.CreateUpdateCasterSceneConfigRequest()
setCasterSceneConfigRequest.LayoutId = "xxxxx"
setCasterSceneConfigRequest.CasterId = casterID
setCasterSceneConfigRequest.SceneId = "xxxx"
setCasterSceneConfigRequest.ComponentId = &[]string{addCasterComponentResp.ComponentId}
_, err = liveClient.UpdateCasterSceneConfig(setCasterSceneConfigRequest)
if err != nil {
t.Fatal(err)
}
}
关于AddCasterComponent接口的更多信息,请参见
添加导播台组件
关于AddCasterComponent接口的更多信息,请参见
设置场景配置
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
"time"
)
// 启动导播台、设置播放场景
func StartCaster(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
// 启动导播台
startCasterRequest := live.CreateStartCasterRequest()
startCasterRequest.CasterId = "xxx"
startCasterResp, err := liveClient.StartCaster(startCasterRequest)
if err != nil {
t.Fatal(err)
}
// 因为资源加载需要时间,如果立马启动,则可能资源尚未加载成功,所以需要暂停一下
time.Sleep(time.Second)
// 设置播放场景
// PVW (可选设置)
setCasterSceneConfigRequest := live.CreateSetCasterSceneConfigRequest()
setCasterSceneConfigRequest.LayoutId = "xxx"
setCasterSceneConfigRequest.CasterId = "xxx"
setCasterSceneConfigRequest.SceneId = startCasterResp.PvwSceneInfos.SceneInfo[0].SceneId
_, err = liveClient.SetCasterSceneConfig(setCasterSceneConfigRequest)
if err != nil {
t.Fatal(err)
}
// PGM (必选设置)
setCasterSceneConfigRequest.SceneId = startCasterResp.PgmSceneInfos.SceneInfo[0].SceneId
_, err = liveClient.SetCasterSceneConfig(setCasterSceneConfigRequest)
if err != nil {
t.Fatal(err)
}
}
关于StartCaster接口的更多信息,请参见
启动导播台
关于SetCasterSceneConfig接口的更多信息,请参见
设置场景配置
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
)
// 切换布局
func ChangeLayout(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
casterID := "xxxxxx"
// 更改场景使用的布局ID
setCasterSceneConfigRequest := live.CreateUpdateCasterSceneConfigRequest()
setCasterSceneConfigRequest.LayoutId = "xxxxxxxxxxxx"
setCasterSceneConfigRequest.CasterId = casterID
setCasterSceneConfigRequest.SceneId = "xxxxxxxxxxxxxx"
_, err = liveClient.UpdateCasterSceneConfig(setCasterSceneConfigRequest)
if err != nil {
t.Fatal(err)
}
}
关于SetCasterSceneConfig接口的更多信息,请参见
设置场景配置
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
)
// 停止导播台
func StopCaster(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("", "", "")
if err != nil {
t.Fatal(err)
}
// 停止导播台
stopCasterRequest := live.CreateStopCasterRequest()
stopCasterRequest.CasterId = "xxxx"
_, err = liveClient.StopCaster(stopCasterRequest)
if err != nil {
t.Fatal(err)
}
}
关于StopCaster接口的更多信息,请参见
停止导播台
:
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"testing"
)
// 停止并删除导播台
func DeleteCaster(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("", "", "")
if err != nil {
t.Fatal(err)
}
// 删除导播台
deleteCasterRequest := live.CreateDeleteCasterRequest()
deleteCasterRequest.CasterId = "xxxxxxx"
_, err = liveClient.DeleteCaster(deleteCasterRequest)
if err != nil {
t.Fatal(err)
}
}
关于DeleteCaster接口的更多信息,请参见
删除导播台
启动并创建一个节目单 :
package caster
import (
"github.com/moduyun/alibaba-cloud-sdk-go/services/live"
"github.com/moduyun/alibaba-cloud-sdk-go/services/vod"
uuid "github.com/satori/go.uuid"
"strconv"
"testing"
"time"
)
// 使用最简单的方式,创建并启动一个节目单
func CreateProgramAndStartup(t *testing.T) {
liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
vodClient, err := vod.NewClientWithAccessKey("xxx", "xxx", "xxx")
if err != nil {
t.Fatal(err)
}
// 创建导播台
createCasterRequest := live.CreateCreateCasterRequest()
createCasterRequest.ClientToken = uuid.NewV1().String()
createCasterRequest.CasterName = "导播台节目单测试"
createCasterRequest.ChargeType = "PostPaid"
createCasterRequest.NormType = "0"
createCasterResp, err := liveClient.CreateCaster(createCasterRequest)
if err != nil {
t.Fatal(err)
}
casterID := createCasterResp.CasterId
// 设置导播台配置
createSetCasterConfig := live.CreateSetCasterConfigRequest()
createSetCasterConfig.CasterId = casterID
createSetCasterConfig.CasterName = "导播台节目单测试"
createSetCasterConfig.ChannelEnable = "0"
createSetCasterConfig.Delay = "0"
createSetCasterConfig.DomainName = "xxxxxxxxxxx"
createSetCasterConfig.ProgramEffect = "1"
createSetCasterConfig.ProgramName = "导播台节目名称"
createSetCasterConfig.TranscodeConfig = `{"LiveTemplate":["lld"], "CasterTemplate": "lp_ld"}`
_, err = liveClient.SetCasterConfig(createSetCasterConfig)
if err != nil {
t.Fatal(err)
}
// 创建导播台视频资源
materialVideoID := "xxxxxxxx"
locationID := "RV01"
addCasterVideoResourceRequest := live.CreateAddCasterVideoResourceRequest()
addCasterVideoResourceRequest.CasterId = casterID
addCasterVideoResourceRequest.ResourceName = "测试使用视频资源"
addCasterVideoResourceRequest.PtsCallbackInterval = "1000"
addCasterVideoResourceRequest.LocationId = locationID
addCasterVideoResourceRequest.MaterialId = materialVideoID
addCasterVideoResourceResp, err := liveClient.AddCasterVideoResource(addCasterVideoResourceRequest)
if err != nil {
t.Fatal(err)
}
resourceID := addCasterVideoResourceResp.ResourceId
// 创建节目单
baseTimeNow := time.Now().UTC().Add(time.Minute)
req := vod.CreateGetMezzanineInfoRequest()
req.VideoId = materialVideoID
mezzanineInfoResp, err := vodClient.GetMezzanineInfo(req)
duration, _ := strconv.ParseFloat(mezzanineInfoResp.Mezzanine.Duration, 64)
startTime := baseTimeNow.Format("2006-01-02T15:04:05Z")
baseTimeNow = baseTimeNow.Add(time.Duration(duration) * time.Second)
endTime := baseTimeNow.Format("2006-01-02T15:04:05Z")
episode := make([]live.AddCasterProgramEpisode, 0, 1)
episode = append(episode, live.AddCasterProgramEpisode{
EpisodeType: "Resource",
EpisodeName: mezzanineInfoResp.Mezzanine.FileName,
ResourceId: resourceID,
StartTime: startTime,
EndTime: endTime,
SwitchType: "TimeFirst", // ContentFirst
})
program := live.CreateAddCasterProgramRequest()
program.Episode = &episode
program.CasterId = casterID
_, err = liveClient.AddCasterProgram(program)
if err != nil {
t.Fatal(err)
}
// 启动导播台
startCasterRequest := live.CreateStartCasterRequest()
startCasterRequest.CasterId = casterID
_, err = liveClient.StartCaster(startCasterRequest)
if err != nil {
t.Fatal(err)
}
}
通过阅读本文,您可以快速了解云导播台Web SDK产品、优势以及使用场景。
云导播台Web SDK基于导播台完备的制播、导播服务能力,输出完整SDK,提供一站式导播服务。作为Web组件,能快速集成到您的网站中。云导播台Web
SDK还支持定制服务和拓展功能,持续提升导播能力。
云导播台Web SDK的整体架构如下所示。橙色部分是摩杜云提供的能力,包括云导播台Web
SDK和API接口;灰色部分是需要您自行开发的能力,包括对云导播台Web
SDK请求的处理,以及对摩杜云API的调用。
云导播台Web SDK拥有以下核心优势:
简单易集成
导播台Web组件化,接入简单低成本。集成了控制台页面,无需额外开发前端页面与交互。
定制化服务
具备扩展机制,接入方可根据需求定制。
持续优化升级
Web SDK与主线产品同步更新,定期迭代,持续拓展新功能、新场景,深入优化提升导播能力与体验。
直播SaaS平台
可直接嵌套集成了控制台页面的Web SDK,整合自有SaaS能力快速输出给用户,帮助提供整套直播解决方案。
导播服务平台
依据自有业务场景轻量开发,或直接嵌套Web SDK,快速输出导播服务能力。
直播解决方案商
导播台广泛应用于各类直播场景中,实时图文包装、多语字幕等功能协助提升直播的专业度和便捷性。直播服务提供商可快捷集成Web SDK,节省开发成本。
在对导播台的功能区域及用途、OpenAPI的调用方式有一定认识后,通过阅读本文,您可以了解云导播台Web SDK的集成方法。
已开通导播需要的相关服务并绑定域名,具体操作请参见
服务开通。
录制功能需授予直播写入MOS的权限,具体操作请参见
录制存储至MOS。
云导播台Web SDK可兼容以下版本的浏览器。
浏览器 | 支持的最低版本 |
---|---|
Google Chrome | 60 |
Firefox | 25 |
Microsoft Edge | 12 |
Safari | 10 |
Opera | 36 |
QQ Browser | 10 |
360 Browser | stable |
Sogou Browser | stable |
UC Browser | stable |
LieBao Browser | stable |
下载Demo下载包
// 安装serve作为本地静态资源服务器
$ npm install serve -g
// 进入到 demo 目录
$ serve
// 默认访问http://localhost:5000即可
云导播台Web SDK服务需要开通License,可以通过邮箱或钉钉群完成申请。
通过邮箱申请开通:
i.准备以下资料,并保证资料齐全、格式规范:公司或平台名称、摩杜云的账号或UID(若没有账号请注册)、联系人、联系电话。
ii.将上述资料发送至邮箱
为更快速响应申请,邮件主题请注明:申请云导播台License。我们将3个工作日之内处理完开通申请。
1.添加集成代码。
请按下面的示例将脚本及样式文件引用到您的页面中,即可完成最新云导播台Web SDK页面代码的添加。
2.初始化SDK。
初始化前,需要:
传入业务名称标识、云导播台需挂载的元素ID、导播台ID、(可选)语言选项。
注册所有服务(Service),详情请参见 服务注册。
const { default: Caster } = window.ModuCaster;
// 云导播台 sdk 加载后,会在全局挂载 ModuCaster 对象
const services = {};
const caster = new Caster(
{
/**
* type: string
* 请传入您的业务名称标识
*/
BizCode: 'BizCode',
/**
* type: string
* 导播台要挂载的元素id,请确保此元素已创建
*/
Container: 'caster-root',
/**
* type: string
* 请填写您API接入的服务地域
* 华东2:cn-shanghai
* 华北2:cn-beijing
*/
Region: 'cn-shanghai',
/**
* type: string
* 导播台id
*/
Id: 'LIVEPRODUCER_POST-cn-0pp0galm107',
/**
* type: 'zh' | 'en
* 可选语言 'zh'(简体中文) 'en'(英文-US),不传默认中文
*/
// Language: 'en'
},
/**
* type: object
* 要注册的所有请求,见下文
*/
services
);
// 当您不再使用导播台时,可以调用 destroy 方法清除副作用(如timers)
caster.destory();
云导播台Web SDK本身只负责界面和交互,不会发起请求。
您需要在初始化时进行服务注册,将请求的逻辑提供给Web
SDK调用。请求本身应该先发送给您自己的服务端,您自己的服务端再转发给相关的摩杜云服务端。
示例代码
const services = {
DescribeCasters: (params) => fetch('/DescribeCasters', params),
// other services...
}
上述示例注册了DescribeCasters函数,函数内容是发起一个/DescribeCasters请求(注意透传参数),并返回这个请求的Promise。其中,/DescribeCasters调用您服务端的API,服务端再调用摩杜云OpenAPI。
需要注册的服务列表
export interface ServicesImp {
// 产品:LIVE(视频直播),API文档 https://help.moduyun.com/document_detail/48207.html
DescribeCasters: (...args: any[]) => Promise< Resp>;
DescribeCasterConfig: (...args: any[]) => Promise< Resp>;
StopCaster: (...args: any[]) => Promise< Resp>;
StartCaster: (...args: any[]) => Promise< Resp>;
DescribeCasterVideoResources: (...args: any[]) => Promise< Resp>;
AddCasterVideoResource: (...args: any[]) => Promise< Resp>;
DeleteCasterVideoResource: (...args: any[]) => Promise< Resp>;
DescribeCasterChannels: (...args: any[]) => Promise< Resp>;
DescribeCasterScenes: (...args: any[]) => Promise< Resp>;
StartCasterScene: (...args: any[]) => Promise< Resp>;
StopCasterScene: (...args: any[]) => Promise< Resp>;
UpdateCasterSceneConfig: (...args: any[]) => Promise< Resp>;
DescribeCasterLayouts: (...args: any[]) => Promise< Resp>;
DescribeCasterComponents: (...args: any[]) => Promise< Resp>;
DeleteCasterComponent: (...args: any[]) => Promise< Resp>;
EffectCasterUrgent: (...args: any[]) => Promise< Resp>;
DeleteCasterSceneConfig: (...args: any[]) => Promise< Resp>;
DescribeCasterSceneAudio: (...args: any[]) => Promise < Resp>;
DeleteCasterLayout: (...args: any[]) => Promise< Resp>;
SetCasterConfig: (...args: any[]) => Promise< Resp>;
ModifyCasterVideoResource: (...args: any[]) => Promise< Resp>;
SetCasterChannel: (...args: any[]) => Promise< Resp>;
ModifyCasterLayout: (...args: any[]) => Promise< Resp>;
AddCasterLayout: (...args: any[]) => Promise< Resp>;
CopyCasterSceneConfig: (...args: any[]) => Promise< Resp>;
UpdateCasterSceneAudio: (...args: any[]) => Promise< Resp>;
DescribeCasterStreamUrl: (...args: any[]) => Promise< Resp>;
DescribeLiveStreamsOnlineList: (...args: any[]) => Promise< Resp>;
DescribeLiveDomainConfigs: (...args: any[]) => Promise< Resp>;
DescribeLiveUserDomains: (...args: any[]) => Promise< Resp>;
AddCasterComponent: (...args: any[]) => Promise< Resp>;
ModifyCasterComponent: (...args: any[]) => Promise< Resp>;
DescribeCasterRtcInfo: (...args: any[]) => Promise< Resp>;
DescribeCasterSyncGroup: (...args: any[]) => Promise< Resp>;
SetCasterSyncGroup: (...args: any[]) => Promise< Resp>;
ModifyStudioLayout: (...args: any[]) => Promise< Resp>;
AddStudioLayout: (...args: any[]) => Promise< Resp>;
DescribeStudioLayouts: (...args: any[]) => Promise< Resp>;
DeleteStudioLayout: (...args: any[]) => Promise< Resp>;
DescribeStudioDefaultBgImageList: (...args: any[]) => Promise< Resp>;
// 产品:视频点播(VOD),API文档 https://help.moduyun.com/document_detail/60574.html
GetPlayInfo: (...args: any[]) => Promise< Resp>;
CreateUploadImage: (...args: any[]) => Promise< Resp>;
SearchMedia: (...args: any[]) => Promise< Resp>;
GetImageInfo: (...args: any[]) => Promise< Resp>;
// 产品:对象存储(MOS),API文档 https://help.moduyun.com/document_detail/31948.html
GetService: (...args: any[]) => Promise< Resp>;
GetBucket: (...args: any[]) => Promise< Resp>;
// 产品:访问控制(RAM),API文档 https://help.moduyun.com/document_detail/62184.html
ListPoliciesForRole: (...args: any[]) => Promise< Resp>;
}
export interface Resp< T = any> {
code: string;
httpStatusCode: string;
requestId: string;
successResponse: boolean;
data: T;
}
服务返回值的处理
每个服务应返回一个Promise对象,无论请求是否成功,总是会调用resolve方法返回结果。
返回的数据结构遵循以下规范,其中,data是具体的业务数据。
interface Resp< T = any> {
code: string;
httpStatusCode: string;
requestId: string;
successResponse: boolean;
data: T;
}
如果OpenAPI请求成功,会返回类似如下数据
{
"RequestId": "996B6B22-FF2C-4069-929A-5B63261410C2",
"Total": 0,
"CasterList": {
"Caster": []
}
}
将返回的数据放入data段,使用resolve方法返回给SDK,应返回如下完整数据。
{
"code": "200",
"httpStatusCode": "200",
"requestId": "996B6B22-FF2C-4069-929A-5B63261410C2",
"successResponse": true,
"data": {
"RequestId": "996B6B22-FF2C-4069-929A-5B63261410C2",
"Total": 0,
"CasterList": {
"Caster": []
}
}
}
如果OpenAPI请求失败,会返回类似如下数据。
{
"RequestId": "F7FA5276-75D0-4C03-AC04-C5E35AB95CF4",
"HostId": "live.moduyuncs.com",
"Code": "InvalidCaster.NotFound",
"Message": "The CasterId provided does not exist in our records.",
"Recommend": "https://error-center.moduyun.com/status/search?Keyword=InvalidCaster.NotFound&source=PopGw"
}
此时,使用resolve方法返回给SDK,会返回如下数据。
{
"code": "InvalidCaster.NotFound",
"requestId": "F7FA5276-75D0-4C03-AC04-C5E35AB95CF4"
}
需要忽略的异常
一般情况下,如果返回结果的状态码为非200,您需要进行异常处理,但以下错误码除外。
需要忽略的错误码及对应的API接口如下所示。
API接口 | 错误码 |
---|---|
DescribeCasterStreamUrl | 'InvalidScene.NotFound','InvalidDomainName.NotFound' |
DescribeCasterScenes | 'InvalidDomainName.NotFound' |
UpdateCasterSceneConfig | 'MissingLayoutId' |
本文介绍了云导播API与云导播控制台的差异。
您可以根据自己的业务需求选择使用云导播台或云导播API来搭建导播服务。例如:
如果公司要做一场多地联合的会议直播,您可以选择控制台导播功能,不需要任何开发就可以轻松使用导播服务。
如果要搭建一个SAAS平台提供给其他客户或用户使用,您可以选择更加灵活的云导播API来搭建。
导播控制台和API的主要差异如下:
分类 | 功能 | 规格项 | 控制台 | API |
---|---|---|---|---|
导播输入 | 视频源 | 数量 | ≤6 | ≤6 |
直播源 | 支持摩杜云CDN直播源 | 支持全网直播源 | ||
点播源 | 支持点播素材库视频源 | 支持全网点播视频 | ||
分辨率 | 360P、480P、720P、1080P | 360P、480P、720P、1080P | ||
直播拉流协议 | rtmp | http、rtmp | ||
视频格式 | 3gp、asf、avi、dat、dv、flv、f4v、gif、m3u8、m4v、mj2、mjpeg、mkv、mov、mp4、mpeg、ogg、rm、rmvb、swf、ts、vob、wmv、webm、ac3 | 3gp、asf、avi、dat、dv、flv、f4v、gif、m3u8、m4v、mj2、mjpeg、mkv、mov、mp4、mpeg、ogg、rm、rmvb、swf、ts、vob、wmv、webm、ac3 | ||
编码格式 | MP3、 AAC/HEAAC、WAV、H.264、VP8、VP9 | MP3、 AAC/HEAAC、WAV、H.264、VP8、VP9 | ||
文本 | 数量 | ≤4 | ≤4 | |
字体 | 楷体 | 楷体 | ||
排版 | 横排 | 横排 | ||
颜色 | RGB | RGB | ||
字符数 | ≤1024 | ≤1024 | ||
图片 | 数量 | ≤4 | ≤4 | |
分辨率 | 360P、480P、720P | 360P、480P、720P | ||
图片格式 | png、jpg、apng、gif | png、jpg、apng、gif | ||
导播输出 | 监视输出 | 通道 | 6 | 6 |
PVW | 1 | 1 | ||
PGM | 1 | 1 | ||
旁路输出 | 数量 | 1 | 1 | |
推流协议 | rtmp | rtmp | ||
编码格式 | H.264、AAC | H.264、AAC | ||
分辨率 | 360P、480P、720P | 360P、480P、720P | ||
旁路延时 | 0-300s | 0-300s | ||
旁路地址 | 不支持自定义 | 允许第三方推流地址 | ||
紧急备播 | 备播视频 | 支持自定义(≤1080P) | 支持自定义(≤1080P) | |
备播切换 | 支持备播切换、切回、旁路清空 | 支持备播切换、切回、旁路清空 | ||
媒体处理 | 视频布局 | 画面数量 | ≤4 | ≤4 |
布局样式 | 单画面、画中画、左右分屏、三画面、四画面等 | 支持自定义布局样式 | ||
布局数量 | ≤12 | 无限制 | ||
播放控制 | 不支持pause、seek | 支持点播文件pause、seek | ||
音频混编 | 音轨数量 | ≤6 | ≤6 | |
音量调节 | 支持 | 支持 | ||
PGM监听 | 支持 | 根据业务自行实现 | ||
本地试听 | 支持 | 根据业务自行实现 | ||
音频增益 | 0-2.0 | 0-10.0 | ||
声道控制 | 不支持 | 支持 | ||
音频跟随 | 支持 | 支持 | ||
语音识别 | 语音字幕 | 不支持 | 支持 | |
直播转码 | 旁路转码 | 360P、480P、720P | 360P、480P、720P、1080P | |
云端录制 | 录制格式 | m3u8、mp4、flv | m3u8、mp4、flv | |
旁路录制 | 支持摩杜云CDN的旁路直播录制 | 支持摩杜云CDN的旁路直播录制 | ||
同步模式 | 同步区域 | 通道、PGM、PVW | 通道、PGM、PVW | |
导播延时 | 切换延时 | ≤700ms | ≤700ms(集成短延时) |
说明
导播监视的通道指的是导播台接受输入源的通道,通道数也指输入源的个数。
导播台延时取决于导播台处理的延时(800-6800ms)和直播延时。关于如何降低直播延时,请参见
如何降低直播延时。
本文介绍导播台性能限制。
导播台的性能受输入输出分辨率、输入源个数、布局画面数、画面复杂程度和添加的素材个数等多种因素影响。以下测试数据供您参考:
输出分辨率 | 输入分辨率 | 视频源数 | 布局画面数 | 画面复杂程度 | 文本 | 图片(720P) | 帧率 | 卡顿 |
---|---|---|---|---|---|---|---|---|
720 | 1080 | ≤4 | ≤2 | 复杂 | ≤4 | ≤1 | 稳定 | 无 |
720 | ≤4 | ≤2 | 复杂 | ≤4 | ≤2 | 稳定 | 无 | |
480 | ≤6 | ≤4 | 复杂 | ≤4 | ≤3 | 稳定 | 无 | |
360 | ≤6 | ≤4 | 复杂 | ≤4 | ≤4 | 稳定 | 无 | |
480 | 1080 | ≤4 | ≤3 | 复杂 | ≤4 | ≤2 | 稳定 | 无 |
720 | ≤4 | ≤3 | 复杂 | ≤4 | ≤4 | 稳定 | 无 | |
480 | ≤6 | ≤4 | 复杂 | ≤4 | ≤4 | 稳定 | 无 | |
360 | ≤6 | ≤4 | 复杂 | ≤4 | ≤4 | 稳定 | 无 | |
360 | 1080 | ≤4 | ≤4 | 复杂 | ≤4 | ≤4 | 稳定 | 无 |
720 | ≤4 | ≤4 | 复杂 | ≤4 | ≤4 | 稳定 | 无 | |
480 | ≤6 | ≤4 | 复杂 | ≤4 | ≤4 | 稳定 | 无 | |
360 | ≤6 ≤ | 4 | 复杂 | ≤4 | ≤4 | 稳定 | 无 |
说明
导播台目前支持最大的输出分辨率为720P,输入视频的分辨率为1080P。
以输出720P为例,在保证导播台稳定无卡顿的情况下,最多支持4个1080P的视频源输入通道,在同一个布局中最多同时支持2个1080P视频,文本最多支持4个,720P的图片支持1张(小分辨率图片可支持多张)。
如果超出以上限制范围,可能引起导播台不稳定或卡顿,建议您按以上规格输入或对视频源进行预处理。
新增导播台布局接口、修改导播台布局接口提供了画面高度、宽度归一化参数,您可通过调整该参数实现画面的缩放。
导播台支持多画面布局,用户可以在新增或修改布局时指定多个画面的叠加顺序。接口及参数设置方式参见如下说明:
设置接口:
AddCasterLayout(新增导播台布局)。
ModifyCasterLayout(修改导播台布局)。
设置参数:
VideoLayers:指定画面的布局配置,包括坐标系原点参考位置、画面宽度、高度归一化比例、坐标等信息,该列表中配置信息与BlendList指定的画面一一对应,顺序一致。
BlendList:指定引用资源的位置ID(LocationId),列表中元素的顺序代表了画面自下而上叠加顺序。
导播台提供了单画面、画中画以及四画面布局等典型布局样式,为满足用户场景的多样性,摩杜云导播服务支持用户根据场景需要自定义布局样式。
1.确定布局画面数量、所引用的视频源及位置ID、画面层次关系。
2.确定每个画面的坐标系位置、坐标、宽度或高度缩放比例。
3.确定布局中音频混合数量、所引用的音频源及位置ID、音频混合顺序。
4.确定每个音频的音量倍数、输入声道。
布局参数取值说明请参见添加导播台布局。
名称 | 示例值 | 描述 |
---|---|---|
Action | AddCasterLayout | 操作接口名称。 |
CasterId | LIVEPRODUCER_POST-cn-v0h1557**** | 导播台ID。 |
BlendList.1 | RV01 | 下层视频源位置LocationId。 |
BlendList.2 | RV02 | 上层视频源位置LocationId。 |
MixList.1 | RV01 | 视频源位置LocationId。 |
VideoLayer.1.HeightNormalized | 1.0 | 视频元素高度归一化值,设置高度后宽度会按照等比例缩放。 |
VideoLayer.1.PositionNormalized.1 | 1.0 | 视频元素归一化水平坐标X值。 |
VideoLayer.1.PositionNormalized.2 | 1.0 | 视频元素归一化垂直坐标Y值。 |
VideoLayer.1.PositionRefer | topLeft | 视频元素参考坐标系,以播放窗口左上角为原点。 |
VideoLayer.2.HeightNormalized | 0.3 | 视频元素高度归一化值,设置高度后宽度会按照等比例缩放。 |
VideoLayer.2.PositionNormalized.1 | 0.2 | 视频元素归一化水平坐标X值。 |
VideoLayer.2.PositionNormalized.2 | 0.2 | 视频元素归一化垂直坐标Y值。 |
VideoLayer.2.PositionRefer | topLeft | 视频元素参考坐标系,以播放窗口左上角为原点。 |
AudioLayer.1.ValidChannel | leftChannel | 使用左声道作为音量输入。 |
AudioLayer.1.VolumeRate | 1.0 | 音频音量大小倍数,1.0为原始音量。 |
说明 A.n即A列表的第n个参数,A.n.B即A列表中第n个结构体元素的B参数。
public AddCasterLayoutResponse addCasterLayoutSample() {
/*设置BlendList*/
ArrayList< String> blendList = new ArrayList< String>();
blendList.add("RV01");
blendList.add("RV02");
/*设置VideoLayers*/
ArrayList< VideoLayer> videoLayers = new ArrayList< VideoLayer>();
VideoLayer videoLayerRv01 = new VideoLayer();
ArrayList< Float> positionNormalizedRv01 = new ArrayList< Float>();
positionNormalizedRv01.add(0f);
positionNormalizedRv01.add(0f);
videoLayerRv01.setHeightNormalized(1f); // 设置视频归一化高度比例
videoLayerRv01.setPositionNormalizeds(positionNormalizedRv01); // 设置视频归一化坐标
videoLayerRv01.setPositionRefer("topLeft"); // 设置视频坐标原点参考系
videoLayers.add(videoLayerRv01);
VideoLayer videoLayerRv02 = new VideoLayer();
ArrayList< Float> positionNormalizedRv02 = new ArrayList< Float>();
positionNormalizedRv02.add(0.2f);
positionNormalizedRv02.add(0.2f);
videoLayerRv02.setHeightNormalized(0.3f); // 设置视频归一化高度比例
videoLayerRv02.setPositionNormalizeds(positionNormalizedRv02); // 设置视频归一化坐标
videoLayerRv02.setPositionRefer("topLeft"); // 设置视频坐标原点参考系
videoLayers.add(videoLayerRv02);
/*设置MixList*/
ArrayList< String> mixList = new ArrayList< String>();
mixList.add("RV01");
/*设置AudioLayers*/
ArrayList< AudioLayer> audioLayers = new ArrayList< AudioLayer>();
AudioLayer audioLayer = new AudioLayer();
audioLayer.setVolumeRate(1f); // 设置音频音量倍数
audioLayer.setValidChannel("leftChannel"); // 设置音频输入声道
audioLayers.add(audioLayer);
AddCasterLayoutRequest addCasterLayoutRequest = new AddCasterLayoutRequest();
addCasterLayoutRequest.setCasterId("LIVEPRODUCER_POST-cn-v0h1557****"); // 设置导播台ID
addCasterLayoutRequest.setBlendLists(blendList); // 设置BlendList
addCasterLayoutRequest.setMixLists(mixList); // 设置MixList
addCasterLayoutRequest.setVideoLayers(videoLayers); // 设置VideoLayers
addCasterLayoutRequest.setAudioLayers(audioLayers); // 设置AudioLayers
AddCasterLayoutResponse addCasterLayoutResponse = null;
try {
addCasterLayoutResponse = LiveCli-ent.getClient().getAcsResponse(addCasterLayoutRequest);
} catch (Exception e) {
e.printStackTrace();
}
return addCasterLayoutResponse;
}
导播台布局定义了单个或多个画面的引用关系和排列规则,您可依据不同的使用场景创建合适的布局。
画面引用及排列规则按如下参数说明设置:
BlendList:指定引用资源的位置ID(LocationId),列表中元素的顺序代表了画面自下而上叠加顺序。
MixList:指定引用资源的位置ID(LocationId),列表中元素的顺序代表了音频混合顺序。
VideoLayer:指定画面的布局配置,包括原点坐标、归一化宽高值、坐标系位置等信息,元素顺序与BlendList顺序保持一致。
AudioLayer:指定音频音量、声道等配置信息,元素顺序与MixList顺序保持一致。
布局参数取值说明请参见添加导播台布局。
名称 | 示例值 | 描述 |
---|---|---|
Action | AddCasterLayout | 操作接口名称 |
CasterId | LIVEPRODUCER_POST-cn-v0h1557**** 导 | 播台ID |
BlendList.1 | RV01 | 视频源位置locationId |
MixList.1 | RV01 | 视频源位置locationId |
VideoLayer.1.HeightNormalized | 1.0 | 视频元素高度归一化值,设置高度后宽度会按照等比例缩放 |
VideoLayer.1.PositionNormalized.1 | 1.0 | 视频元素归一化水平坐标X值 |
VideoLayer.1.PositionNormalized.2 | 1.0 | 视频元素归一化垂直坐标Y值 |
VideoLayer.1.PositionRefer | topLeft | 视频元素参考坐标系,以播放窗口左上角为原点 |
AudioLayer.1.ValidChannel | leftChannel | 使用左声道作为音量输入 |
AudioLayer.1.VolumeRate | 1.0 | 音频音量大小倍数,1.0为原始音量 |
说明 A.n即A列表的第n个参数,A.n.B即A列表中第n个结构体的B参数。
public AddCasterLayoutResponse addCasterLayoutSample() {
/*设置BlendList*/
ArrayList< String> blendList = new ArrayList< String>();
blendList.add("RV01");
/*设置VideoLayers*/
ArrayList< VideoLayer> videoLayers = new ArrayList< VideoLayer>();
VideoLayer videoLayer = new VideoLayer();
ArrayList< Float> positionNormalized = new ArrayList< Float>();
positionNormalized.add(0f);
positionNormalized.add(0f);
videoLayer.setHeightNormalized(1f); // 设置视频归一化高度比例
videoLayer.setPositionNormalizeds(positionNormalized); // 设置视频归一化坐标
videoLayer.setPositionRefer("topLeft"); // 设置视频坐标原点参考系
videoLayers.add(videoLayer);
/*设置MixList*/
ArrayList< String> mixList = new ArrayList< String>();
mixList.add("RV01");
/*设置AudioLayers*/
ArrayList< AudioLayer> audioLayers = new ArrayList< AudioLayer>();
AudioLayer audioLayer = new AudioLayer();
audioLayer.setVolumeRate(1f); // 设置音频音量倍数
audioLayer.setValidChannel("leftChannel"); // 设置音频输入声道
audioLayers.add(audioLayer);
AddCasterLayoutRequest addCasterLayoutRequest = new AddCasterLayoutRequest();
addCasterLayoutRequest.setCasterId("LIVEPRODUCER_POST-cn-v0h1557****"); // 设置导播台ID
addCasterLayoutRequest.setBlendLists(blendList); // 设置BlendList
addCasterLayoutRequest.setMixLists(mixList); // 设置MixList
addCasterLayoutRequest.setVideoLayers(videoLayers); // 设置VideoLayers
addCasterLayoutRequest.setAudioLayers(audioLayers); // 设置AudioLayers
AddCasterLayoutResponse addCasterLayoutResponse = null;
try {
addCasterLayoutResponse = LiveCli-ent.getClient().getAcsResponse(addCasterLayoutRequest);
} catch (Exception e) {
e.printStackTrace();
}
return addCasterLayoutResponse;
}
新增导播台布局接口、修改导播台布局接口提供了画面高度、宽度归一化参数,您可通过调整该参数实现画面的缩放。
接口及参数设置方式参见如下说明:
设置接口:
AddCasterLayout(新增导播台布局)。
ModifyCasterLayout(修改导播台布局)。
设置参数:
HeightNormalized:设置该画面的高度归一化比例值,其中画面的宽度会按照该高度来进行等比缩放。
默认值:0,表示按照元素的原始尺寸进行显示。
取值范围:0~1。
WidthNormalized:设置该layer元素的宽度归一化比例值,其中元素的高度会按照该宽度来进行等比缩放。
默认值 :0,表示按照元素的原始尺寸进行显示。
取值范围:0~1。
说明 宽度与高度比例值同时设置后,设置的比例生效。
低延时直播是视频直播的重要增值功能,提供客户端易接入、 节点间毫秒级别延迟、高并发、高清流畅的视频直播服务。通过阅读本文,您可以快速了解视频直播的基本信息及使用方法。
低延时直播RTS(Real-time Streaming)在摩杜云视频直播(ApsaraVideo Live)的基础上, 进行全链路延时监控、CDN传输协议改造、UDP等底层技术优化,通过集成直播播放端SDK, 支持千万级并发场景下的节点间毫秒级延时直播能力,弥补了传统直播3~6秒延时的问题,保障低延时、低卡顿、秒开流畅的极致直播观看体验。
低延时直播仅需在现有的直播业务上,新增一个RTS播流域名,实现多种协议拉流。架构如下:
说明
直播推流端继续沿用RTMP方式推流。推流端网络质量、流GOP大小、观众播放器缓存等都会影响全链路延迟效果。
标准直播拉流(RTMP、FLV、HLS)使用原有rtmp://和http://格式。
低延时直播拉流(UDP)使用artc://格式。
教育直播
大班课可以支持超大数量规模的同学同时在线低延时与老师互动。
电商直播
实时与买家互动答疑,交流商品信息。
体育直播
精彩竞技、电竞等赛事,让观众实时了解现场情况。
互动娱乐
及时反馈增强互动,极大优化了观众送礼时的嘉宾反馈互动体验。
不同于标准直播价格,低延时直播按新价格计费。计费规则,请参见摩杜云产品定价页。
某路拉流使用低延迟协议,按低延迟直播收费项计费,不会再按标准直播计费项计费,不存在叠加计费。
计费规则与目前所选标准直播一致。例如都是按流量方式或都是按带宽方式。
计费规则变更与标准直播操作一致,同步生效。
注意
企业实名认证用户可享10TB,个人实名认证用户可享1TB。
每UID限体验1次流量包,需流量计费方式才能抵扣。
1.开通低延时直播RTS服务。
已支持自助开通RTS功能,需要在
视频直播控制台
添加好相关域名后,在域名管理页面播流域名的域名配置中通过低延迟直播开关打开、关闭此功能。
注意
RTS配置全网下发需要数分钟时间,请等待后测试。
RTS播流、普通播流域名间绑定主子关联具体操作,请参见
关联主子播流域名
、
关联推流和播流域名
。
RTS已支持和普通直播协议(RTMP、FLV、HLS)共用一个播流域名,鉴于RTS使用UDP协议,普通直播使用TCP协议,两者技术有所区别,强烈建议单独开通一个播流域名使用RTS。
2.推流。具体操作,请参见
推流、拉流与播流。
推流延续RTMP方式,但视频源有些特殊要求:不支持B帧(会出现画面跳跃),不支持H.265编码,GOP不大于3秒(会增加延迟)。
如您无法控制源码流参数可以使用RTS转码服务来调整参数,转码将带来几百毫秒的延时增加,详情请参见
RTS转码。
3.播流,具体操作,请参见
推流、拉流与播流。
播放器要求:低延时直播使用UDP协议,需要特殊播放器。移动端播放器需要版本不低于5.1.5,H5 RTS
SDK版本不低于1.1.0,Moduplayer
SDK版本不低于2.9.1。
RTS播流地址:
播流地址的拼接方法与普通直播一致,需要使用新的协议头artc://来区分。例如:artc://播放域名/AppName/StreamName?鉴权串。
H5 SDK音频不支持AAC,所以需使用RTS转码功能转成Opus格式,移动端不受此影响。因此H5
SDK需要使用转码播流地址。例如:artc://播放域名/AppName/StreamName{_转码模板id}?鉴权串。
更多信息,请参见
推流地址和播放地址。
4.直播录制。
低延时直播的录制,方法同普通直播域名的录制配置方式,配置后会自动录制保存到MOS或者VOD。具体操作,请参见
录制存储至VOD
和
录制存储至MOS。
通过阅读本文,您可以快速体验低延时直播及了解其配置方法。
前提条件:
开通直播服务,开通推、拉流域名及低延时功能。
下载并安装OBS推流工具。关于OBS推流工具配置及使用,详情请参见
OBS推流工具
配置推流地址:
您需要将鉴权后的推流地址分两部分输入URL与流名称中。
URL:填写包含AppName及其前的地址。
流名称:填写包含StreamName及其后的地址。
以推流地址rtmp://push.moduyunlive.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0****为例,URL为rtmp://push.moduyunlive.com/app/,流名称为stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0****。
说明
以上推流地址示例由推流域名、AppName、StreamName和鉴权串组成,您需要根据实际情况,替换成您自己的AppName、StreamName和相应的鉴权串。
低延时特殊设置建议:
关键帧间隔不超过3秒,Profile设置baseline,动态调整比特率降低延时等。
1.下载并安装RTS低延迟直播demo,详情请参见Demo体验。
2.打开RtsDemo。扫描二维码或者手动输入URL,点击开始体验观看RTS直播流。
说明 需要使用开通了RTS低延时服务的播流域名地址,使用ARTC协议头。
1.打开摩杜云视频云H5 Moduplayer DEMO,详情请参见在线配置。
2.选择基本配置页签。
3.视频类型选择直播,播放地址输入开通RTS服务的ARTC地址。
4.单击播放预览页签观看RTS直播流。
说明 由于浏览器策略问题,HTTPS协议无法正常加载HTTP资源, 所以HTTPS协议链接的拉流地址必须使用HTTPS URL的Demo打开。(同理,如果使用HTTP DEMO,拉流地址也必须使用HTTP URL的Demo打开)。
通过阅读本文,您可以了解Android、iOS、Web端RTS SDK的说明及下载方式。
RTS SDK支持Maven和Pod依赖 ,集成方法请参见 移动端集成文档。
移动端RTS SDK支持配合多种播放器使用,推荐使用对应版本的摩杜云播放器。更多信息,请参见产品说明。
低延时直播单独提供了RTS Web播放器SDK,更多信息,请参见 RTS
Web播放器SDK下载。
对于移动端,当前包大小说明如下(基于V1.4.1版本):
平台 | 包大小 | 安装包增量 |
---|---|---|
iOS | 全架构大小:35.4 MB(包含bitcode) | 670 KB(arm64) |
Android |
jar:2 KB
arm64架构大小:2.4 MB armv7架构大小:2 MB |
1 MB(arm64)
0.9 MB(armv7) |
日期 | 版本 | 发布说明 | 下载地址 | 摩杜云播放器版本要求 |
---|---|---|---|---|
2021-04-23 | V1.6.1 |
针对特定视频优化卡顿率效果
修复部分bug |
iOS版本
Android版本 |
v5.3.0及以上版本
如果配合摩杜云播放器版本处于V5.3.0~V5.3.3版本间,要求: Android的ModuvcArtc使用V5.3.0p iOS的artcSource使用V5.3.0p 说明 RTS SDK如何配合摩杜云播放器使用,请参见摩杜云播放器SDK使用说明。 |
2021-03-01 | V1.6.0 |
优化弱网情况下卡顿
支持artc推流 |
iOS版本
Android版本 |
V5.2.3及以上版本 |
2021-01-06 | V1.5.0 |
进一步降低延迟
支持在播流过程中改变推流的分辨率 优化抗卡顿 |
iOS版本
Android版本 |
V5.2.3及以上版本 |
2020-11-20 | V1.4.1 |
裁剪包大小
支持Android x86架构 完善回调事件 |
iOS版本
Android版本 |
V5.2.2及以上版本
如果配合播放器的V5.2.2版本使用,要求: Android的ModuvcArtc使用V5.2.2p iOS的artcSource使用V5.2.2p |
2020-11-05 | V1.4.0 |
特定场景的卡顿优化
支持纯音频、纯视频拉流 支持外部调整缓存Buffer |
iOS完整版本
Android完整版本 iOS裁剪版本 Android裁剪版本 说明 裁剪版本是需要依赖外部的openssl和curl库,这样可以有效减少包的体积,但是不能配合摩杜云播放器SDK使用。更多版本信息请通过联系摩杜云客服 |
V5.2.1及以上版本
如果配合播放器的V5.2.1版本使用,要求: Android的ModuvcArtc使用V5.2.1p iOS的artcSource使用V5.2.1p |
2020-09-29 | V1.3.0 |
独立发版
实时状态回调 错误码整理 修复稳定性问题 |
iOS完整版本
Android完整版本 iOS裁剪版本 Android裁剪版本 |
V5.2.1及以上版本 |
客户端 | 发布历史 | 下载地址 |
---|---|---|
iOS | iOS播放器SDK发布历史 | SDK下载 |
Android | Android播放器SDK发布历史 | SDK下载 |
日期 | 版本 | 修改内容 | 下载地址 | npm |
---|---|---|---|---|
2020-12-22 | V1.2.4 |
增加播放失败错误事件
支持播放时间超时可配置 |
V1.2.4 | npm |
2020-11-17 | V1.2.3 | 支持参数设置拉纯音频流或拉纯视频流 | V1.2.3 | - |
2020-10-10 | V1.2.2 | 修复npm引入失败的问题 | V1.2.2 | - |
2020-09-09 | V1.2.1 |
增加ios端钉钉浏览器支持
修复错误码抛出错误的问题 增加onPlayEvent回调 |
V1.2.1 | - |
2020-08-05 | V1.1.0 | RTS Web播放器初版,具备RTS低延时直播协议拉流的能力 | V1.1.0 | - |
RTS Web SDK是通过HTML网页加载的JavaScript库,不包含普通直播Web播放器功能, 且不依赖用户安装App实现直播播放。该SDK只用于RTS低延时直播协议拉流,可以解决在手机、 微信和PC浏览器上播放音视频流的问题。本文适合有一定JavaScript语言基础的开发人员 阅读。SDK视频播放能力本身不是网页代码实现的,而是靠浏览器支持,因此不是所有的浏览器都能有符合预期的表现,其兼容性参考下文。
平台 | 浏览器 | 支持的最低版本 |
---|---|---|
Windows | Chrome | 63 |
Firefox | 62 | |
Opera | 15 | |
Mac | Chrome | 63 |
Safari | 11 | |
Firefox | 62 | |
Opera | 15 | |
Android | Chrome | 63 |
微信浏览器 | 7.0.9(微信版本) | |
iOS | Safari | 11 |
微信浏览器 | 7.0.9(微信版本) | |
钉钉浏览器 | 11.2.5(钉钉版本) |
说明 由于浏览器策略问题,HTTPS协议无法正常加载HTTP资源, 所以HTTPS协议链接的拉流地址必须使用HTTPS URL的Demo打开。(同理,如果使用HTTP DEMO,拉流地址也必须使用HTTP URL的Demo打开)。
初始化实例
var aliRts = new ModuRTS()
isSupport检测浏览器是否可用
//调用此接口时必须传递参数,否则调用时会出现报错
/**
* isSupport检测是否可用
* @param {Object} supportInfo 检测信息
* @param {Boolean} supportInfo.isReceiveVideo 是否拉视频流
* @return {Promise}
*/
aliRts.isSupport(supportInfo).then(re=> {
//可用
}).catch(err=> {
//不可用
})
RTS开始拉流
/**
* rts开始拉流接口
* @param {String} pullStreamUrl 拉流地址
* @param {HTMLMediaElement} mediaElement 播放视频的video标签
* @return {Promise}
*/
aliRts.startLiveStream(pullStreamUrl, mediaElement);
RTS停止播放
/**
* 停止rts播放接口
*/
aliRts.stopLiveStream();
静音接口
/**
* 拉流静音接口
* @param {Boolean} muted 是否开启静音
*/
aliRts.muteLiveStream(muted);
静音接口
/*
* 在onError中获取到错误码10201时,此时网页的音频是静音的,
* 需要用户在网页上手动触发事件(必须有用户交互,不能直接通过代码控制)
* 调用aliRts.muteLiveStream(false) 来取消静音
*/
aliRts.on("onError", (err)=> {
})
const PLAY_EVENT = {
CANPLAY: "canplay",
WAITING: "waiting",
PLAYING: "playing"
}
aliRts.on('onPlayEvent', (play)=>{
if(play.event === PLAY_EVENT.CANPLAY){
//拉流可以播放
}else if(play.event === PLAY_EVENT.WAITING){
//拉流卡顿等待缓冲中 (仅Chrome)
}else if(play.event === PLAY_EVENT.PLAYING){
//拉流卡顿结束恢复播放 (仅Chrome)
}
})
错误码(errorCode) | 错误信息(message) | 描述 |
---|---|---|
10001 | http request error | 信令请求失败 |
10002 | play failed | 播放失败 |
10010 | not support webrtc | 不支持webrtc |
10011 | browser not support | 不支持此浏览器 |
10012 | browser version too low | 浏览器版本过低 |
10013 | not support h264 | 不支持H264 |
10014 | create offer error | create offer失败 |
10201 | auto play failed | 自动播放失败 |
通过阅读本文,您可以了解移动端RTS SDK与播放器引擎的集成方法。
平台 | 输出形态 | 备注 |
---|---|---|
Android | Maven | 只能配合摩杜云播放器SDK使用。 |
so库和头文件 | 需要客户自己开发artc Demuxer,如果使用了FFmpeg,可以基于rtsdec.c开发。 | |
jar包 | 1.4.1版本之后开始提供,选择so库方式集成需要放入jar包的依赖,使用Maven方式集成不需要集成jar包。 | |
- | rtsdec.c | FFmpeg的AVInputFormat插件。 |
iOS | pod | 无论是否使用摩杜云播放器SDK,都可以使用该形态。如果使用自有播放器,需要客户自己开发artc Demuxer,如果自有播放器使用了FFmpeg,可以基于rtsdec.c开发。 |
动态framework |
使用RTS,需要集成播放器引擎。播放器引擎分为摩杜云播放器SDK、依赖FFmpeg的其他播放器引擎、不依赖FFmpeg的播放器引擎三类。各引擎对应的集成方法不同,大致步骤如下:
摩杜云播放器SDK
摩杜云播放器SDK集成RTS SDK作为插件。
客户工程集成摩杜云播放器SDK和RTS SDK。
调用摩杜云播放器SDK的接口使用RTS服务。
依赖FFmpeg的其他播放器引擎
FFmpeg集成RTS SDK作为插件。
客户工程集成播放器引擎。
调用播放器引擎的接口使用RTS服务。
不依赖FFmpeg的播放器引擎
集成RTS SDK作为插件。
客户工程集成播放器引擎。
调用播放器引擎的接口使用RTS服务。
ijkplayer-RTS是基于开源播放器ijkplayer并在其基础上进行拓 展且支持RTS低延迟直播的示例。您可以借鉴该示例项目快速拓展自研的播放器引擎。如果您需要下载示例,请参见 ijkplayer-RTS下载
如果RTS SDK与摩杜云播放器SDK集成,请参见
摩杜云播放器SDK使用说明。
如果RTS SDK与依赖FFmpeg的其他播放器(以ijk为例)集成,请参见
依赖FFmpeg的其他播放器使用说明。
如果RTS SDK与不依赖FFmpeg的播放器集成,此情况适用于拥有完全自研的播放器引擎的客户。需要将动态库和头文件放入到工程中,参考移动端RTS
SDK中的rtsdec.c文件完成demuxer的开发,移动端RTS SDK请参见
SDK下载。
通过阅读本文,您可以了解移动端RTS SDK与播放器引擎的集成方法。
移动端RTS SDK与摩杜云播放器SDK集成比较简单, 因为集成工作在播放器SDK中已内置,只需完成依赖,就可以像RTMP协议一样使用ARTC协议。
1.摩杜云播放器SDK集成RTS SDK作为插件。
使用Maven或者本地依赖的方式将摩杜云播放器SDK版本中ModuyunARTC.aar依赖到App工程中,同时添加RtsSDK.aar到App工程中。在依赖了ModuyunARTC.aar后,播放器SDK会自动将RTS
SDK加载为插件。
Maven依赖
名称 | 版本号 | 相关代码 |
---|---|---|
ModuyunARTC | 5.3.0p | implementation 'com.moduyun.sdk.android:ModuvcArtc:5.3.0p' |
RtsSDK | 1.6.1 | implementation 'com.moduyun.rts.android:RtsSDK:1.6.1' |
本地依赖
使用本地依赖,请下载对应的依赖文件,详情请参见
SDK下载。
2.客户工程集成摩杜云播放器SDK和RTS SDK。
使用Maven或者本地依赖的方式集成摩杜云播放器SDK和RTS SDK。
Maven依赖
名称 | 版本号 | 相关代码 |
---|---|---|
ModuyunPlayer | 5.3.2 | implementation 'com.moduyun.sdk.android:ModuyunPlayer:5.3.2-full' |
本地依赖
使用本地依赖,请通过官网中版本的.zip包中手动获取依赖文件,详情请参见Android播放器SDK,播放器SDK集成请参见集成文档。
i.新建工程,如下图所示。 此处以Maven依赖方式举例说明
ii.在根目录的build.gradle中添加如下代码。
//MPChart maven仓库地址,如果不需要曲线图,可以删除
maven { url 'https://jitpack.io' }
//摩杜云相关SDK(摩杜云播放器、RTSSDK) maven仓库地址,如果使用IJKPlayer可以删除
maven { url 'http://maven.moduyun.com/nexus/content/repositories/releases' }
ext {
compileSdkVersion = 25
buildToolsVersion = "25.0.3"
minSdkVersion = 21
targetSdkVersion = 25
versionCode = 800800
versionName = "0.8.8"
appVersionCode = 1
appVersionName = "1.0"
externalRecyclerView = 'com.android.support:recyclerview-v7:25.4.0'
externalMPAndroidChart = 'com.github.PhilJay:MPAndroidChart:v3.1.0'
externalSupportAppCompat = 'com.android.support:appcompat-v7:25.4.0'
//ARTC直播播放器
externalModuyunARTCNet = 'com.moduyun.rts.android:RtsSDK:1.6.0'
externalModuyunARTC = 'com.moduyun.sdk.android:ModuyunArtc:5.3.2'
externalModuyunPlayer = 'com.moduyun.sdk.android:ModuyunPlayer:5.3.2-full'
//required, enough for most devices.
//implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
//implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
}
3.调用摩杜云播放器SDK的接口使用RTS服务。
i.创建播放器。
通过ModuPlayerFactory类可创建两种播放器:ModuPlayer和ModuListPlayer。单个播放功能使用ModuPlayer,创建方法如下所示:
ModuPlayer moduyunVodPlayer;
.....
moduyunVodPlayer = ModuPlayerFactory.createModuPlayer(getApplicationContext());
ii.设置播放器监听事件。
播放器提供了多种监听事件,如onPrepared,onCompletion等事件。设置方法如下所示:
moduyunVodPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
@Override
public void onCompletion() {
//播放完成事件
}
});
moduyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
@Override
public void onError(ErrorInfo errorInfo) {
//出错事件
}
});
moduyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
//准备成功事件
}
});
moduyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(int width, int height) {
//视频分辨率变化回调
}
});
moduyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
@Override
public void onRenderingStart() {
//首帧渲染显示事件
}
});
moduyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(int type, long extra) {
//其他信息的事件,type包括循环播放开始、缓冲位置、当前播放位置、自动播放开始等
}
});
moduyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
@Override
public void onLoadingBegin() {
//缓冲开始
}
@Override
public void onLoadingProgress(int percent, float kbps) {
//缓冲进度
}
@Override
public void onLoadingEnd() {
//缓冲结束
}
});
moduyunVodPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete() {
//拖动结束
}
});
moduyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
@Override
public void onSubtitleShow(long id, String data) {
//显示字幕
}
@Override
public void onSubtitleHide(long id) {
//隐藏字幕
}
});
moduyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) {
//切换音视频流或者清晰度成功
}
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
//切换音视频流或者清晰度失败
}
});
moduyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
@Override
public void onStateChanged(int newState) {
//播放器状态改变事件
}
});
moduyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
@Override
public void onSnapShot(Bitmap bm, int with, int height) {
//截图事件
}
});
iii.创建DataSource,准备播放。
播放器支持4种播放源:VidSts、VidAuth、VidMps、UrlSource。其中UrlSource是直接URL播放,需要将URL设置为artc://协议,才可以使用RTS服务。
UrlSource urlSource = new UrlSource();
urlSource.setUri("artc://xxxx");
moduyunVodPlayer.setDataSource(urlSource);
iv.设置显示的view。
如果源有画面,需要设置显示的view(支持SurfaceView和TextureView)到播放器中,用来显示画面。本文以SurfaceView举例说明,如下所示:
surfaceView = (SurfaceView) findViewById(R.id.playview);
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
moduyunVodPlayer.setDisplay(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
moduyunVodPlayer.redraw();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
moduyunVodPlayer.setDisplay(null);
}
});
v.播放控制。
用户自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。基本控制功能有播放、暂停、停止、拖动(seek),
其中seek功能仅对点播有效;直播使用暂停功能时会使画面停留在当前画面,使用恢复后会开始播放当前画面。使用示例如下所示:
//准备,在准备完成的回调接口中,调用start()可以开始播放
moduyunVodPlayer.prepare();
//开始播放
moduyunVodPlayer.start();
//暂停播放
moduyunVodPlayer.pause();
//停止播放
moduyunVodPlayer.stop();
//跳转到(不精准)
moduyunVodPlayer.seekTo(long position);
//重置
moduyunVodPlayer.reset();
//释放(释放后播放器将不可再被使用)
moduyunVodPlayer.release();
多播放器SDK功能,请参见接口说明和功能使用。
vi.参数配置。
参数配置如下所示,可以更好地发挥低延迟优势。
//获取配置
PlayerConfig config = mModuyunVodPlayer.getConfig();
//设置最大延迟为1秒,延迟控制由ARTC控制
config.mMaxDelayTime = 1000;
//设置播放器启播缓存为10毫秒,数据控制由ARTC控制。
config.mHighBufferDuration = 10;
config.mStartBufferDuration = 10;
....//其他设置
//给播放器加载配置
mModuyunVodPlayer.setConfig(config);
vii.加载库。
在合适的Activity内加入System.loadLibrary("RtsSDK");。
static {
System.loadLibrary("RtsSDK");
}
1.摩杜云播放器SDK集成RTS SDK作为插件。
移动端App依赖摩杜云播放器SDK的同时依赖RTS SDK和ModuPlayerSDK_iOS_ARTC,播放器SDK自动将RTS SDK加载为插件。
pod依赖
名称 | 版本号 | 相关代码 |
---|---|---|
ModuPlayerSDK_iOS_ARTC | 5.3.0p | pod 'ModuPlayerSDK_iOS_ARTC','5.3.0p' |
RtsSDK | 1.6.1 | pod 'RtsSDK','1.6.1' |
本地依赖
使用本地依赖,需要在SDK下载页面中获取framework,详情请参见 SDK下载。
客户工程集成摩杜云播放器SDK和RTS SDK。
pod依赖
名称 | 版本号 | 相关代码 |
---|---|---|
摩杜云播放器SDK | 5.3.2 | pod 'ModuPlayerSDK_iOS','5.3.2' |
使用pod方式打开终端,进入工程根目录运行pod init, 在生成的podfile文件中输入如下文本(如需指定版本,请自行补充版本号),运行pod install。
pod 'RtsSDK'
pod 'ModuPlayerSDK_iOS'
pod 'ModuPlayerSDK_iOS_ARTC'
```
本地依赖
使用本地依赖,请通过官网中版本的.zip包中手动获取依赖文件,详情请参见iOS播放器SDK,播放器SDK集成请参见集成文档。
使用本地依赖方式,需将如下库文件拖到项目中,并在target的Gennel栏将各framework设置为Embed & Sign。
3.调用摩杜云播放器SDK接口。
i.初始化Moduplayer。
- (ModuPlayer *)aliPlayer{
if (!_aliPlayer) {
_aliPlayer = [[ModuPlayer alloc] init];
_aliPlayer.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;
_aliPlayer.rate = 1;
//如需实现AVPDelegate代理,添加此行
_aliPlayer.delegate = self;
//设置播放的视图,将您的播放视图赋值给aliplayer
_aliPlayer.playerView = self.basePlayerView.playerView;
_aliPlayer.autoPlay = YES;
}
return _aliPlayer;
}
ii.设置播放URL。
AVPUrlSource *source = [[AVPUrlSource alloc] urlWithString:_url];
[self.aliPlayer setUrlSource:source];
iii.设置播放参数。 使用摩杜云播放器播放ARTC直播流,推荐配置如下所示:
说明 播放器参数配置需要在调用prepare之前才能生效。
AVPConfig *config = self.aliPlayer.getConfig;
//直播最大延迟
[config setMaxDelayTime:1000];
//卡顿恢复时长
[config setHighBufferDuration:10];
//起播最大延迟
[config setStartBufferDuration:10];
//重连次数
[config setNetworkRetryCount:2];
//重连时长
[config setNetworkTimeout:15000];
[_aliPlayer setConfig:config];
//默认为硬解,如播放器在准备过程中发现硬解失败,会自动切换到软解
_aliPlayer.enableHardwareDecoder = YES;
iv.打开日志
[ModuPlayer setEnableLog:YES];
[ModuPlayer setLogCallbackInfo:LOG_LEVEL_DEBUG callbackBlock:nil];
v.播放控制
[self.aliPlayer prepare];
[self.aliPlayer stop];
[self.aliPlayer destroy];
[self.aliPlayer reload];
通过阅读本文,您可以了解移动端RTS SDK与依赖FFmpeg的其他播放器(以ijk为例)集成的方法。
您已阅读并完成ijk的编译,详情请参见 ijkPlayer Github
移动端RTS SDK与其他播放器引擎集成,需要将RTS
SDK集成为插件拓展支持ARTC协议,为了降低开发难度,对于依赖FFmpeg的其他播放器引擎,可以参考移动端RTS
SDK中的rtsdec.c文件,该文件将RTS SDK封装成了FFmpeg demuxer插件。移动端RTS SDK请参见
SDK下载。
目前RTS只提供armv7a和arm64的动态库。
本文的操作基于ijk tag:k0.8.8。
1.ijkplayer集成RTS SDK作为插件。
ijkplayer集成RTS SDK作为插件有两种方法,优、缺点如下所示:
集成方法 | 优点 | 缺点 |
---|---|---|
拓展ijk中FFmpeg的demuxer(简称:拓展FFmpeg) | 使用更加简单,不需要根据ARTC的URL做逻辑区分。 | 需要重新编译FFmpeg库。 |
ijkplayer中添AVInputFormat(简称:拓展ijk) | 不需要编译FFmpeg | ff_player.c中需要添加部分逻辑代码。 |
拓展FFmpeg的方法
a.修改ijkplayer/init-android.sh中的pull_fork,只保留armv7a和arm64, 并执行该脚本。
b.修改ijkplayer/Android/contrib/compile-ffmpeg.sh中FF_ACT_ARCHS_64,只保留armv7a和arm64
c.将RTS
SDK中的rtsdec.c文件复制到ijkplayer/android/contrib/ffmpeg-arm64/libavformat和ijkplayer/android/contrib/ffmpeg-armv7a/libavformat目录下。
d.修改Makefile文件并编译rtsdec.c文件。
修改ijkplayer/android/contrib/ffmpeg-arm64/libavformat/Makefile和ijkplayer/android/contrib/ffmpeg-armv7a/libavformat/Makefile。
e.修改allformats.c,默认支持ARTC协议。
修改ijkplayer/android/contrib/ffmpeg-arm64/libavformat/allformats.c和ijkplayer/android/contrib/ffmpeg-armv7a/libavformat/allformats.c。
extern AVInputFormat ff_rtc_demuxer;
av_register_input_format(&ff_rtc_demuxer);
f.修改FFmpeg编译脚本支持PCM解码(RTS SDK输出的是PCM数据)。
/config/module-lite.sh脚本中加入如下内容:
# moduyun rts
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_s16be_planar"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_s16le"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_s16le_planar"
g.编译。
添加ANDROID_NDK环境变量(r12b)。在ijkplayer/android/contrib目录下执行./compile-ffmpeg.sh all。
h.检查ijkplayer/android/contrib/build目录下是否有对应的FFmpeg编译输出文件。
i.修改ijkplayer/Android/compile-ijk.sh,ACT_ABI_64中只保留armv7a和arm64。
j.放入RTS的动态库。
将RTS对应架构的动态库放入到ijkplayer/android/contrib/build/ffmpeg-arm64/output和ijkplayer/android/contrib/build/ffmpeg-armv7a/output中,将头文件rts_api.h和rts_messages.h拷贝到ijkplayer/android/contrib/build/ffmpeg-arm64/output/include和ijkplayer/android/contrib/build/ffmpeg-armv7a/output/include中。
k.引入RTS的动态库。
修改ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ffmpeg/Android.mk和ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/jni/ffmpeg/Android.mk文件。
include $(CLEAR_VARS)
LOCAL_MODULE := rtssdk
LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/libRtsSDK.so
include $(PREBUILT_SHARED_LIBRARY)
l.ijkplayer依赖RTS动态库。
修改ijkplayer/ijkmedia/ijkplayer/Android.mk文件。
m.ff_fflay.c中加入RTS逻辑。
设置给ARTC的AVInputFormat函数指针。修改ijkplayer/ijkmedia/ijkplayer/ff_ffplay.c文件。
extern AVInputFormat ff_rtc_demuxer;
extern int artc_reload(AVFormatContext *ctx);
extern void av_set_rts_demuxer_funcs(const struct rts_glue_funcs *funcs);
extern void artc_set_rts_param(char* key, char* value);
extern long long artc_get_state(AVFormatContext *ctx, int key);
int version = 2;
const struct rts_glue_funcs* rts_funcs = get_rts_funcs(version);
// set to ffmpeg plugin
av_set_rts_demuxer_funcs(rts_funcs);
artc_set_rts_param((char*)"AutoReconnect", (char*)"false");
n.编译。
在ijkplayer/android目录下执行./compile-ijk.sh all。
拓展ijk的方法
a.修改FFmpeg编译脚本支持PCM解码(RTS SDK输出的是PCM数据),然后编译FFmpeg,不需要将RTS SDK依赖进去。
/config/module-lite.sh脚本中加入以下内容:
# moduyun rts
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_s16be_planar"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_s16le"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_s16le_planar"
b.ijkplayer依赖RTS。
将RTS SDK库文件放入工程,修改Android.mk 等操作。详情请参见拓展FFmpeg的方法相应的步骤。
c.ff_fflay.c中加入RTS逻辑,区分ARTC协议头,使用指定的AVInputFormat。
if(strncmp(is->filename, "artc://", 7) == 0) {
extern AVInputFormat ff_rtc_demuxer;
extern int artc_reload(AVFormatContext *ctx);
extern void av_set_rts_demuxer_funcs(const struct rts_glue_funcs *funcs);
extern void artc_set_rts_param(char* key, char* value);
extern long long artc_get_state(AVFormatContext *ctx, int key);
int version = 2;
const struct rts_glue_funcs* rts_funcs = get_rts_funcs(version);
// set to ffmpeg plugin
av_set_rts_demuxer_funcs(rts_funcs);
artc_set_rts_param((char*)"AutoReconnect", (char*)"false");
is->iformat = &ff_rtc_demuxer;
}
else {
if(ffp->iformat_name)
is->iformat = av_find_input_format(ffp->iformat_name);
}
d.将rtsdec.c放入到ijkplayer/ijkmedia/ijkplayer目录下,并且编写该目录下android.mk,添加该文件的编译。
LOCAL_SRC_FILES += rtsdec.c
2.客户工程集成ijkplayer。
i.将RtsNetSDK.jar 包导入到工程中。
ii.在使用RTS播放的Activity内加入System.loadLibrary("RtsSDK");
static {
System.loadLibrary("RtsSDK");
}
导入模块:ijkplayer-arm64、ijkplayer-armv7a、ijkplayer-java。
3.调用ijkplayer接口
i.创建ijkplayer。
mIjkPlayer = new IjkMediaPlayer();
ii.设置回调。
mIjkPlayer.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(IMediaPlayer iMediaPlayer) {
}
});
mIjkPlayer.setOnInfoListener(new IMediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(IMediaPlayer iMediaPlayer, int arg1, int arg2) {
});
mIjkPlayer.setOnVideoSizeChangedListener(new IMediaPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(IMediaPlayer iMediaPlayer, int width, int height, int sarNum, int sarDen) {
}
});
mIjkPlayer.setOnErrorListener(new IMediaPlayer.OnErrorListener() {
@Override
public boolean onError(IMediaPlayer iMediaPlayer, int framework_err, int impl_err) {
return false;
}
});
iii.设置显示窗口
mIjkPlayer.setSurface(surface);
iv.设置播放源。
mIjkPlayer.setDataSource("artc://xxx");
v.状态控制
public void prepare() {
if(mIjkPlayer != null){
mIjkPlayer.prepareAsync();
}
}
@Override
public void start() {
if(mIjkPlayer != null){
mIjkPlayer.start();
}
}
public void pause() {
if(mIjkPlayer != null){
mIjkPlayer.pause();
}
}
public void stop() {
if(mIjkPlayer != null){
mIjkPlayer.stop();
}
}
public void release() {
if(mIjkPlayer != null){
mIjkPlayer.release();
}
}
1.ijkplayer集成RTS SDK作为插件。
ijkplayer集成RTS SDK作为插件有两种方法,优、缺点如下所示:
集成方法 | 优点 | 缺点 |
---|---|---|
拓展ijk中FFmpeg的demuxer(简称:拓展FFmpeg) | 使用更加简单,不需要根据ARTC的URL做逻辑区分。 | 需要重新编译FFmpeg库。 |
ijkplayer中添AVInputFormat(简称:拓展ijk) | 不需要编译FFmpeg | ff_player.c中需要添加部分逻辑代码。 |
拓展FFmpeg的方法
a.在ijkplayer目录下,执行init-ios.sh。
b.进入ijkplayer/ios目录,将rtsdec.c复制到ffmpeg-$arch/libavformat中,修改libavformat/Makefile和allformats.c。详情请参见拓展FFmpeg的方法相应的步骤。
c.编译。
在ijkplayer/ios目录下,执行./compile-ffmpeg.sh all。
d.查看ijkplayer/ios/build/universal目录下是否有输出的FFmpeg库。
e.将RtsSDK.framework放入到ijkplayer/ios/IJKMediaDemo/IJKMediaDemo目录下。
f.使用xcode打开ios/IJKMediaDemo/IJKMediaDemo.xcodeproj。
g.为IJKMediaPlayer.xcodeproj添加RtsSDK.framework的依赖。
h.ff_fflay.c中加入RTS逻辑。详情请参见拓展FFmpeg的方法相应的步骤。
拓展ijk的方法
a.编译FFmpeg,不需要依赖RTS SDK拓展FFmpeg。
b.ijkplayer依赖RTS。详情请参见拓展FFmpeg的方法相应的步骤。
c.将rtsdec.c 拖入到工程中
d.修改ff_ffplay.c代码。详情请参见拓展FFmpeg的方法相应的步骤。
2.客户工程集成播放器引擎和RTS SDK。
将ijkplayer输出的引擎framework和RTS SDK的framework拖入到工程。
3.调用播放器引擎的接口。
i.创建ijkplayer
_ijkPlayer = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:_url] withOptions:options];
_ijkPlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
_ijkPlayer.view.frame = self.basePlayerView.playerView.bounds;
_ijkPlayer.scalingMode = IJKMPMovieScalingModeAspectFit; //缩放模式
_ijkPlayer.shouldAutoplay = YES; //开启自动播放
ii.播放控制
- (void)prepareToPlay;
- (void)play;
- (void)pause;
- (void)stop;
本文介绍RTS信令交互流程、信令协议定义和增强的SDP。
说明 本文适合有WebRTC基础的开发人员阅读。
使用TCP协议会引起3秒~6秒以上的延时,为解决此问题,摩杜云视频直播提供了增值功能——使用UDP协议的低延时直播(RTS,Real-time
Streaming)功能。
优势
易接入、毫秒级别延迟、千万级高并发、高清流畅的直播观看体验。
RTS产品设计重视开放、标准的生态建设。
在使用摩杜云提供的专用RTS
SDK基础上,还支持自研客户端以类似WebRTC信令交互方式从直播节点推拉音视频流,借助摩杜云直播节点的全球覆盖及优秀调度算法能力,帮助客户实现自主可控方式便利地使用摩杜云大规模低延迟直播服务。
您已开通摩杜云视频直播服务。具体操作,请参见开通服务。
您已开通低延时直播RTS服务。具体操作,请参见 使用指南。
域名已配置HTTPS证书。具体操作,请参见 配置HTTPS安全加速。
1.客户端发送Offer请求
i.客户端本地创建RTCPeerConnection,设置接收音视频属性Stream Direction,并创建offer SDP。
// 开启音视频, recvonly or sendonly
{ offerToReceiveVideo: true, offerToReceiveAudio: true }
ii.客户端向直播服务发送拉流请求,通过HTTPS POST方式将JSON格式的请求信息发送至直播服务。
协议格式请参见 信令协议定义
version字段为协议版本,当前版本固定为2。
sdk_version字段为SDK版本,用户可以自定义该字段。
iii.生成协议内容后,通过信令地址POST给直播服务完成信令交互,在请求的JSON包体中表明要拉取的流地址。信令地址与媒体地址基本一致,协议头不同。
信令地址如:https://domain/app/streamname?auth=xxx。
流地址如:artc://domain/app/streamname?auth=xxx。
POST /app/streamname?auth=xxx HTTP/1.1
Host: domain
Connection: keep-alive
Content-Length: 2205
Content-Type: application/json
2.服务端Answer响应
直播服务端校验安全性后生成SDP answer, 节点信息封装在响应包体中返回给客户端。协议格式请参见
信令协议定义。
3.客户端ICE建联
i.客户端收到SDP Answer响应后,设置到RTCPeerConnection中。
peerConnection.setRemoteDescription(new RTCSessionDescription(answer.jsep));
ii.RTCPeerConnection启动ICE建连流程以及后续的DTLS流程,媒体通道建立成功后可以获取到直播服务输出的媒体流,实现WebRTC标准接入拉流播放。
4.断开连接
客户端需要断开连接以停止推流或者播放时,使用DTLS的Alert消息表达。
H5 Demo示例
// Create peer connection and local offer sdp.
peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = iceCandidateCallback;
peerConnection.ontrack = remoteStreamCallback;
peerConnection.createOffer({ offerToReceiveVideo: true, offerToReceiveAudio: true })
.then(signaling_pull).catch(errorHandler);
// CDN live post pull stream request.
function signaling_pull(offer_sdp) {
console.log('local offer sdp', offer_sdp);
peerConnection.setLocalDescription(offer_sdp).then(function() {
// Get pull stream url.
var stream_url = $("#stream_url").val();
console.log("stream url:" , stream_url);
// Add sdk and protocol versions.
var protocol_version = 2;
var sdk_version = "0.0.1";
$.ajax({url: stream_url, data: JSON.stringify({
mode: "live",
version: protocol_version,
sdk_version: sdk_version,
jsep:description,
}),
type: "post",
success:function(result){
var signal = JSON.parse(result);
peerConnection.setRemoteDescription(new RTCSessionDescription(signal.jsep)).then(function() {
console.log("get remote answer sdp: ", signal.jsep.sdp);
}).catch(errorHandler);
}});
}).catch(errorHandler);
}
协议通道:HTTPS,短连接。
协议格式:JSON。
协议描述
请求参数
参数 | 类型 | 是否必选 | 描述 | 取值范围 |
---|---|---|---|---|
mode | string | 是 | 模式:直播。 | live |
version | int | 是 | 协议版本号。 | 2 |
push_stream | string | 否 | 推流URL。 | 文本 |
pull_streams | []object | 否 | 拉流对象,支持多个拉流。 | 请参见pull_stream参数 |
sdk_version | string | 否 | SDK版本号。 | 文本 |
jsep.type | string | 是 | sdp类型:offer。 | offer |
jsep.sdp | string | 是 | sdp描述。 | 无 |
表 1.pull_stream参数
字段 | 类型 | 是否必填 | 描述 |
url | string | 是 | 拉流URL,artc://。 |
amsid | []string | 是 | 拉流音频msid,直播场景填写一个成员“rts audio”。 |
vmsid | []string | 是 | 拉流视频msid,直播场景填写一个成员“rts video”。 |
应答参数
字段 | 类型 | 是否必需 | 描述 |
code | int | 是 | 正确返回200,错误参考错误处理。 |
trace_id | string | 是 | 全局唯一请求标识ID。由CDN生成,请尽量做好保存,用于对请求进行定位和问题排查。 |
jsep.type | string | 是 | sdp类型:answer。 |
jsep.sdp | string | 是 | 直播CDN回源拉流生成SDP。 |
示例
请求示例
Request:
{
"version":2,
"sdk_version":"0.0.1",
"mode":"live",
"pull_streams":[
{
"url":"artc://your.domain.com/live/testname",
"amsid":[
"rts audio"
],
"vmsid":[
"rts video"
]
}
],
"jsep":{
"type":"offer",
"sdp":"v=0\n\ro=- 6839248142876176651 2 IN IP4 127.0.0.1\n\rs=-\n\r以下省略"
}
}
应答示例
Response:
{
"trace_id":"2_1591173296_101.227.0.169_702080732320_dec327eb6eed0e0b07b349c8a5653eca",
"code":200,
"jsep":{
"type":"answer",
"sdp":"v=0\r\no=- 1591173291 2 IN IP4 127.0.0.1\n\r 以下省略"
}
}
错误处理
信令请求合法的情况下响应200 ,具体的处理结果需要解析响应body的JSON内的code属性。code为HTTP响应码模式,具体定义如下:
Response:
{
"code": 200, // 200-成功 非200-见后续定义
"message": "success" // 非200错误码描述
}
表 2. 应答参数
参数 | 类型 | 描述 |
---|---|---|
code | int | 响应码,格式和定义请参见错误码描述。 |
message | string | 错误描述。 |
表 3. 错误码描述
错误码 | 描述 |
---|---|
200 | success,成功。 |
403 | 鉴权失败。 |
404 | 流不存在。 |
611 | 需要客户端强制降级到TCP播放。 |
302 | 需要客户端向新的服务地址发起信令请求。 |
在信令交互中,SDP用来描述媒体信息。通用的SDP协商是基于RFC
4566展开的,摩杜RTS在其基础上扩展出了更多丰富的语义,兼容直播行业的特点,足以支持更多的音视频封装、通信协议,突破了WebRTC仅支持音频OPUS、不支持视频B帧等的窘境,从而满足如今流媒体业界日益扩大的协议族。
支持AAC音频
RTS支持传输任何能在RTMP中传输的AAC格式的音频,包括 AAC-LC、AAC-HE、AAC-HEv2。AAC格式请参见ISO IEC
14496-3。RTS支持以LATM格式进行AAC音频传输,LATM可根据传输中的音频是否自带音频编码信息来决定是带内(每个音频都发)还是带外(只发一次)音频编码信息。
具体:由Audio Mux
Element中的muxconfigPresent决定AudioSpecificConfig是带内/带外传输。因此LATM相对ADTS更灵活,其AudioSpecificConfig若保持不变,则可以通过SDP会话先传输StreamMuxConfig(AudioSpecificConfig)信息。LATM请参见Application-Bulletin_AAC-Transport-Format。
在信令交互阶段,RTS会解析推流侧音频编码信息,并在协商响应中返回对应的信息。
Offer SDP:
m=audio 9 UDP/RTP/AVPF 120 96
a=rtpmap:120 MP4A-LATM/44100/2
Case1:AAC-LC
AudioSpecificConfig = 0x1210
Answer SDP:
a=rtpmap:120 MP4A-LATM/44100/2
a=fmtp:120 cpresent=0;profile-level-id=1;object=2;config=400024203fc0
Case2:AAC-HE
AudioSpecificConfig = 2b920800
Answer SDP:
a=rtpmap:120 MP4A-LATM/44100/2
a=fmtp:120 cpresent=0;profile-level-id=1;object=2;config=4000572410003fc0;SBR-enabled=1
Case3:AAC-HEv2
AudioSpecificConfig = eb8a0800
Answer SDP:
a=rtpmap:120 MP4A-LATM/44100/2
a=fmtp:120 cpresent=0;object=2;profile-level-id=1;config=4001d71410003fc0;PS-enabled=1;SBR-enabled=1
REF:AAC / HE-AAC Parameters。
此处,我们通过在Answer SDP音频MP4A-LATM
fmtp的fmtp中添加SBR-enabled=1表示AAC-HE,添加SBR-enabled=1和PS-enabled=1表示AAC-HEv2。如上图,由于从AAC-LC到AAC-HEv2有技术递进关系,因此在fmtp的表示上,我们也递进地增加SBR、PS的标识来表示不同的AAC格式。此外,在fmtp中添加config=StreamMuxConfig,其由推流AudioSpecificConfig信息组装而来,则更具体地描述了音频编码的各种参数信息,客户端可以各取所需。
支持H.265视频
RTS会解析推流侧视频编码信息(H.264、H.265),在Answer SDP中根据推流侧实际的编码方式,返回H264或H265。
Case:H.265
Offer SDP:
a=rtpmap:102 H265/90000
Answer SDP:
a=rtpmap:122 H265/90000
a=fmtp:122
支持带B帧视频
在信令交互阶段,客户端可以在Offer SDP中增加字段来标识其是否支持解析B帧视频。
例如在视频fmtp中增加BFrame-enabled = 1标识以表示支持B帧。
若不支持B帧,RTS可以对视频源流进行转码,去掉B帧。
在带B帧的情况下,RTP timestamp = PTS,sequence number递增,正常情况下客户端按照sequence
number解码即可。
此外,RTS还支持额外返回CTS扩展头以支持需要精确计算DTS的客户端(PTS=DTS+CTS),若Offer
SDP中带有a=extmap:{$id}
uri:webrtc:rtc:rtp-hdrext:video:CompositionTime,RTS会在每一帧视频的第一个RTP包上增加extension
identifier
=
{$id}的cts扩展头,id由客户的Offer SDP来决定。
RTS给予客户端充分的表达能力,将决定权下放给客户,让其决定是否接受视频带B帧,以及是否需要额外的CTS信息。以更通用的方式构建通信能力也是RTS的初衷。
Offer SDP片段:
拉流抓包:
请阅读The Msid Mechanism。
摘选如下内容:
This document defines a new SDP [RFC4566] media-level "msid" attribute.
This new attribute
allows endpoints to associate RTP streams that are described in different
media
descriptions
with the same MediaStreams as defined in [W3C.WD-webrtc-20160531] carry an
identifier for
each
MediaStreamTrack in its "appdata" field.
The value of the "msid" attribute consists of an identifier and an
optional "appdata"
field.
The name of the attribute is "msid".
The value of the attribute is specified by the following ABNF [RFC5234]
grammar:
msid-value = msid-id [ SP msid-appdata ]
msid-id = 1*64token-char ; see RFC 4566
msid-appdata = 1*64token-char ; see RFC 4566
An example msid value for a group with the identifier "examplefoo" and
application data
"examplebar" might look like this:
msid:examplefoo examplebar
The identifier is a string of ASCII characters that are legal in a
"token", consisting of
between 1 and 64 characters.
Application data (msid-appdata) is carried on the same line as the
identifier, separated
from
the identifier by a space.
The identifier (msid-id) uniquely identifies a group within the scope of
an SDP
description.
智能美化特效是视频直播提供的美颜、特效功能,支持画面美化与个性化定制服务, 适用于视频直播、视频会议、短视频制作等场景。通过阅读本文,您可以快速了解智能美化特效的技术优势、核心功能及应用场景。
智能美化特效已集成到摩杜云Queen SDK中,接入简单、快速。基于智能视觉算法、 海量规模的人脸、人体检测和识别技术,智能美化特效为视频创作者提供移动端的人脸美颜、美型、美妆美化、滤镜贴纸等编辑加工能力,满足直播和视频制作时的美颜特效需求。
自研的人脸关键点定位技术,涵盖106个基础点位、280个高精度点位,效果真实。
持续优化的智能视觉算法和实时渲染技术,保证自然流畅的使用体验。
持续升级的美颜美型、滤镜贴纸玩法,不断扩充的素材库,创造更多乐趣。
完善的开发者支持,快速响应客户需求,提供优质可靠的服务。
功能 | 描述 |
---|---|
人脸美颜 | 支持整体智能美颜和手动美颜。整体智能美颜有5个档位可选;手动美颜支持美白、磨皮、锐化、美肤、眼袋、祛法令纹、白牙、亮眼、红润,每项功能参数可调。 |
人脸美型 |
支持整体智能美型和手动美型。整体智能美型有5款风格可选;手动美型功能如下所示。
单向调节:瘦脸、削脸、瘦下颌骨、瘦颧骨、大眼、眼睛高度、微笑 双向调节:脸长、下巴、下巴长短、嘴型、嘴唇厚度、鼻翼、瘦鼻、眼角、眼距、人中、发际线 |
人脸美妆 | 支持整体智能美妆和手动美妆。整体智能美妆包括活力妆、魅惑妆、元气妆、 优雅妆等5款;手动美妆支持高光、美瞳、口红、眼妆、腮红5款,各项强度可调节。美妆特效可跟随面部动作与表情变化。 |
滤镜 | 支持34款滤镜效果,并持续扩容。实时渲染处理,提供更流畅的使用体验。 |
贴纸 | 支持静态和动态贴纸,提供数十款贴纸素材,并会持续扩容素材库。贴纸精准贴合面部,并可根据面部表情动作变化实时跟随。 |
抠像 | 支持蓝色和绿色背景幕布抠像。精准识别人体,与背景精细分割,支持多光线、正侧面等复杂环境的抠像,并实时跟随。 |
生活直播
适用于各类直播场景,满足实时美颜美化需求。
长短视频
辅助视频制作,提供各类贴合业务场景的美化特效处理。
在线教育
帮助老师上课前的美颜美化,效果自然,提升亲和力。
视频会议
在线会议过程中的实时美颜美化和互动,丰富远程沟通场景。
通过阅读本文及下载摩杜云Queen SDK Demo,您可以快速体验智能美化特效功能。
提供丰富的美白、磨皮、美肤和白牙等美颜功能,支持自动和手动两种调节模式,设置灵活,强度可调节,效果自然。
高实时性,完美适应各种光线与环境,获得更流畅的使用体验。
人脸点位贴合,可实时跟随表情或面部动作,妆容效果自然真实。
持续增加美妆类型及素材,更好地满足各类场景使用。
提供多样化的滤镜模板,实时渲染画面处理,效果自然贴合,适用不同的拍摄场景。
持续扩展的滤镜素材库与效果调优,并将建设自主素材管理平台。
适用于各种脸型,贴合精准,适用性强。实时跟随面部表情动作变化,跟随性好。
持续扩展的动态和静态贴纸素材库,增添趣味性。
基于色域检测和分割算法技术,支持蓝色和绿色背景幕布抠像。
能够适应不同质地、色域的蓝幕和绿幕,实现抗溢色的背景精细分割。支持多光线、正侧面等复杂环境的抠像,并实时渲染跟随。
摩杜云Queen SDK服务需要开通License,可以通过邮箱或钉钉群完成申请。
通过邮箱申请开通:
准备以下资料,并保证资料齐全、格式规范:公司名称、应用名称、申请使用的SDK版本(iOS版/Android版)、联系人、联系电话、应用bundleID、包名和签名信息(MD5格式小写无冒号,获取方式参见sample工程中的LicenseHelper.java)、摩杜云的账号/UID(若没有账号请注册)。
将上述资料发送至邮箱
我们将3个工作日之内处理完开通申请。
通过阅读本文,您可以了解移动端摩杜云Queen SDK的说明及下载方式。
平台 | 包大小 |
---|---|
iOS | 21.2 MB |
Android | 17.3 MB |
日期 | 版本 | 发布说明 | 下载地址 |
---|---|---|---|
2021-06-11 | V1.1.3 |
提升接入的简易性。
Android端支持原纹理方向的输出,支持使用纹理执行算法。 iOS端支持使用非纹理数据执行算法、使用纹理执行渲染。 Android端增加节能模式,可以自主在低端机型开启。 |
iOS版本
Android版本 |
2021-05-10 | V1.1.0 |
新增亮眼、红润、口红色卡、微笑、发际线、绿幕抠像和蓝幕抠像功能。
优化祛法令纹、祛眼袋和美型算法,效果更佳。 新增21款贴纸素材。 新增Demo效果对比功能。 |
iOS版本
Android版本 |
2021-03-26 | V1.0.0 |
独立发版。
提供直播、短视频等场景下的实时美颜美化功能。 核心功能:人脸美颜、人脸美型、人脸美妆、画面滤镜、静态/动态贴纸。 |
iOS版本
Android版本 |
本文为您介绍Android端摩杜云Queen SDK的接口文档、集成操作及简单使用示例,用于实现美颜特效功能。
开发前的环境要求如下表所示。
类别 | 说明 |
---|---|
系统版本 | 支持Android 4.3及以上版本。 |
Java版本 | 支持Java 1.7及以上版本。 |
API LEVEL | 支持ANDROID SDK API LEVEL 18及以上版本。 |
Android Studio版本 | 支持Android Studio 2.3以上版本,下载Android Studio。 |
项目 | 链接 |
---|---|
中文版接口文档说明 | 接口文档 |
Sample示例工程 | Sample示例工程 示例工程文件中,assets目录下包含Demo所有图片资源。 |
在GitHub上提供的Demo工程 | Demo工程 目前提供接入范例包括:摩杜云直播SDK、七牛直播SDK、腾讯云实时音视频SDK。 |
1.在项目级build.gradle项目文件中添加摩杜云Maven仓库。
allprojects {
repositories {
google()
jcenter()
maven { url "https://maven.moduyun.com/repository/releases" }
}
}
2.在应用级build.gradle项目文件下加入Queen依赖项
implementation "com.moduyun.maliang.android:queen:1.1.3-official-pro"
1.下载并解压SDK。下载地址请参见SDK下载。
2.将解压SDK获得的.aar文件复制到工程的libs目录中。
创建QueenEngine实例,设置初始化纹理与视窗参数
QueenEngine engine;
try {
// 传入Android.content.Context触发引擎的初始化
// 第二个参数为true表示直接输出到当前OpenGL的显示区域
engine = new QueenEngine(mContext,true);
} catch (InitializationException e) {
e.printStackTrace();
}
// 设置输入纹理,用于美颜流程的渲染
// 第四个参数表示输入纹理是否为OES类型的纹理
engine.setInputTexture(textureId, textureWidth, textureHeight, true);
// 非必要步骤:获得美颜输出纹理,可以在用于其他扩展业务,如果需要按照输入纹理方向返回输出纹理,则在生成纹理和设置纹理的时候,将“保持纹理方向”参数设置为true
Texture2D outTexture = engine.autoGenOutTexture(true);
engine.updateOutTexture(outTexture.getTextureId(), textureWidth, textureHeight, true);
// 设置视窗大小
engine.setScreenViewport(0, 0, viewWidth, viewHeight);
//& nbsp;开启log日志打印调试模式
engine.enableDebugLog();
设置美白和基础美化功能参数
美白
//美白开关
engine.enableBeautyType(BeautyFilterType.kSkinWhiting, true);
//美白参数 [0,1]
engine.setBeautyParam(
BeautyParams.kBPSkinWhitening,
0.3f
);
基础美颜
//磨皮/锐化 开关
engine.enableBeautyType(BeautyFilterType.kSkinBuffing, true);
//磨皮 [0,1]
engine.setBeautyParam(BeautyParams.kBPSkinBuffing, 0.6f);
//锐化 [0,1]
engine.setBeautyParam(BeautyParams.kBPSkinSharpen, 0.2f);
设置高级功能参数
使用高级功能,如高级美颜、美型、美妆、滤镜、贴纸,需要调用执行算法。
if (mUseTextureBuffer) { // 直接使用纹理数据执行算法
engine.updateInputTextureBufferAndRunAlg(
mCamera.inputAngle, mCamera.outAngle,
mCamera.flipAxis, false);
} else {
// 输入帧图片流,
engine.updateInputDataAndRunAlg(
imageData, // 帧图片流
ImageFormat.NV21, // 帧图片流格式
imageWidth, // 帧图片宽度
imageHeight, // 帧图片高度
0, // 用于检测的图像的跨度(以像素为单位),即每行的字节数, 默认情况下设为 0
mCamera.inputAngle, // 当前输入帧图片需旋转的角度,计算方式参考Sample工程
mCamera.outAngle, // 算法输出结果所需旋转的角度,计算方式参考Sample工程
mCamera.flipAxis // 输出数据的xy轴翻转处理,0为不旋转,1为x轴翻转,2为y轴翻转
);
}
高级美颜
//高级美颜开关
engine.enableBeautyType(BeautyFilterType.kFaceBuffing, true);
//去法令纹[0,1]
engine.setBeautyParam(BeautyParams.kBPNasolabialFolds, 0.3f);
//去眼袋[0,1]
engine.setBeautyParam(BeautyParams.kBPPouch, 0.3f);
//白牙[0,1]
engine.setBeautyParam(BeautyParams.kBPWhiteTeeth, 0.2f);
//滤镜美妆:口红[0,1]
engine.setBeautyParam(BeautyParams.kBPLipstick, 0.2f);
//滤镜美妆:腮红[0,1]
engine.setBeautyParam(BeautyParams.kBPBlush, 0.2f);
//滤镜美妆:亮眼[0,1]
engine.setBeautyParam(BeautyParams.kBPBrightenEye, 1.0f);
// 滤镜美妆:红润[0,1]
engine.setBeautyParam(BeautyParams.kBPBlush, 1.0f);
// 滤镜美妆:口红色相[-0.5,0.5],需配合饱和度、明度使用,参考颜色如下:土红(-0.125)、粉红(-0.1)、复古红(0.0)、紫红(-0.2)、正红(-0.08)、橘红(0.0)、紫色(-0.42)、橘色(0.125)、黄色(0.25)
engine.setBeautyParam(BeautyParams.kBPLipstickColorParam, 0.0f);
// 滤镜美妆:口红饱和度[0,1],需配合色相、明度使用,参考颜色如下:土红(0.25)、粉红(0.125)、复古红(1.0)、紫红(0.35)、正红(1.0)、橘红(0.35)、紫色(0.35)、橘色(0.25)、黄色(0.45)
engine.setBeautyParam(BeautyParams.kBPLipstickGlmosParam, 0.0f);
// 滤镜美妆:口红明度[0,1],需配合色相、饱和度使用,参考颜色如下:土红(0.4)、粉红(0.0)、复古红(0.2)、紫红(0.0)、正红(0.0)、橘红(0.0)、紫色(0.0)、橘色(0.0)、黄色(0.0)
engine.setBeautyParam(BeautyParams.kBPLipstickBrightnessParam, 1.0f);
美型
// 美型开关,其中第二个参数是功能开关,第三个参数为调试开关
engine.enableBeautyType(BeautyFilterType.kFaceShape, true, false);
/**
* 美型参数:颧骨< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeCutCheek, 0.0f);
/**
* 美型参数:削脸< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeCutFace, 0.0f);
/**
* 美型参数:瘦脸< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeThinFace, 0.0f);
/**
* 美型参数:脸长< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeLongFace, 0.0f);
/**
* 美型参数:下巴缩短< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeLowerJaw, 0.0f);
/**
* 美型参数:下巴拉长< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeHigherJaw, 0.0f);
/**
* 美型参数:瘦下巴< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeThinJaw, 0.0f);
/**
* 美型参数:瘦下颌< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeThinMandible, 0.0f);
/**
* 美型参数:大眼< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeBigEye, 0.0f);
/**
* 美型参数:眼角1< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeEyeAngle1, 0.0f);
/**
* 美型参数:眼距< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeCanthus, 0.0f);
/**
* 美型参数:拉宽眼距< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeCanthus1, 0.0f);
/**
* 美型参数:眼角2< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeEyeAngle2, 0.0f);
/**
* 美型参数:眼睛高度< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeEyeTDAngle, 0.0f);
/**
* 美型参数:瘦鼻< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeThinNose, 0.0f);
/**
* 美型参数:鼻翼< br />
* 参数范围:[0,1]
*/
engine.updateFaceShape(FaceShapeType.typeNosewing, 0.0f);
/**
* 美型参数:鼻长< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeNasalHeight, 0.0f);
/**
* 美型参数:鼻头长< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeNoseTipHeight, 0.0f);
/**
* 美型参数:唇宽< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeMouthWidth, 0.0f);
/**
* 美型参数:嘴唇大小< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeMouthSize, 0.0f);
/**
* 美型参数:唇高< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeMouthHigh, 0.0f);
/**
* 美型参数:人中< br />
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typePhiltrum, 0.0f);
/**
* 美型参数:发际线
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeHairLine, 0.0f);
/**
* 美型参数:嘴角上扬(微笑)
* 参数范围:[-1,1]
*/
engine.updateFaceShape(FaceShapeType.typeSmile, 0.0f);
美妆
// 第二个参数是开关,第三个参数是调试开关
engine.enableBeautyType(BeautyFilterType.kMakeup, true, false);
// 设置美妆素材
// 第一个参数是美妆类型
// 第二个参数是素材文件路径,基于assets的相对路径,如"/makeup/蜜桃妆.png"
// 第三个参数是素材与人脸的融合类型,第四个参数是保留参数
engine.setMakeupImage(MakeupType.kMakeupWhole,
makeupResPath,
BlendType.kBlendNormal,
15);
// 设置美妆素材透明度
// 第二个参数是透明度,第三个参数是保留参数
engine.setMakeupAlpha(MakeupType.kMakeupWhole,
0.6f,
0.3f);
滤镜
// 功能开关
engine.enableBeautyType(BeautyFilterType.kLUT, true);
//设置滤镜资源路径,基于assets的相对路径,如“/lookups/lookup_1.png”
engine.setFilter(lutResPath);
//滤镜强度
engine.setBeautyParam(BeautyParams.kBPLUT, 1.0f);
贴纸
// 删除贴纸素材路径
engine.removeMaterial(oldStickerResPath);
// 添加贴纸素材路径,相同贴纸不能重复添加
// 基于assets的相对路径,如"/sticker/baiyang"
engine.addMaterial(stickerResPath);
抠像
/**
* 设置绿幕抠像参数
* @param backgroundPath : 要替换的背景资源图文件地址,路径地址为"",则为关闭该项功能
* @param blueScreenEnabled : 是否使用蓝幕,true为替换蓝幕背景,false则为替换绿幕背景
* @param threshold 范围:【20,60】,默认建议取值30.
*/
engine.setGreenScreen(String backgroundPath, boolean blueScreenEnabled, float threshold);
渲染
// OES纹理的变换矩阵,通过SurfaceTexture获取
float[] transformMatrix = new float[16];
// 通过SurfaceTexture更新矩阵
mSurfaceTexture.updateTexImage();
mSurfaceTexture.getTransformMatrix(transformMatrix);
// 渲染到当前窗口,如证书校验失败或者全部特效功能关闭,则SDK不会执行渲染操作
int retCode = engine.renderTexture(transformMatrix);
// 参考API文档
// QUEEN_INVALID_LICENSE(-9),表示证书校验失败
// QUEEN_NO_EFFECT(-10),表示全部特效功能关闭
// 则需要业务方执行渲染,可参考Sample工程
if (retCode == -9 || retCode == -10) {
mFrameGlDrawer.draw(transformMatrix, mOESTextureId, true);
}
释放引擎
// 释放引擎资源
engine.release();
以当前摩杜云视频直播官网v4.0.2为例,接入步骤如下所示。
1.确保已开启直播配置项,允许预处理模式。
mModuLiveConfig.customPreProcessMode = CUSTOM_MODE_VIDEO_PREPROCESS;
2.初始化QueenEngine。
engine = new QueenEngine(this, false);
3.注册视频处理回调代理,获取纹理更新。
mModuLiveEngine.setVidePreProcessDelegate(new ModuLiveCallback.ModuLiveVideoPreProcessCallback() {
@Override
public int onTexture(int textureId, int width, int height, int rotate, int i4) {
// 绑定更新当前gl环境
int[] oldFboId = new int[1];
GLES20.glGetIntegerv(GLES20.GL_FRAMEBUFFER_BINDING, IntBuffer.wrap(oldFboId));
// 更新输入纹理id
engine.setInputTexture(textureId, width, height, false);
// 更新设置美颜美型相关参数
engine.enableBeautyType(BeautyFilterType.kSkinBuffing, true);//磨皮开关
engine.setBeautyParam(BeautyParams.kBPSkinBuffing, 0.9f); //磨皮 [0,1]
engine.setBeautyParam(BeautyParams.kBPSkinSharpen, 0.6f); //锐化 [0,1]
// 指定处理后的画面更新到新的纹理id上
if (mOutTexture == null) {
mOutTexture = engine.autoGenOutTexture();
}
engine.updateOutTexture(mOutTexture.getTextureId(), width, height);
// 开始渲染画面
int result = engine.render();
// 绑定更新到当前gl环境
GLES20.glBindFramebuffer(GL_FRAMEBUFFER, oldFboId[0]);
// 返回更新后的纹理id
return mOutTexture.getTextureId();
}
@Override
public void onTextureDestroy() {
Log.e("AnchorActivity", "onTexture: ");
}
@Override
public void onVideoData(long l, long l1, long l2, ModuLiveConstants.ModuLiveImageFormat aliLiveImageFormat, int i, int i1, int i2, int i3, int i4, int i5) {
// 更新视频帧数据
engine.updateInputDataAndRunAlg(
imageData, // 帧图片流
ImageFormat.NV21, // 帧图片流格式
imageWidth, // 帧图片宽度
imageHeight, // 帧图片高度
0, // 用于检测的图像的跨度(以像素为单位),即每行的字节数, 默认情况下设为 0
mCamera.inputAngle, // 当前输入帧图片需旋转的角度,计算方式参考Sample工程
mCamera.outAngle, // 算法输出结果所需旋转的角度,计算方式参考Sample工程
mCamera.flipAxis // 输出数据的xy轴翻转处理,0为不旋转,1为x轴翻转,2为y轴翻转
);
}
});
本文为您介绍iOS端摩杜云Queen SDK的接口文档、集成操作及简单使用示例,用于实现美颜特效功能。
开发前的环境要求如下表所示。
类别 | 说明 |
---|---|
系统版本 | 支持iOS 9.0及以上版本。 |
macOS High Sierra版本 | 支持macOS High Sierra 10.13及以上版本。 |
Xcode版本 | 支持Xcode 9.0及以上版本,下载Xcode。 |
项目 | 链接 |
---|---|
中文版接口文档说明 | 接口文档 |
Sample示例工程 | Sample示例工程 |
在GitHub上提供的Demo工程 | Demo工程 |
Podfile添加引入库指令,如下所示。
pod 'Queen', '1.1.3-official-pro'
1.下载并解压Sample示例工程,获取以下framework文件。
queen.framework
FaceDetection.framework
Face3D.framework
opencv2.framework
pixelai.framework
MNN.framework
2.打开Xcode,在工程target的General页签下,在Frameworks, Libraries, and Embedded
Content区域中添加以上framework。其中,opencv2.framework的Embed属性设置成Embed &
Sign,其他framework的Embed属性设置成Do Not
Embed。
3.在Frameworks, Libraries, and Embedded Content区域中添加以下系统依赖。
libc++.tbd
libcompression.tbd
Metal.framework
Accelerate.framework
QuartzCore.framework
OpenGLES.framework
CoreMedia.framework
CoreMotion.framework
CoreImage.framework
Foundation.framework
AssetsLibrary.framework
CoreGraphics.framework
CoreVideo.framework
4.分别将获取到的queen.framework文件中的queen-ios.Bundle、Face3D.framework文件中的face3d_res.Bundle添加到工程目录中。
使用Queen SDK功能
- (void)initBeautyEngine
{
// 初始化引擎配置信息对象
QueenEngineConfigInfo *configInfo = [QueenEngineConfigInfo new];
// 设置是否自动设置图片旋转角度,如设备锁屏,并且默认图像采集来自摄像头的话可以设置自动设置图片旋转角度
#if kEnableCustomSettingImgAngle
configInfo.autoSettingImgAngle = NO;
#else
configInfo.autoSettingImgAngle = YES;
#endif
// 设置资源根目录
NSString *bundlPath = [[NSBundle mainBundle] bundlePath];
configInfo.resRootPath = [bundlPath stringByAppendingString:@"/res"];
// 引擎初始化
self.beautyEngine = [[QueenEngine alloc] initWithConfigInfo:configInfo];
// 打开磨皮锐化功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeSkinBuffing enable:YES];
// 设置磨皮系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsSkinBuffing value:0.5f];
// 设置锐化系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsSharpen value:0.5f];
// 打开美白功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeSkinWhiting enable:YES];
// 设置美白系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsWhitening value:0.5f];
// 打开高级美颜功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeFaceBuffing enable:YES];
// 设置去眼袋系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsPouch value:0.5f];
// 设置去法令纹系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsNasolabialFolds value:0.5f];
// 设置白牙系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsWhiteTeeth value:0.5f];
// 设置口红系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstick value:0.5f];
// 设置腮红系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsBlush value:0.5f];
// 设置口红色相系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstickColorParam value:0.1f];
// 设置口红饱和度系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstickGlmosParam value:0.5f];
// 设置口红明度系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsLipstickBrightnessParam value:0.5f];
// 设置亮眼系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsBrightenEye value:0.5f];
// 设置红润系数
[self.beautyEngine setQueenBeautyParams:kQueenBeautyParamsSkinRed value:0.5f];
// 打开美妆功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeMakeup enable:YES];
// 设置整妆资源
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeWhole paths:@[@"makeup/活力妆.png"] blendType:kQueenBeautyBlendNormal];
// 设置高光资源
[self.beautyEngine setMakeupWithType:kQueenBeautyMakeupTypeHighlight paths:@[@"makeup/highlight.png"] blendType:kQueenBeautyBlendOverlay];
// 打开美型功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeFaceShape enable:YES];
// 设置大眼系数
[self.beautyEngine setFaceShape:kQueenBeautyFaceShapeTypeBigEye value:1.0f];
// 设置发际线系数
[self.beautyEngine setFaceShape:kQueenBeautyFaceShapeTypeHairLine value:1.0f];
// 设置嘴角上扬(微笑)系数
[self.beautyEngine setFaceShape:kQueenBeautyFaceShapeTypeSmile value:1.0f];
// 打开滤镜功能开关
[self.beautyEngine setQueenBeautyType:kQueenBeautyTypeLUT enable:YES];
// 设置滤镜强度
[self.beautyEngine setLutImagePath:@"lookups/lookup_1.png"];
// 添加贴纸
[self.beautyEngine addMaterialWithPath:@"sticker/0"];
// // 删除贴纸
// [self.beautyEngine removeMaterialWithPath:@"sticker/0"];
// 开启绿幕抠图功能
NSString *backgroundImgPath = @"background/red.png";
BOOL enableBlue = NO;
float threshold = 1.0f;
[self.beautyEngine setGreenScreen:backgroundImgPath blueScreenEnabled:enableBlue threshold:threshold autoThresholdEnabled:NO];
// // 开启蓝幕抠图功能
// enableBlue = YES;
// [self.beautyEngine setGreenScreen:backgroundImgPath blueScreenEnabled:enableBlue threshold:threshold autoThresholdEnabled:NO];
// // 取消抠图功能
// [self.beautyEngine setGreenScreen:nil blueScreenEnabled:enableBlue threshold:threshold autoThresholdEnabled:NO];
// // 展示人脸识别特征点
// [self.beautyEngine showFaceDetectPoint:YES];
// // 展示美妆三角剖分信息
// [self.beautyEngine showFaceDetectPoint:YES];
}
- (CVPixelBufferRef)getProcessedPixelBufferRefWithCurrentPixelBufferRef:(CVPixelBufferRef)pixelBufferRef
{
if (self.beautyEngine && pixelBufferRef)
{
QEPixelBufferData *bufferData = [QEPixelBufferData new];
bufferData.bufferIn = pixelBufferRef;
bufferData.bufferOut = pixelBufferRef;
#if kEnableCustomSettingImgAngle
bufferData.inputAngle = self.cameraRotate; //要正确传入pixelBufferRef的方向,否则人脸识别会失败,如果不知道pixelBufferRef的方向,可参考此demo属性cameraRotate取值的方法
bufferData.outputAngle = self.cameraRotate; //一般和inputAngle取值一样就可以了
#endif
// 对pixelBuffer进行图像处理,输出处理后的buffer
kQueenResultCode resultCode = [self.beautyEngine processPixelBuffer:bufferData];//执行此方法的线程需要始终是同一条线程
if (resultCode == kQueenResultCodeOK && bufferData.bufferOut)
{
return bufferData.bufferOut;
}
else if (resultCode == kQueenResultCodeInvalidLicense)
{
NSLog(@"license校验失败。");
}
else if (resultCode == kQueenResultCodeInvalidParam)
{
NSLog(@"非法参数");
}
else if (resultCode == kQueenResultCodeNoEffect)
{
NSLog(@"没有开启任何特效");
}
return pixelBufferRef;
}
else
{
return pixelBufferRef;
}
}
- (void)captureReset
{
if (self.beautyEngine)
{
//释放queen,确保当前线程与执行processPixelBuffer:是同一条线程
[self.beautyEngine destroyEngine];
self.beautyEngine = nil;
}
}
数据、纹理分离调用示例
/**
通知QueenEngine处理回调纹理
*/
- (int)onProcessTexture:(int)texture textureWidth:(int)width textureHeight:(int)height
{
if (self.pushConfig.beautyOn && nil != self.queenEngine) {
QETextureData* textureData = [[QETextureData alloc] init];
textureData.inputTextureID = texture;
textureData.width = width;
textureData.height = height;
kQueenResultCode result = [self.beautyEngine processTexture:textureData];
if (result != kQueenResultCodeOK) {
NSLog(@"queen beauty processTexture error. code: %lu", result);
}
return textureData.outputTextureID;
}
return texture;
}
/**
通知QueenEngine检测处理回调
*/
- (long)onDetectorProcessData:(long)data w:(int)w h:(int)h rotation:(int)rotation format:(int)format
{
if (self.pushConfig.beautyOn && nil != self.queenEngine) {
[self.beautyEngine updateInputDataAndRunAlg:(uint8_t*)data
withImgFormat:(kQueenImageFormat)(format)
withWidth:w
withHeight:h
withStride:0
withInputAngle:rotation
withOutputAngle:rotation
withFlipAxis:0];
}
return data;
}
/**
通知QueenEngine销毁回调
*/
- (void)onDestory
{
if (nil != self.beautyEngine) {
[self.beautyEngine destroyEngine];
self.beautyEngine = nil;
}
}
直播小程序是基于摩杜云的视频直播服务在微信小程序 内实现直播推流和直播播放的完整Demo。通过阅读本文,您可以快速搭建直播小程序Demo,了解如何在微信小程序中使用摩杜云直播服务。
1.准备一个可以进行微信登录的移动设备。
2.开通摩杜云视频直播服务并完成相应配置。
开通摩杜云视频直播服务,完成推流域名和播流域名的添加和配置,获取推流地址和播放地址,用于在微信小程序中推流和播流。具体操作,请参见
快速入门。
3.注册微信小程序并完成类目审核。
i.登录 微信公众平台 ,使用企业账号下的开发者账号,注册指定类目的微信小程序。
说明
微信小程序的直播相关组件,暂只针对国内主体部分类目的小程序开放。
请您在注册时查看
音视频播放组件开放类目列表
,选择直播相关组件开放的小程序类目。您需要先注册微信小程序并通过类目审核才能具备组件权限。
以上类目的小程序,需要企业账号下的开发者才能注册,个人用户无法申请。
ii.等待类目审核通过。
4.下载电脑系统对应版本的小程序开发工具
说明 建议使用稳定版Stable Build进行开发。
微信小程序提供了原生推流组件和播流组件:
live-pusher
小程序内部用于支持音视频上行(推流)能力的功能标签,该标签可以用于直播推流,组件属性定义请参见live-pusher官方文档。
live-player
小程序内部用于支持音视频下行(播放)能力的功能标签,该标签可以用于直播播放,组件属性定义详见live-player官方文档。
符合类目要求的小程序,需要在小程序管理后台的开发 > 接口设置中自助开通推拉流标签的使用权限,如下图所示:
1.下载并解压直播小程序Demo。
2.导入源码。
i.登录微信开发者工具。
ii.在左侧导航栏选择小程序项目 > 小程序,单击+创建小程序。
iii.在目录文本框中,选择解压后的直播小程序Demo文件夹。
iv.在AppID文本框中,填写申请好的小程序AppID。
您可以在小程序管理后台的开发 > 开发管理 > 开发设置中查看。
v.单击新建
3.真机调试。
单击真机调试按钮,使用微信扫描二维码进行调试体验。
说明 推拉流相关实现,位于index目录下。
4.推流和播流
i.在摩杜云直播服务控制台获取到推流地址和播放地址,具体操作,请参见 生成推流地址和播放地址。
ii.将推流地址和播流地址分别输入小程序Demo中的地址栏中
说明
推流地址:小程序只支持RTMP协议的推流地址。
播放地址:小程序只支持RTMP协议和FLV协议的播放地址。
iii.点击Push按钮,进行推流。
iv.点击Play按钮,进行播流。
当视频主播和观众存在跨国情况,您可以参考本章节解决直播卡顿、网络不稳定和加速等问题。
海外直播与中国内地直播的区别主要体现在以下三个方面:
直播域名的加速区域、直播中心、海外链路加速配置和上下行监控。
选择合适的直播中心、加速区域和海外链路加速能解决跨境链路传输不稳定,直播卡顿率高等问题。
上行帧率、码率监控实时查看主播推流情况,下行播放统计及时感知用户观看情况。
域名备案等资质。
无论主播在中国内地还是海外,只要出现在中国内地播放的场景,域名就必须进行备案。
针对海外直播场景的直播能力。
海外直播尤其是直播推流、播放纯海外直播场景,对直播加密有更高的要求, 需要对直播流进行加密。
同时因为海外链路长,不同网络情况下对动态多码率直播播放有更强需求。
针对跨国广电级活动、赛事、音乐直播,还提供了SRT直播整体解决方案。
海外直播主要分为三个类型,我们针对以下不同的使用场景提供了解决方案。
海外直播类型 | 涉及配置项 |
---|---|
主播在海外或港、澳、台地区,观众在中国内地 | 直播域名配置(域名需要提前备案)、海外链路加速功能配置 |
主播在海外或港、澳、台地区,观众在海外或港、澳、台地区 | 边缘推流配置、监控直播流和网络状态 |
主播在中国内地,观众遍布海外或港、澳、台地区 | 添加域名、海外链路加速功能配置 |
海外链路配置具体说明请参见 直播基础服务FAQ。
面临问题
跨境传输线路不稳定、直播卡顿率高。
解决方案
视频直播提供海外链路加速(原全球加速)功能,将视频流通过稳定的专有网络将视频流传输至中国内地。您可以通过直播的海外链路加速功能来解决跨境传输线路不稳定、直播卡顿率高的问题。请您按照以下步骤完成操作。
1.将直播域名添加在华东2(上海)直播中心。
说明 由于海外链路加速服务在华东2(上海)、华北2(北京)、 华北1(青岛)、华南1(深圳)、亚太东南1(新加坡) 直播中心提供。添加域名时,请您将域名添加到以上地域。
2.在海外链路加速配置中进行海外链路加速功能配置,请参见 海外链路加速。
注意 在中国内地播放的视频,域名必须进行备案。参见 域名备案流程。
面临问题
观众分布范围较广,视频无法覆盖。
主播位置不定,且网络传输不稳定,直播质量差。
解决方案
目前,摩杜云直播在海外的中心有德国、新加坡、日本等。建议您选择距离主播较近的一个直播中心,将视频流推至附近的直播中心。
1.边缘推流
摩杜云的CDN节点遍布全球主流国家,使用边缘推流,将视频流优先推送到距主播最近的边缘节点上,再通过摩杜云优化后的网络将视频流传输至直播中心。
说明 2019年02月21日之后新增的播流域名,均采用边缘推流的接入方式。 如果您因为历史原因还在使用中心推流方式,且需要使用海外链路加速功能,可以联系我们,切换为边缘推流。
2.实时监控网络状态。
为实时观察主播的网络状态,您可以登录
视频直播控制台
,在直播管理 >
流管理页面中,选择需查看的域名,单击流监控,查看实时的推流状态、检测主播的网络状态,保证推流的稳定性。请参见
流管理。
您也可以通过API自主获取实时帧率和码率。请参见
查询推流域名流帧率和码率
注意 摩杜云在中国内地与海外有丰富的CDN节点,覆盖6大洲,70多个国家和地区, 主流运营商全部支持海外观看需求,但是在添加直播域名时,您必须选择全球加速或海外及港澳台加速添加的域名才能生效。
面临问题
中国内地视频如何在海外加速?
如何保证重要视频快速、稳定地传输到海外?
解决方案
1.添加域名时,请您选择全球加速或海外及港澳台加速。添加域名,参见
添加域名。
2.在需要着重保障视频观看的区域,请您登录
视频直播控制台
3.在域名管理页面选择需配置的播流域名,单击域名配置,选择模板配置 >
海外链路加速配置中,启用海外链路加速功能,选择播流加速,将视频流通过专有网络传输至终点保障的区域。参见
海外链路加速。
说明 以下能力目前没有在控制台默认开放,如需使用需要联系客服申请开通。
内容安全方案
摩杜云视频直播提供私有加密,通过服务端和播放器的配合,在直播中心对直播内容进行流加密,
通过KMS进行密钥的动态管理,服务端与播放器相配合,只有配套的播放器才能对直播流进行解密播放。详情请参见
摩杜云视频加密。
动态多码率直播
用户在上行网络允许的前提下,为了较高清晰度,常常会选择较高的参数,如较高码率。而网络情况复杂多变,为了适应多种环境下都能正常观看,下行播放支持多种码率,根据观众的网络情况,选择合适的码率进行观看。开启后在播放时自动选择最高清晰度,检测用户网络情况不佳时切换到更低码率进行观看。
超低延时直播
RTS超低延时直播方案,端到端直播延时1.5秒。支持不改变直播上行原有的RTMP推流,
在下行原有的RTMP、FLV、HLS播放协议基础上,通过新增子播放域名,在子域名使用ARTC(基本开源WebRTC开放协议演进)进行超低延时播放。支持使用摩杜云播放SDK、
RTS
netSDK、自对接开放协议的方式对接。秒开、卡顿效果可以与RTMP播放持平或更好。详情请参见低延时直播RTS。
LHLS低延时
是一种以降低HLS协议时延为目标的方案,达到HLSTS直播延时从15秒~30秒降低到3秒~5秒的效果。
SRT协议接入+杜比全景声
针对专业、大型直播活动,使用的广电级直播方案,详情请参见SRT+杜比全景声直播方案。
视频直播提供了完善的内容安全保护机制,您可以根据不同业务场景的安全需求,选择RAM账号、HTTPS安全加速、访问控制等服务。
为保证直播服务配置、直播内容生产、推送和播放全过程的安全性,视频直播提供了完善的内容安全保护机制,可用于保障直播内容不被盗链、非法下载和传播,可以满足不同业务场景的安全需求。
由下图我们可以了解到视频直播丰富的安全手段。
更多信息,请参见 直播安全概述。
秒开是指视频播放后,肉眼看到的第一帧画面所等待的时间。本文介绍在不同端上秒开的支持情况。
秒开主要依靠云端服务的优化以及播放器的配合,使用摩杜云的秒开功能最快可以实现200ms左右的首屏打开速度。
App端
因HTTP-FLV使用广泛,且协议结构比RTMP更加稳定,所以建议播放端使用HTTP-FLV协议。
PC浏览器
PC浏览器的视频播放内核一般采用FLASH控件,FLASH播放器采用比较刚性的强制缓冲模式,较难做到秒开。
手机浏览器
Safari对HLS(m3u8)的支持较好:
对于iOS平台,可直接使用iPhone的硬解芯片协助视频播放,如果DNS有缓存的话,可实现秒开。
对于Android平台,因各机型和版本差异较大,秒开结果具有随机性。
说明 秒开的实现依赖云端的视频智能缓冲,有缓冲就会有延迟。所以一款好的播放器, 在获得秒开能力加成的同时,必须做好延迟控制的工作。否则,秒开的同时会造成延迟,就无法适用于秀场等对互动性要求高的直播场景。
本文介绍如何解决查直播延迟长的问题。
推流端
GOP(Group Of
Picture)帧是视频的关键帧,是视频图像编码器和解码器存取的基本单位。直播会将每一帧数据打上时序标签,并进行网络传输。视频的关键帧数量过大会造成直播延时。
多数第三方推流软件为解决卡顿问题会采用增大编码缓存的方法,而编码缓存过大,则会造成直播延时。
由于硬件条件限制,无法满足编码端码率、帧率以及编码的高档位设置需求,造成编码延迟影响直播。
服务端
在视频播放前,为了保证直播秒开以及降低卡顿,会先缓存部分直播数据,这样能保证数据的流畅性,但缓存数据会造成一定的直播延时;在视频播放中,由于网络抖动可能导致数据无法传送到客户端,因此会造成2秒~3秒的延时。
播流端
多数不支持快进的播流端都是在接收缓存收满后才进行解码直播,而这部分接收的缓存会导致直播延时。
您可通过以下配置来降低直播延时:
推流端配置
将GOP帧设置为1秒~2秒,减少播放器加载GOP帧所用的时间来降低直播延时。控制台GOP设置,请参见
自定义转码
;API接口配置,请参见添加直播流自定义转码配置。
由于编码缓存过大引起的直播延时,建议您使用摩杜云推流SDK降低延时。
对于推流设备的使用,推流iOS端建议您使用硬编码,其效率高且省电;Android端因机型复杂,CPU类型众多,采用硬编码可能出现兼容性问题,推流Android端建议您使用软编码。
服务端配置
将服务端缓存调小,来降低直播延时。您可通过控制台进行直播延时配置,根据不同的播流协议来配置延时时间,延时配置越低服务端缓存越小。如下图所示:
说明 将缓存调小后,当网络环境不稳定时,数据无法及时下载,会出现直播卡顿的现象。
选用播流协议
摩杜云提供HTTP-FLV 、HLS、RTMP三种播放协议,您可以根据直播场景选择使用。
HTTP-FLV和RTMP延时较小,适合低延时播放的场景。HLS延迟较大但兼容性好,适合对延时不敏感但需要更多播放终端可以播放的场景。
HTTP-FLV和RTMP需要Flash播放器,HLS可以直接在浏览器中播放。
手机浏览器观看直播视频,仅可使用HLS播流协议。
说明 如果您的播流端使用的是HLS协议,感觉延迟较高, 由于HLS协议的延时在10秒~30秒左右为正常现象,您可以将HLS协议换为FLV协议即可解决此问题。
HTTP-FLV、HLS、RTMP协议对比如下表所示:
协议名称 | 协议简介 | 采用的传输协议 | 视频封装格式 | 推荐直播场景 |
---|---|---|---|---|
HTTP-FLV | 由Adobe公司推出,将流媒体数据封装成FLV格式, 通过HTTP协议传输给客户端,延时约2秒。支持使用HTTPS加密传输,支持Android移动端和iOS移动端。 | HTTP | FLV、TAG | 降低延时 |
HLS | 由Apple公司推出,基于HTTP的流媒体传输协议。将流媒体数据切成连续的TS分片,每个分片有5秒以上的时长, 分片数量一般为3~4个,所以总延迟约10秒~30秒,但流畅性较好。主要应用于iOS设备,提供音视频直播服务和录制内容等服务。 | HTTP | M3U8、TS | 跨终端 |
RTMP | 由Adobe公司推出,传输的过程中消息会被拆分为更小的消息块(Chunk)单元,再将分割后的消息块通过TCP协议传输,接收端再反解接收的消息块恢复成流媒体数据将大文件拆分,因过程复杂可能导致不稳定。在iOS端,需要使用第三方解码器才能播放。 | HTTP | FLV、TAG | 互动式直播 |
如果上述方法仍未帮您降低延时,您可以尝试使用低延时服务RTS(Real-time
Streaming)。RTS具备千万级并发场景下的毫秒级延时直播能力,适用于较大的互动直播场景,弥补了传统直播3秒~6秒延时的问题,保障低延时、低卡顿、秒开流畅的极致直播观看体验。
低时延直播费用
低时延直播费用与标准直播费用不同。具体计费规则,请参见摩杜云产品定价页
开通低延时直播服务
如何开通RTS服务及具体使用方法,请参见 功能介绍
中的使用指南。
如何在满足业务需求的情况下,选择成本最优的智能审核方案,是每个直播平台面对的难题。本文介绍如何以最优成本配置直播审核模板。
审核场景:对直播画面的涉黄、暴恐涉政、广告、不良场景四大维度进行审核。
高频截帧:对于内容风险高的业务如核心主播或交友等类型,采用高频截帧方案,截帧频率为1秒~2秒,大幅度规避危险内容曝光的可能性。
关键帧截帧:对于业务风险相对不高的业务如游戏直播或赛事直播,采用关键帧截帧方案,截帧频率为3秒,可做到优化成本。
方式一:通过OpenAPI配置审核策略,详细请参见AddLiveSnapshotDetectPornConfig。
方式二:通过控制台配置审核策略,详细请参见 操作步骤
说明
前提条件:
开通直播服务并完成默认的MOS授权,详细操作请参见 开通与购买视频直播
,开通成功后,系统会将问题图片保存到您的MOS中。
准备一个HTTP Server作为接收回调的服务。
1.登录 视频直播控制台
2.在左侧导航选择域名管理。
3.单击域名后的域名配置。
4.配置 回调地址,单击 确定
5.选择模版配置 > 审核模版,根据您的需求配置审核策略。
6.配置完成后,单击确定。
7.内容审核。
推流后,立即开始按照规则进行直播内容审核。
当发现异常情况,会通过回调通知给使用方,并把有问题的图片保存到用户指定的MOS下。格式如下:
{
"DomainName": "qt01.alivecdn.com",
"AppName": "ondemand_mos",
"StreamName": "gs0911_4",
"MosEndpoint": "mos-cn-hangzhou.moduyuncs.com",
"MosBucket": "mts-bucket-test",
"MosObject": "customer/ondemand_mos/gs0911_4/1505131029218.jpg",
"Result": [
{
"BizType": "default",
"Result": [
{"Label": "Porn", "Rate":100, "Suggestion": "review", "Scene":"porn", "Extent": {}},
{"Label": "Ad", "Rate":100, "Suggestion": "review", "Scene":"ad", "Extent": {}}
]
}
]
}
说明
DomainName:域名
AppName:应用名称
StreamName:流名
MosEndpoint:MOS endpoint地址
MosBucket:MOS Bucket名字
MosObject:存储对象名字
Result:检测结果
Label:对应检测结果标签
Rate:置信度
Suggestion:建议处理方式
Scense:检测场景
Extent:扩展字段
视频直播的录制服务是将直播中的视频转为点播视频进行存储及管理。支持将录制的视频存储至MOS、和存储至VOD。
您可以针对不同的场景进行录制配置,按照您的需求完成直播录制。
按域名、AppName、StreamName多级别录制
录制时可精确到某一路流。您可以输入指定的域名、应用名或流名称,录制某一路直播流。参见
录制存储至MOS
、
录制存储至VOD。
按定时任务录制
您可以通过API控制录制的开始与结束时间,在您指定的时间内进行录制。参见添加APP录制配置。
按需录制
您可以配置一个回调,通过回调的方法精准控制每一路流的录制方式。参见按需录制。
手动录制
默认不录制。您可以通过调用接口来进行录制。参见手动录制。
您可以将录制的视频存储至MOS,或者存入VOD。
录制存储至MOS
您可以将录制到MOS中的视频用于存储及回看。参见 录制存储至MOS。
如果您需要对录制的视频进行预览和简单的管理,可以通过直播控制台的录制管理列表、或MOS控制台查看或管理。参见
录制文件管理。
如果您需要对录制视频进行内容分发,可以登录MOS控制台,配置一个CDN加速域名。CDN会将您MOS存储的视频分发到全国各地的节点。用户访问时只需访问最近的CDN节点读取文件,不仅可提升边缘用户的访问速度和体验,同时,可有效的节省整体应用的网络费用。参见
配置MOS 。
说明
您可以录制flv、mp4、hls三种格式的视频。
录制的视频均为原画视频。
您可对录制的hls文件进行索引编辑,快速组装视频片段m3u8索引文件。
录制文件的信息默认存储6个月。6个月内,您可以通过API或者控制台来进行查询,超出时间需要自行去MOS产品中获取数据。
录制存储至VOD
您可以将录制存储至VOD的视频进行转码及内容管理。VOD产品拥有媒资管理、视频剪辑等功能,您可对录制的视频添加标签管理,并对视频进行内容的编辑处理。参见
录制存储至VOD。
说明
您可以录制原始视频到VOD产品中。
您可以将录制视频转码为指定的点播文件到VOD产品中。
您可以对录制下来的视频进行内容的管理。
更多关于直播录制功能的介绍,请参见 直播录制中的开发指南
许多用户使用直播服务时,需要把正在直播的视频录制下来进行存储或方便后续的回看。
直播服务提供了两种直播录制文件转点播的形式供您选择。
直播录制文件存储在媒体 Bucket 中,并执行二次转码
直播录制下来的视频经过 MTS 的二次转码,转为设定的码率,可供用户在各种场合进行播放。
流程图
直播录制文件存储在 MOS 中
直播录制下来的视频均为原画画质,将视频存储在 MOS 中可进行存储,下载或回看。
流程图
直播录制功能支持将直播视频录制为 MP4、HLS 和 FLV 三种文件格式,录制的文件为原始文件,分辨率与码率与推流时的文件一致。
直播转点播是将直播流同步录制为点播视频,并支持媒资管理、媒体处理(转码及内容审核/智能首图等AI处理)、 内容制作(云剪辑)、CDN分发加速等一系列操作,可配置工作流自动处理,也可通过API/SDK灵活触发。本文为您介绍3个典型搭配的实践方法。
开通视频点播服务,请参见开始使用视频点播。
开通视频直播服务。
添加直转点录制配置,请参见 录制存储至VOD。
直播转点播:结合视频点播的转码、云剪辑、AI处理、事件通知等功能,可适应多种业务场景。
录制转码模板组:直播录制到点播时,点播会使用该模板组对视频进行转码操作。
合成转码模板组:多个录制视频进行自动合成时,点播会使用该模板组对视频进行合成+转码操作。
仅存储:对直播内容进行录制后,不进行任何后续操作(不转码即分发模板组)。
仅合成:对直播内容进行合成后,不进行任何后续操作(不转码即分发模板组)。
直播录制周期:直播录制到点播的录制周期。例如:需要在一场3小时的直播过程中提供点播服务,则可设置录制周期为1小时;即直播1小时后,可提供第1小时内已录制内容的点播观看服务。
直播录制后快速将录制文件进行转码和CDN加速,供用户进行点播播放。
适用场景:适用于大部分直播场景(不需要对内容进行二次加工)。
流程如下:
1.客户进行直播推流。
2.推流达到一个录制周期,则会自动将录制文件添加到点播系统。
3.点播记录完成后,会生成点播系统的唯一视频ID,并将该视频信息回调给用户,即AddLiveRecordVideoComplete通知,并附带直播相关的DomainName、AppName、StreamName信息。客户收到回调后,需记录该视频信息,并以该VideoId作为索引进行后续视频状态更新。
4.点播系统检测用户录制配置中的录制转码组ID(该转码组中含有具体码流转码任务),进行对应的转码操作。
5.截图完成、单个码流转码完成、全部码流转码完成时,会给用户进行回调(回调顺序无时序),用户需根据回调信息中的VideoId进行视频状态更新。转码完成后,即可进行后续的播放操作(转码回调信息中含播放地址或后续通过GetPlayInfo接口根据VideoId进行播放地址获取,该播放地址已经经过CDN加速)。
部分用户希望将直播录制的视频仅先存储到点播,暂缓后续的转码操作, 则可在新建录制配置时,选择仅存储模板组。如果后续希望对视频进行转码, 则可进行手动触发转码操作。同时,可配合点播云剪辑功能进行使用,效果更佳。
说明 仅存储模板组需联系点播进行激活。
适用场景:直播完成后,需要对内容进行二次加工,如体育赛事、游戏直播剪辑等,后续由用户主动发起转码和CDN加速全流程(转码完成后点播会自动对输出文件进行CDN加速)。
流程如下:
1.客户进行直播推流。
2.推流达到一个录制周期,则会自动将录制文件添加到点播系统。
3.点播记录完成后,会生成点播系统的唯一视频ID,并将该视频信息回调给用户,即AddLiveRecordVideoComplete通知,并附带直播相关的DomainName、AppName、StreamName信息。客户收到回调后,需记录该视频信息,并以该VideoId作为索引进行后续视频状态更新。
4.用户对该视频手动触发转码操作(调用转码任务API),在此之前可进行云剪辑等操作。
5.截图完成、单个码流转码完成、全部码流转码完成时,会给用户进行回调(回调顺序无时序),用户需根据回调信息中的VideoId进行视频状态更新。转码完成后,即可进行后续的播放操作(转码回调信息中含播放地址或后续通过GetPlayInfo接口根据VideoId进行播放地址获取,该播放地址已经经过CDN加速)。
部分用户希望将自己录制周期生成的多个文件(如录制周期为20分钟,一次直播1个小时,则会生成3个视频)进行视频合成,再将合成后的视频进行处理,点播提供了自动合成的功能。可在新建直播录制配置时,将自动合成开关打开,并且配置进行合成时所使用的合成转码模板组(也可配置为仅合成,后续由用户触发转码,与前两节所述区别相同)。点播会在用户断流超过指定时间(可由直播进行配置断流超时时间)后,进行本次直播的视频自动合成并根据转码配置进行后续操作。
合成+自动转码
适用场景:一场直播完成后,需要对所有录制周期内的分段进行自动合并,同时发起转码等全流程。如体育赛事、教育多节授课合并等。
流程如下:
i.客户进行直播推流。
ii.推流达到一个录制周期,则会自动将录制文件添加到点播系统。
iii.点播记录完成后,会生成点播系统的唯一视频ID,并将该视频信息回调给用户,即AddLiveRecordVideoComplete通知,并附带直播相关的DomainName、AppName、StreamName信息。客户收到回调后,需记录该视频信息,并以该VideoId作为索引进行后续视频状态更新。
iv.客户断流超时或主动触发断流。
v.点播收到直播发送的本次直播结束消息。
vi.点播系统检测用户录制配置中的合成配置,判断是否需要发起自动合成。如果需要,则按照录制配置中的合成转码组进行合成和转码。
vii.视频开始合成,点播会生成一个合成后视频的唯一视频ID,并将该视频信息回调给用户,即LiveRecordVideoComposeStart通知,并附带直播相关的DomainName、AppName、StreamName信息。客户收到回调后,需记录该视频信息,并以该VideoId作为索引进行后续视频状态更新。
viii.视频源文件合成完成后,点播会将该状态回调给用户,即FileUploadComplete通知。
ix.截图完成、单个码流转码完成、全部码流转码完成时,会给用户进行回调(回调顺序无时序),用户需根据回调信息中的VideoId进行视频状态更新。转码完成后,即可进行后续的播放操作(转码回调信息中含播放地址或后续通过GetPlayInfo接口根据VideoId进行播放地址获取,该播放地址已经经过CDN加速)。
合成+手动发起转码
可在新建直播录制配置时,将自动合成开关打开,并且配置进行合成时所使用的合成转码模板组(本情况配置成仅合成,后续由用户触发转码)。
适用场景:一场直播完成后,需要对所有录制周期内的分段进行自动合并,合并后文件不做任何处理,由用户进行二次加工,如云剪辑等,后续再进行手动转码,如视频内嵌广告、体育赛事空挡部分内容剪切等。
流程如下:
i.客户进行直播推流。
ii.推流达到一个录制周期,则会自动将录制文件添加到点播系统。
iii.点播记录完成后,会生成点播系统的唯一视频ID,并将该视频信息回调给用户,即AddLiveRecordVideoComplete通知,并附带直播相关的DomainName、AppName、StreamName信息。客户收到回调后,需记录该视频信息,并以该VideoId作为索引进行后续视频状态更新。
iv.客户断流超时或主动触发断流。
v.点播收到直播发送的本次直播结束消息。
vi.点播系统检测用户录制配置中的合成配置,判断是否需要发起自动合成。如果需要,则按照录制配置中的合成转码组进行合成和转码。
vii.视频开始合成,点播会生成一个合成后视频的唯一视频ID,并将该视频信息回调给用户,即LiveRecordVideoComposeStart通知,并附带直播相关的DomainName、AppName、StreamName信息。客户收到回调后,需记录该视频信息,并以该VideoId作为索引进行后续视频状态更新。
viii.视频源文件合成完成后,点播会将该状态回调给用户,即FileUploadComplete通知。此时,代表本次录制合成的源文件已经处于正常就绪状态,用户可对该视频进行后续的转码触发等操作。
ix.用户对该视频手动触发转码操作(调用转码任务API),在此之前可进行云剪辑等操作。
x.截图完成、单个码流转码完成、全部码流转码完成时,会给用户进行回调(回调顺序无时序),用户需根据回调信息中的VideoId进行视频状态更新。转码完成后,即可进行后续的播放操作(转码回调信息中含播放地址或后续通过GetPlayInfo接口根据VideoId进行播放地址获取,该播放地址已经经过CDN加速)。
本章节为您介绍了在线教育的视频直播场景及解决方案。采用手机作为客户端,利用推拉流SDK和视频直播服务实现视频的高效分发。同时, 该方案还支持手机间通过MQTT协议互相发送消息,在信息的服务端对信息内容进行安全审核,不合规内容不能转发,消息内容在服务端保存供后续查看。
通过摩杜云视频直播服务实现移动端的推拉流能力,同时移动端利用MQTT消息服务实现发送和接受消息,在消息转发时利用内容安全服务对消息内容进行审核。发送的消息可以存储在表格存储中。
适用于视频直播场景,通过手机端应用调用推流和拉流SDK,利用摩杜云视频直播服务来实现视频分发。
利用MQTT消息中间件实现手机端接受和发送消息,同时在服务端实现消息转发时对消息进行内容审核和消息存储。
通过视频直播+消息服务+表格存储+内容安全,快速实现在线教育的视频直播。
解决视频直播中手机端的推拉流问题。
解决直播中手机端互发消息和消息内容的安全审核问题,同时低成本保存消息。
视频直播
消息队列MQTT/RocketMQ
表格存储(TABLESTORE)
内容安全
摩杜云支持纯音频与纯视频直播,您可以推送纯音频或纯视频的直播流到摩杜视频云中心,也可以直接播放纯音频或纯视频的直播流。
支持推流RTMP协议的音、视频流,可推送纯音频或纯视频流。
您可以在播放地址后端增加参数,来单独播放纯音频或纯视频流。
RTMP和FLV协议的播放地址
单独播放音频:onlyaudio=1
单独播放视频:onlyvideo=1
说明 仅支持RTMP和FLV协议的播放地址。
示例:
未开启鉴权的地址:
rtmp://DomainName/AppName/StreamName?onlyaudio=1
flv://DomainName/AppName/StreamName.flv?onlyaudio=1
开启鉴权的地址:
rtmp://DomainName/AppName/StreamName?auth_key=timestamp-rand-uid-md5hash&onlyaudio=1
flv://DomainName/AppName/StreamName.flv?auth_key=timestamp-rand-uid-md5hash&onlyaudio=1
ARTC协议的播放地址
单独播放音频:subvideo=no
单独播放视频:subaudio=no
说明 仅支持ARTC协议的播放地址。
示例:
未开启鉴权的地址:
artc://DomainName/AppName/StreamName@subvideo=no
开启鉴权的地址:
artc://DomainName/AppName/StreamName?auth_key=timestamp-rand-uid-md5hash@subvideo=no
本产品最新版服务等级协议,请在摩杜云服务等级协议汇总页查找获取。
前言
欢迎开通摩杜云视频直播服务。
本服务条款是摩杜云计算有限公司(以下简称“摩杜云”)与您就摩杜云所提供视频服务的相关事项所订立的有效合约。
您通过盖章、网络页面点击确认或以其他方式选择接受本服务条款,包括但不限于未点击确认本服务条款而事实上使用了摩杜云服务,
即表示您与摩杜云已达成合议并同意接受本服务条款的全部约定内容。如若双方盖章文本与网络页面点击确认或以其他方式选择接受
之服务条款文本,存有不一致之处,以双方盖章文本为准。
关于本服务条款,提示您特别关注限制、免责条款,摩杜云对您违规、违约行为的认定处理条款,以及管辖法院的选择条款等,
前述条款可能以加粗形式提示您注意。在接受本服务条款之前,请您仔细阅读本服务条款的全部内容。如果您对本服务条款的条
款有疑问的,请通过摩杜云相关业务部门进行询问,摩杜云将向您解释条款内容。如果您不同意本服务条款的任意内容,
或者无法准确理解摩杜云对条款的解释,请不要进行后续操作。
1.服务内容 本条款中“服务”指:摩杜云向您提供www.moduyun.com网站(即摩杜云官网)上所展示的服务以及相关的技术及网络支持服务。
2.服务价格及费用
2.1.
服务价格均在摩杜云www.moduyun.com网站的价格页面上列明,您应按照www.moduyun.com网站上现时有效的价格体系支付相应服务费用。
2.2.
您可以通过支付宝、网上银行或银行汇款等途径(具体途径以订购时摩杜云官网展现为准)向您的摩杜云账户充值,之后再行购买具体服务,与之有关的具体规则详见摩杜云官网上的页面公告
2.3. 根据您订购服务的类型不同,您需按照摩杜云官网页面展示的付款时间将服务费用付至摩杜云:
2.3.1. 先付费后使用:
您购买摩杜云以包年、包月或资源包(套餐包)形式售卖的服务,付清全部服务费用后,摩杜云将为您提供服务。您在官网确认订单时未立即支付服务费用的,应自行承担下列订单失效的后果:
(1)下单后超过7天仍未付款,订单失效;
(2)付款前该服务库存不足的,订单失效;订单失效的,您和摩杜云就订单载明服务所达成的一切合意或行为均失效。当前的服务期届满,您仍须使用服务的,至少应在服务期满前7天内支付续费款项,以使服务得以继续进行。
2.3.2. 先使用后付费:
您购买摩杜云以按量形式售卖的服务,您可先开通、使用服务,摩杜云将以小时、天或月(计费周期)为单位,自动计算上1(壹)个计费周期的实际使用量,并从您的摩杜云账户余额中扣减相应的服务费用。
具体扣费规则以及计费项以摩杜云官网页面公布的当时有效的内容为准。
2.4.您应保持账户余额充足以确保服务的持续使用;摩杜云保留在您未按照约定支付全部费用之前不向您提供服务和/或技术支持,或者终止服务和/或技术支持、直至全部清除您数据的权利。您如未按约定履行付款义务,摩杜云有权自您欠费次日起,按欠费金额的万分之五按天收取逾期付款违约金。
2.5.您完全理解摩杜云价格体系中所有的赠送服务项目或活动均为摩杜云在正常服务价格之外的一次性特别优惠,优惠内容不包括赠送服务项目的修改、更新及维护费用,并且赠送服务项目不可折价冲抵服务费用。
2.6.您理解并认可,就摩杜云的服务在正式收费前,摩杜云可能通过开展邀请测试、公测等方式为您提供免费的服务,免费期间,您不需支付服务费用;摩杜云不排除日后收取费用的可能,届时摩杜云将提前10个自然日通过在网站内合适版面发布公告或发送站内通知等方式公布收费政策及规范;如您仍使用摩杜云服务的,您应按届时有效的收费政策付费。
3.权利义务
3.1. 您的权利、义务
3.1.1. 您应按照摩杜云的页面提示及本服务条款约定支付相应服务费用。
3.1.2.
您对自己存放在摩杜云云平台上的数据以及进入和管理摩杜云云平台上各类产品与服务的口令、密码的完整性和保密性负责。因您维护不当或保密不当致使上述数据、口令、密码等丢失或泄漏所引起的一切损失和后果均由您自行承担。
3.1.3.
您应向摩杜云提交执行本服务条款的联系人和管理您网络及云平台上各类服务的人员名单和联系方式并提供必要的协助。如以上人员发生变动,您应自行将变动后的信息进行在线更新并及时通知摩杜云。因您提供的人员的信息不真实、不准确、不完整,以及因以上人员的行为或不作为而产生的结果,均由您负责。
3.1.4.
您不应在摩杜云服务或平台之上安装、使用盗版软件;您理解并同意,摩杜云有权拒绝使用盗版软件的相关应用系统在摩杜云服务或平台之上部署。您应对自己行为(如自行安装的软件和进行的操作)所引起的结果承担全部责任。如因您自行安装相关软件的合法版权人向摩杜云提出侵权投诉、指控或其他主张,您应当采取一切合理措施以保证摩杜云免责,包括但不限于进行情况澄清、提供正版软件使用证明,以及其他足以使合法版权人撤回其前述主张的措施。
3.1.5.
您须依照《互联网信息服务管理办法》等法律法规的规定保留自己网站的访问日志记录,包括发布的信息内容及其发布时间、互联网地址(IP)、域名等,国家有关机关依法查询时应配合提供。您自行承担未按规定保留相关记录而引起的全部法律责任。
3.1.6.
您应对自己存放在摩杜云云平台上的数据内容负责,摩杜云提示您谨慎判断数据内容的合法性并对此予以监督,如因上传、储存的内容违反法律法规、部门规章或国家政策,由此造成的全部结果及责任由您自行承担,并且摩杜云系统记录有可能作为您违反法律法规的证据。
3.1.7.
您理解及同意,中华人民共和国的国家秘密受法律保护,您有保守中华人民共和国的国家秘密的义务,您使用摩杜云服务应遵守相关保密法律法规的要求,并不应危害中华人民共和国国家秘密的安全,否则您将受到相关法律的追究。
3.1.8. 您承诺:
3.1.8.1.
如果您利用摩杜云提供的服务进行的经营或非经营活动需要获得国家有关部门的许可或批准的,应获得该有关的许可或批准。包括但不限于以下内容:
(1)如果您开办了多个网站,须保证所开办的全部网站均获得国家有关部门的许可或批准;
(2)如您网站提供非经营性互联网信息服务的,必须办理非经营性网站备案,并保证所提交的所有备案信息真实有效,在备案信息发生变化时及时在备案系统中提交更新信息;
(3)如您网站提供经营性互联网信息服务的,还应自行在当地通信管理部门取得经营性网站许可证;
(4)如您经营互联网游戏网站的,您应依法获得网络文化经营许可证;
(5)如您经营互联网音、视频网站的,您应依法获得信息网络传播视听节目许可证;
(6)若您从事新闻、出版、教育、医疗保健、药品和医疗器械等互联网信息服务,依照法律、行政法规以及国家有关规定须经有关主管部门审核同意,在申请经营许可或者履行备案手续前,应当依法经有关主管部门审核同意。
您理解并认可,以上列举并不能穷尽您进行经营或非经营活动需要获得国家有关部门的许可或批准的全部类型,您从事的活动应获得有关的许可或批准,并应符合国家及地方不时颁布相关法律法规之要求。
3.1.8.2.
除摩杜云明示许可外,不得修改、翻译、改编、出租、转许可、在信息网络上传播或转让摩杜云提供的软件,也不得逆向工程、反编译或试图以其他方式发现摩杜云提供的软件的源代码;
3.1.8.3. 若摩杜云的服务涉及第三方软件之许可使用的,您同意遵守相关的许可协议的约束;
3.1.8.4.
不散布电子邮件广告、垃圾邮件(SPAM):不利用摩杜云提供的服务散发大量不受欢迎的或者未经请求的电子邮件、电子广告或包含反动、色情等有害信息的电子邮件;
3.1.8.5. 不得将摩杜云所提供的服务用作非法代理服务器(Proxy);
3.1.8.6.
不利用摩杜云提供的资源和服务上传(Upload)、下载(Download)、储存、发布如下信息或者内容,不为他人发布该等信息提供任何便利(包括但不限于设置URL、BANNER链接等):
(1)违反国家规定的政治宣传和/或新闻信息;
(2)涉及国家秘密和/或安全的信息;
(3)封建迷信和/或淫秽、色情、下流的信息或教唆犯罪的信息;
(4)博彩有奖、赌博游戏、“私服”、“外挂”等非法互联网出版活动;
(5)违反国家民族和宗教政策的信息;
(6)妨碍互联网运行安全的信息;
(7)侵害他人合法权益的信息和/或其他有损于社会秩序、社会治安、公共道德的信息或内容;
(8)其他违反法律法规、部门规章或国家政策的内容。
3.1.8.7.
不应大量占用,亦不得导致程序或进程大量占用摩杜云云计算资源(如服务器、网络带宽、存储空间等)所组成的平台(以下简称“云平台”)中服务器内存、CPU或者网络带宽资源,给摩杜云云平台或者摩杜云的其他用户的网络、服务器(包括但不限于本地及外地和国际的网络、服务器等)、产品/应用等带来严重的负荷,影响摩杜云与国际互联网或者摩杜云与特定网络、服务器及摩杜云内部的通畅联系,或者导致摩杜云云平台服务或者摩杜云的其他用户所在的服务器宕机、死机或者用户基于云平台的产品/应用不可访问等;
3.1.8.8.
不进行任何破坏或试图破坏网络安全的行为(包括但不限于钓鱼,黑客,网络诈骗,网站或空间中含有或涉嫌散播:病毒、木马、恶意代码,及通过虚拟服务器对其他网站、服务器进行涉嫌攻击行为如扫描、嗅探、ARP欺骗、DDoS等);
3.1.8.9. 不进行任何改变或试图改变摩杜云提供的系统配置或破坏系统安全的行为;
3.1.8.10.
不利用摩杜云提供的服务从事损害摩杜云、摩杜云的关联公司或摩杜巴巴集团内包括但不限于摩杜巴巴、淘宝、支付宝、摩杜妈妈、摩杜金融等(以下统称为摩杜巴巴公司)各公司、网站合法权益之行为,前述损害摩杜巴巴公司、网站合法权益的行为包括但不限于违反摩杜巴巴公司公布的任何服务协议/条款、管理规范、交易规则等规范内容、破坏或试图破坏摩杜巴巴公司公平交易环境或正常交易秩序等;
3.1.8.11. 不从事其他违法、违规或违反本服务以及摩杜云官网公布之相关管理规范及流程的行为。
3.1.9.
如摩杜云发现您违反上述条款的约定,有权根据情况采取相应的处理措施,包括但不限于立即删除相应信息、中止服务或终止服务等。如果第三方机构或个人对您提出质疑或投诉,摩杜云将通知您,您有责任在规定时间内进行说明并出具证明材料,如您未能提供相反证据或您逾期未能反馈的,摩杜云将采取包括但不限于立即删除相应信息、中止服务或终止服务等处理措施。因您未及时更新联系方式或联系方式不正确而致使未能联系到您的,亦视为您逾期未能反馈。
3.2. 摩杜云的权利、义务
3.2.1.
摩杜云向您提供您所订购的服务。摩杜云提供的服务须符合本服务条款的约定以及符合摩杜云通过摩杜云官网(www.moduyun.com)就服务标准作出的承诺(如服务等级协议(SLA))。
3.2.2.
您了解,摩杜云无法保证其所提供的服务毫无瑕疵(如摩杜云安全产品并不能保证您的硬件或软件的绝对安全),但摩杜云承诺不断提升服务质量及服务水平。所以您同意:如果摩杜云所提供的服务虽然存在瑕疵,但该等瑕疵是当时行业技术水平所无法避免的,其将不被视为摩杜云违约。您同意和摩杜云一同合作解决上述瑕疵问题。
3.2.3.
摩杜云仅负责操作系统以下的底层部分及摩杜云提供的软件的运营维护,例如:云服务器(即弹性计算服务,简称MCS)、云数据库(RDS)的相关技术架构及操作系统等。操作系统之上部分(如您在系统上安装的应用程序)由您自行负责。此外,您自行升级操作系统可能会造成宕机等不良影响,您应自行把握风险并谨慎操作负责。
3.2.4.
虽然摩杜云提供的服务可能配置具有日常数据备份功能的工具,但该等工具并非摩杜云所提供服务的组成部分,摩杜云将不对您能使用或不能使用备份工具负责。您应自行负责数据备份,并自行完成相应操作。摩杜云不对您自行进行的数据备份工作或结果承担任何责任。
3.2.5.
您理解并认可,摩杜云可能会根据服务的特性、您所购买的规格等,对您使用服务的方式、范围、功能等进行限制,您应认真阅读摩杜云关于服务的使用文档及相关说明,理解并遵守该等使用限制;您并进一步同意,如果您所使用的服务超过其购买的服务规格,摩杜云有权根据自己的判断,对您相关服务进行限制或暂停提供服务。
3.2.6.
您理解并认可,摩杜云将为您提供整体的安全防护服务(如“云盾安骑士服务”)以及管理与监控的相关功能及服务(如“云监控”)。同时您理解,尽管摩杜云对该等服务经过详细的测试,但并不能保证其与所有的软硬件系统完全兼容,亦不能保证其软件及服务完全没有错误。如果出现不兼容及软件错误的情况,您关闭或停止使用相关功能,或拨打技术支持电话将情况报告摩杜云,获得技术支持。
3.2.7. 服务期限内,摩杜云将为您提供如下客户服务:
3.2.7.1. 摩杜云为您提供7×24售后故障服务,并为您提供有效的联系方式并保证您能够联系到故障联系人,故障联系人在明确故障后及时进行反馈;
3.2.7.2. 摩杜云提供7×24小时的在线工单服务系统,解答您在使用中的问题。
3.2.8. 摩杜云将消除您非人为操作所出现的故障,但因您原因和/或不可抗力以及非摩杜云控制范围之内的事项除外。
3.2.9.
您理解并认可,摩杜云在必要时可能会将您的云服务器(MCS)进行机房迁移。摩杜云进行上述操作前将提前7个自然日通知您,由于进行上述操作可能需要修改您相关域名的DNS,因此您需在接到摩杜云通知后按照摩杜云要求的时间将DNS修改到摩杜云指定IP上,否则因此造成网站无法访问的,由您自行负责。
3.2.10.
在不披露您保密信息的前提下,在本服务条款有效期内,摩杜云可以就您使用摩杜云服务的情况作为使用范例或成功案例用于摩杜云自身及/或业务的宣传与推广,在这类宣传推广中,摩杜云并有权使用您的名称、企业标识;除此之外,未经您书面许可,摩杜云不得擅自使用您企业名称、企业标识、相关logo等。
3.2.11.
如本服务条款内容发生变动,摩杜云应通过提前30天在摩杜云官网的适当版面公告向您提示修改内容;如您不同意摩杜云所做的修改,您有权停止使用摩杜云的服务。此等情况下,您应通知摩杜云终止服务,并自行负责将业务数据迁出,摩杜云应与您进行服务费结算(如有)。如您继续使用摩杜云服务,则视为您接受摩杜云所做的相关修改。
4.用户数据
4.1.
摩杜云理解并认可,您利用摩杜云提供的服务,加工、存储、上传、下载、分发以及通过其他方式处理的您的业务数据,均为您或其他合法权利人所有,摩杜云除执行您的服务要求外,不进行任何未获授权的使用及披露,除非:
4.1.1. 根据法律的有关规定、行政或司法等机构的要求,向第三方或者行政、司法等机构披露;
4.1.2. 您和摩杜云另行协商一致的;
4.1.3.
为提供您所要求的软件或服务,而必须向第三方披露您的数据;但前述披露仅在为您提供服务的必要范围内,且摩杜云要求第三方承诺,第三方应仅为提供服务目的使用其获得的数据且按照不低于本服务条款的标准对其获得的数据承担保密义务。
4.2.
您理解并同意,为了云计算平台用户的整体安全,摩杜云建立了安全防护措施,为了执行该等防护措施并为您提供更好的客户体验,摩杜云将检测、浏览、记录您的服务使用行为以及您业务数据的不安全特征,但不包含对数据本身的记录及使用。
4.3.
除法定、主管部门要求及双方另行约定外,当服务期满或因任何原因导致服务期提前终止、以及甲方欠费服务停止后,摩杜云除在一定的期限内(通常不短于72个小时)继续存储用户的数据外,逾期将不再保留用户数据,用户需自行承担其数据被销毁后引发的一切后果。
5.知识产权
5.1.
您应保证提交摩杜云的素材、对摩杜云服务的使用及使用摩杜云服务所产生的成果未侵犯任何第三方的合法权益。如有第三方基于侵犯版权、侵犯第三人之权益或违反中国法律法规或其他适用的法律等原因而向摩杜云提起索赔、诉讼或可能向其提起诉讼,则您应赔偿摩杜云因此承担的费用或损失,并使摩杜云完全免责。
5.2.
如果第三方机构或个人对您使用摩杜云服务所涉及的相关素材的知识产权归属提出质疑或投诉,您有责任出具相关知识产权证明材料,并配合摩杜云相关投诉处理工作。
5.3.
您承认摩杜云向您提供的任何资料、技术或技术支持、软件、服务等的知识产权均属于摩杜云或第三方所有。除摩杜云或第三方明示同意外,您无权复制、传播、转让、许可或提供他人使用上述资源,否则应承担相应的责任。
6.保密条款
6.1.
本服务条款所称保密信息,是指一方(以下简称“接受方”)从对方(以下简称“披露方”)取得的、获知的、或因双方履行本服务条款而产生的商业秘密(包括财务秘密)、技术秘密、经营诀窍和(或)其他应予保密的信息和资料(包括但不限于产品资料,产品计划,价格,财务及营销规划,业务战略,客户信息,客户数据,研发,软件硬件,API应用数据接口,技术说明,设计,特殊公式,特殊算法等),无论上述信息和资料以何种形式或载于何种载体,无论披露方在披露时是否以口头、图像或书面等方式表明其具有保密性。
6.2.
双方应采取适当措施妥善保存对方提供的保密信息,措施的审慎程度不少于其保护自身的保密信息时的审慎程度。双方仅能将保密信息用于与本服务条款项下的有关用途或目的。
6.3. 双方保证保密信息仅可在各自一方从事该业务的负责人和雇员范围内知悉,并严格限制接触上述保密信息的员工遵守本条之保密义务。
6.4. 本条上述限制条款不适用于以下情况:
6.4.1. 在签署本服务条款之时或之前,该保密信息已以合法方式属接受方所有;
6.4.2. 保密信息在通知给接受方时,已经公开或能从公开领域获得;
6.4.3. 保密信息是接受方从与其没有保密或不透露义务的第三方获得的;
6.4.4. 在不违反本服务条款约定责任的前提下,该保密信息已经公开或能从公开领域获得;
6.4.5. 该保密信息是接受方或其关联或附属公司独立开发,而且未从通知方或其关联或附属公司获得的信息中获益;
6.4.6. 接受方应法院或其它法律、行政管理部门要求(通过口头提问、询问、要求资料或文件、传唤、民事或刑事调查或其他程序)因而透露保密信息;
6.4.7.
接受方为向行政管理部门、行业协会等申请某项业务资质、获得某项认定、或符合国家、行业标准/认证,需结合对方情况向前述机构提交材料或进行说明的,在该等情况下,披露方应秉持必要情况下最少披露原则及要求因此获知保密信息的机构按不低于本服务条款的标准予以保密。
6.5.
您和摩杜云都应尽最大的努力保护上述保密信息不被披露。一旦发现有上述保密信息泄露事件,双方应合作采取一切合理措施避免或者减轻损害后果的产生。如因此给对方造成损失的,应赔偿因此给对方造成的直接经济损失。
6.6. 本保密条款不因本服务的终止而失效。
7.服务的开通、变更与终止
7.1. 您可通过您的摩杜云帐号或通过API方式开通、使用服务:
7.1.1. 以包年、包月或资源包(套餐包)形式售卖的服务,您付费后服务即开通,开通后您获得摩杜云向您发送的登录、使用服务的密钥、口令即可使用服务;
(1)以包年、包月形式售卖的服务,摩杜云将按照您订购的期限向您提供服务,服务期限自开通之时起算(而非自您获得登录、使用服务的密钥、口令时起算),至订购的期限届满为止;
(2)以资源包(套餐包)形式售卖的服务,您应在服务期限内将资源包的服务数量使用完毕,如资源包的服务期限届满,您已订购但未使用完毕的服务将被作废且摩杜云将不提供其他替代或补充,
资源包的服务期限自开通之日起起算(而非自您获得登录、使用服务的密钥、口令时起算);您对于服务的使用将优先消耗订购的资源包,除法定及双方另行约定外,如资源包中的各项服务使用完毕或者服务期限到期,且您未继续订购资源包服务的,摩杜云将视为您使用摩杜云以按量形式售卖的该服务(如有),且摩杜云将持续计费并根据计费结果予以扣划服务费用。
7.1.2.
以按量付费形式售卖的服务,您开通服务即可使用摩杜云的服务。除非根据本服务条款之其他约定或您未支付上一计费周期的服务费用,您可持续使用摩杜云提供的服务。
7.2.
您理解并认可,摩杜云将不断改进服务质量、提升服务水平以不断提升客户体验,为此,摩杜云将在尽最大努力事先通知您的情况下,变更所提供服务的形式、规格及服务的其他性质。
7.3. 发生下列情形,服务期限提前终止:
7.3.1. 双方协商一致提前终止的;
7.3.2.
您严重违反本服务条款(包括但不限于(1)您未按照约定履行付款义务,及/或(2)您严重违反法律规定,及/或(3)您严重违反本服务第3条的承诺等),乙方有权提前终止服务;
7.3.3.
您理解并充分认可,虽然摩杜云已经建立(并将根据技术的发展不断完善)必要的技术措施来防御包括计算机病毒、网络入侵和攻击破坏(包括但不限于DDoS)等危害网络安全事项或行为(以下统称该等行为),但鉴于网络安全技术的局限性、相对性以及该等行为的不可预见性,因此如因您网站遭遇该等行为而给摩杜云或者摩杜云的其他网络或服务器(包括但不限于本地及外地和国际的网络、服务器等)带来危害,或影响摩杜云与国际互联网或者摩杜云与特定网络、服务器及摩杜云内部的通畅联系,摩杜云可决定暂停或终止服务。如果终止服务的,将按照实际提供服务月份计算(不足一个月的按天计)服务费用,将剩余款项(如有)返还;
7.3.4.
您认可并同意,为技术升级、服务体系调整或经营策略调整等需要,摩杜云可提前30天在www.moduyun.com上通告或给您发网站内通知或邮件通知的方式,决定暂时或永远终止向你提供服务(或服务中的相应功能);届时摩杜云应将您已支付但未消费的款项退还给您。
8.违约责任
8.1. 本服务条款任何一方违约均须依法承担违约责任。
8.2. 您理解,鉴于计算机、互联网的特殊性,下述情况不属于摩杜云违约:
8.2.1. 摩杜云在进行服务器配置、维护时,需要短时间中断服务;
8.2.2. 由于Internet上的通路阻塞造成您网站访问速度下降。
8.3. 如因摩杜云原因,造成您连续72小时不能正常使用服务的,您可以终止服务,但非摩杜云控制之内的原因引起的除外。
8.4.
在任何情况下,摩杜云均不对任何间接性、后果性、惩戒性、偶然性、特殊性的损害,包括您使用摩杜云服务而遭受的利润损失承担责任(即使您已被告知该等损失的可能性)。
8.5. 在任何情况下,摩杜云对本服务条款所承担的违约赔偿责任总额不超过违约服务对应之服务费总额。
9.责任的限制及免除
您应理解并同意,摩杜云在对服务进行公测、邀测等您免费试用服务期间,
虽然摩杜云会对服务可用性和可靠性支撑,但摩杜云将不对任何服务可用性、可靠性做出承诺。摩杜云亦不对您使用或不能使用摩杜云服务的工作或结果承担任何责任。
10.不可抗力和意外事件
10.1. 因不可抗力或者其他意外事件,使得本服务条款的履行不可能、不必要或者无意义的,遭受不可抗力、意外事件的一方不承担责任。
10.2.
不可抗力、意外事件是指不能预见、不能克服并不能避免且对一方或双方当事人造成重大影响的客观事件,包括但不限于自然灾害如洪水、地震、瘟疫流行等以及社会事件如战争、动乱、政府行为、电信主干线路中断、黑客、网路堵塞、电信部门技术调整和政府管制等。
11.法律适用及争议解决
11.1. 本服务条款受中华人民共和国法律管辖。
11.2. 在执行本服务条款过程中如发生纠纷,双方应及时协商解决。协商不成时,任何一方可直接向被告所在地人民法院提起诉讼。
12.附则
12.1.
摩杜云在www.moduyun.com相关页面上的服务说明、价格说明和您确认同意的订购页面是本服务条款不可分割的一部分。如果www.moduyun.com相关页面上的服务说明、价格说明和您确认同意的订购页面与本服务条款有不一致之处,以本服务条款为准。
12.2.
摩杜云有权以提前30天在www.moduyun.com上公布、或给您发网站内通知或书面通知的方式将本服务条款的权利义务全部或者部分转移给摩杜云的关联公司。
12.3.
如果任何条款在性质上或其他方面理应地在此协议终止时继续存在,那么应视为继续存在的条款,这些条款包括但不局限于保证条款、保密条款、知识产权条款、法律适用及争议解决条款。
您在使用视频直播产品时,如果收到系统提示的错误信息, 可查阅视频直播错误代码汇总匹配错误信息。对于其他问题,您可根据下列分类匹配问题场景和解决方案。
说明 本页面列举的文档较多,您可以通过搜索框搜索相关文档或者在本页面按Ctrl+F搜索关键字。
视频直播服务支持哪些推流协议?
视频直播服务支持哪些直播流播放协议?
常见的推流包括哪几种来源?
视频直播支持的分辨率和对应合适的码率
如何通过代码生成推流地址和播放地址?
购买中国内地视频直播服务的实名登记
直播域名解析CNAME后无法正常访问
边缘推流和直播中心有什么关系?
如何选择直播中心?
如何选择域名的CDN加速区域?
直播推流异常排查
iOS推流横屏方案建议
切换加速区域的影响是什么?
直播播流相关问题
控制台无法观看直播流和录制文件
直播无法观看或播流404问题排查
直播RTMP和FLV播放正常而HLS播放失败
Flash播放器无法拖拽
播放器播放m3u8提示跨域错误
使用播放器播放时画面花屏
视频画面存在黑边间隙
直播出现音视频不同步
视频直播出现卡顿现象
直播禁止推流功能相关问题
视频直播鉴权功能相关问题
如何保护直播版权,防止非授权用户访问?
视频直播鉴权常见问题
转码出的文件与转码模板的宽高参数相反
无法使用HTTPS访问问题排查
说明 以下文档包含的第三方产品信息,仅供参考。 摩杜云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
第三方推流工具常见问题
OBS推流工具
VLC播放器
本文档主要介绍直播录制的工作原理及其API提供的功能。
1.1 直播录制的原理
直播录制的过程,是通过拉取您推上来的直播流,将音视频封装成单独的一个个媒体切片(封装格式为TS),然后存入您指定的MOS
bucket。直播录制在工作时遵循以下原则:
直播录制只修改音视频的封装格式(RTMP/FLV转成TS),绝不修改音视频内容(即编码层内容)。举个例子,如果您推上来的直播流是花屏的,那录制下来的也是花屏的。
直播录制有权限往用户bucket写入录制文件,但是不会也没有权限修改/删除用户bucket的任务文件(包括已写入的录制文件)。用户bucket中的录制文件,完全由您自己管理。
1.2 录制文件的封装格式
直播录制支持将直播流录制成以下封装格式的视频文件:
TS/M3U8
MP4
FLV
但是不管是哪种封装格式,直播录制都会先将直播流切片成一个个的TS切片,
然后再合成对应封装格式的录制文件。稍有区别的是,对于M3U8来说,直播录制会将TS和
M3U8都写入用户的bucket(因为M3U8只是HLS协议中的索引文件,音视频数据仍然在TS中);而对于MP4和FLV,用户bucket中只会有合成后的MP4和FLV切片。
1.3 限制条件
1.3.1 MOS写入权限
正常情况下,开通直播服务时,您已自动授权“允许直播服务写入用户MOS”,
因此直播录制写入您指定的bucket时不存在权限问题。如果该权限意外被删除,您可以重新配置:
通过控制台配置:您需要授权视频直播可将视频内容写入MOS产品的权限,
授权后才能将视频存储至指定的MOS bucket中。详情参见 配置MOS。
通过RAM进行权限配置:详情参见 创建RAM用户并授权。
1.3.2 音视频编码格式
由于直播录制需要先将直播流切分成TS文件,因此您推上来的直播流的音视频编码格式必须满足TS封装格式的要求。根据FLV标准和ISO/IEC
13818-1标准,直播录制目前仅支持以下编码格式:
视频:H264、HEVC、MPEG4
音频:AAC、MP3
说明 如果直播流包含了非以上格式编码的音视频,直播录制可能会出现:无法生成录制文件、录制黑屏、录制没有声音,以及其他一些无法预见的异常情况。
1.3.3 异常的直播流
对于正常的直播流(没有不支持的编码格式、帧率稳定、时间戳单调线性增长),
直播录制均能正常生成录制文件。当然,对于偶尔帧率不稳定,时间戳跳变的流,
直播录制也能做出一定的兼容,保证录制文件的正常生成。但是如果推上来的直播流存在严重异常
(长时间没有视频帧,时间戳增长没有规律,音视频头缺失等等),直播录制可能无法保证正常生成录制文件。
您如果对此存在疑问,可通过客服咨询。
自动录制
一旦推流就启动录制,一旦断流就停止录制。您可选择对某个域名下所有流、某个appname下所有流、或者单独某条流开启自动录制。详细用法参见:
自动录制。
按需录制
在自动录制的基础上,您可以动态决定具体某条流是否需要录制。详细用法参见:
按需录制。
手动录制
如果不希望自动录制,您也可以选择通过调用接口触发直播录制的启动与停止。详细用法参见:
手动录制。
录制内容检索与管理
直播录制每生成一个录制文件,都可以提供回调,方便您实现一些自定义的逻辑。另外,已经录制下来的内容,我们也提供检索与管理的功能。详细用法参见:
录制内容检索与管理。
本文介绍自动录制的适用场景、使用限制、使用流程、实践示例和注意事项。
只要有推流就录制。同一条直播流推上来后,要么录制,要么不录制。
事先指定录制的时间段,如果该时间段内有推流,就启动录制。
如果不指定录制周期,录制文件会在每6小时自动生成一个录制文件。
1.配置自动录制规则
2.推流
涉及到的API包括:
API名称 | 说明 |
---|---|
AddLiveAppRecordConfig | 配置自动录制规则 |
DeleteLiveAppRecordConfig | 如果不再需要某项规则,可以通过该接口删除。 |
DescribeLiveRecordConfig | 查询所有配置的规则 |
指定某个appname下所有流自动录制
下例是最简单的用法,指定域名为test.com,
appname为test123下的所有直播流自动录制,录制格式为M3U8,单个录制文件周期默认为1小时,录制到mos-cn-shanghai.moduyuncs.com名为test123的bucket中:
1.调用AddLiveAppRecordConfig接口,参数如下:
/?AppName=test123
&DomainName=test.com
&MosBucket=test123
&MosEndpoint=mos-cn-shanghai.moduyuncs.com
&RecordFormat.1.Format=m3u8
&< 公共请求参数>
2.推流
同时录制M3U8和MP4
在上例的基础上,下例设置同时录制M3U8和MP4两种格式,同时设置MP4的切片周期为半小时:
1.调用AddLiveAppRecordConfig接口,参数如下:
/?AppName=live
&DomainName=test.com
&MosBucket=test123
&MosEndpoint=mos-cn-shanghai.moduyuncs.com
&RecordFormat.1.Format=m3u8
&RecordFormat.2.Format=mp4
&RecordFormat.2.CycleDuration=1800
&< 公共请求参数>
2.推流
限定自动录制的时间段
说明 限制条件:该功能仅针对流级别的配置生效(即配置中StreamName字段不为空才生效)。
在上例的基础上,下例限定自动录制的时间段为UTC时间 (北京时间-8)2019-02-15 09:00:00到2019-02-15 21:00:00。
1.调用AddLiveAppRecordConfig接口,参数如下:
/?AppName=live
&DomainName=test.com
&StreamName=teststream
&MosBucket=test123
&MosEndpoint=mos-cn-shanghai.moduyuncs.com
&RecordFormat.1.Format=m3u8
&RecordFormat.2.Format=mp4
&RecordFormat.2.CycleDuration=1800
&StartTime=2019-02-15T01:00:00Z
&EndTime=2019-02-15T13:00:00Z
&< 公共请求参数>
2.推流
修改配置后,新配置对修改之前的直播流不生效,必须重新推流才能生效。
如果指定了时间段,在该时间段内如果没有推流,自然不会录制。限定时间段的配置规则是一次性的,即当指定的时间段过去之后,该规则不会再触发。需要注意的是,StartTime和EndTime字段填的是UTC时间,请注意和本地时区的对应。
AddLiveAppRecordConfig接口中的AppName和StreamName可以填为*,表示所有AppName和所有StreamName(即不限制AppName或StreamName)。
可以通过AddLiveAppRecordConfig配置多条规则,规则匹配时存在优先级:
同时指定DomainName、AppName(不为*)、StreamName(不为*)的优先级最高。
同时指定DomainName、AppName(不为*)的优先级次之。
单独指定DomainName,AppName为*(即只限定域名)的优先级最低。
如果想知道自动录制是否生效,或者希望针对每个录制文件做实时处理,可以设置录制回调,详见:
录制内容检索与管理。
自动录制每隔一定周期(周期时间通过RecordFormat.N.CycleDuration字段配置)会产生一个录制文件。如果在一个录制周期内,直播流发生了断流,但是在3分钟内,该直播流又推上来了,那么仍会在同一个录制文件中继续录制。这就意味着,一条直播流必须断流超过3分钟,才会生成最后一个录制文件。如果您希望修改这个默认的3分钟断流时间,可以联系摩杜云客服在后台修改。
本文介绍按需录制的适用场景、使用流程、实践示例和注意事项。
在自动录制的场景下,根据事先设定的配置,一条直播流要么录制,要么不录制,不可以动态修改录制行为。如果您想动态地控制录制的行为,可以使用按需录制的功能。
按需录制的原理是当直播流推流上来之后,直播录制服务会发送一条HTTP回调给您事先设定的后台服务,通过该回调的返回内容决定是否录制这条直播流,并且可以动态的修改录制格式和录制周期。
系统交互如下图所示:
在这里,您需要开发上图中的APP业务服务,接收HTTP回调,并根据您自身的业务逻辑决定是否录制。
1.和自动录制一样,调用AddLiveAppRecordConfig接口。其中OnDemand字段填1,表示通过HTTP回调开启按需录制。
2.调用AddLiveRecordNotifyConfig接口,设置OnDemandUrl字段。
3.推流
4.APP业务服务接收到该推流的按需录制回调,根据自身业务决定是否录制,返回内容。
5.直播录制服务根据按需录制回调返回的结果,启动录制或不启动录制。
涉及到的API包括:
API名称 | 说明 |
---|---|
AddLiveAppRecordConfig | 配置自动录制规则。 |
DeleteLiveAppRecordConfig | 如果不再需要某项规则,可以通过该接口删除。 |
DescribeLiveRecordConfig | 查询所有配置的规则。 |
AddLiveRecordNotifyConfig | 配置某个域名下的录制回调,包括事件回调和按需录制回调。 |
DeleteLiveRecordNotifyConfig | 如果不再需要某个域名的录制回调,可以通过该接口删除。 |
DescribeLiveRecordNotifyConfig | 查询某个域名的录制回调。 |
UpdateLiveRecordNotifyConfig | 更新某个域名的录制回调。 |
按需录制回调 | 按需录制回调给您的HTTP消息定义。 |
1.调用AddLiveAppRecordConfig接口,配置指定域名为test.com,appname为test123下的所有直播流自动录制:
/?AppName=test123
&DomainName=test.com
&MosBucket=test123
&MosEndpoint=mos-cn-shanghai.moduyuncs.com
&RecordFormat.1.Format=m3u8
&< 公共请求参数>
2.调用AddLiveRecordNotifyConfig接口,设置OnDemandUrl字段为http://cb.test.com:
/?DomainName=test.com
&OnDemandUrl=http://cb.test.com
&< 公共请求参数>
3.推流
4.APP业务服务接收到的按需录制回调为:(详见按需录制回调)
GET /?app=test123&domain=test.com&stream=teststream&vbitrate=2000&codec=h264 HTTP/1.1
Host: live.abc.com
User-Agent: Go-http-client/1.1
5.根据回调返回的结果:(详见按需录制回调)
如果收到以下结果,则进行录制:
{
"ApiVersion" : "1.0",
"NeedRecord" : true
}
如果收到以下结果,则不录制:
{
"ApiVersion" : "1.0",
"NeedRecord" : false
}
如果没有设置OnDemandUrl,就不会有按需录制回调,默认行为是不录制。
本文介绍手动录制的适用场景、使用限制、使用流程、实践示例和注意事项。
您也可以事先配置录制配置,但是设置默认行为是不录制(设置ondemand=7),直接通过手动录制的接口启动某条直播流的录制。
如果某条直播流正在录制(可能是自动录制,也可能是手动录制启动的),您也可以通过手动录制的接口停止该直播流的录制。
1.调用AddLiveAppRecordConfig接口配置录制规则。设置ondemand=7,表示推流后不自动录制。
2.推流
3.调用RealTimeRecordCommand接口启动录制。
4.(如果需要)调用RealTimeRecordCommand接口停止录制。
涉及到的API包括:
API名称 | 说明 |
---|---|
AddLiveAppRecordConfig | 配置自动录制规则。 |
DeleteLiveAppRecordConfig | 如果不再需要某项规则,可以通过该接口删除。 |
DescribeLiveRecordConfig | 查询所有配置的规则。 |
RealTimeRecordCommand | 实时录制命令,可控制手动启动录制和手动停止录制。 |
手动启动录制
如果直播流test.com/live/teststream正在推流,可以按以下方式调用RealTimeRecordCommand接口启动录制:
/?AppName=live
&DomainName=test.com
&StreamName=teststream
&Command=start
&< 公共请求参数>
手动停止录制
如果直播流test.com/live/teststream正在录制,可以按以下方式调用RealTimeRecordCommand接口停止录制:
/?AppName=live
&DomainName=test.com
&StreamName=teststream
&Command=stop
&< 公共请求参数>
如果直播流不存在(没有推流),调用RealTimeRecordCommand接口手动启动录制会返回失败。
手动启动录制的直播流如果发生了断流,就会停止录制,并且重新推流后不会自动启动录制(如果没有配置自动录制)。
本文介绍录制内容检索的适用场景、使用流程、实践示例和注意事项。
对于录制下来的文件,您可以:
设置回调,每当一个录制文件生成,都能收到一个HTTP请求,便于您做一些业务上的实时处理。
查询已录制的内容,可按时间轴展示录制内容覆盖的时间区间。
将已录制的TS片段按时间段生成一个M3U8索引(写入您指定的Bucket,可以直接播放)。
直接调用相应接口。涉及到的API包括:
API名称 | 说明 |
---|---|
AddLiveRecordNotifyConfig | 配置某个域名下的录制回调,包括事件回调和按需录制回调。 |
DeleteLiveRecordNotifyConfig | 如果不再需要某个域名的录制回调,可以通过该接口删除。 |
DescribeLiveRecordNotifyConfig | 查询某个域名的录制回调 |
UpdateLiveRecordNotifyConfig | 更新某个域名的录制回调 |
录制事件回调 | 录制事件回调给您的HTTP消息定义 |
DescribeLiveStreamRecordContent | 查询录制内容包含的时间段 |
CreateLiveStreamRecordIndexFiles | 根据时间段创建录制索引 |
DescribeLiveStreamRecordIndexFiles | 根据时间段查询录制索引 |
DescribeLiveStreamRecordIndexFile | 查询某个录制索引的信息 |
回调录制文件生成事件
调用AddLiveRecordNotifyConfig接口,设置域名
test.com下直播录制文件生成事件都回调到http://cb.test.com这个地址:
/?DomainName=test.com
&NotifyUrl=http://cb.test.com
&< 公共请求参数>
设置之后,如果一条直播流test.com/live/teststream生成录制文件(TS/MP4/FLV),您就会收到以下内容的回调:
POST / HTTP/1.1
Host: live.abc.com
User-Agent: Go-http-client/1.1
{
"domain": "test.com",
"app": "live",
"stream": "teststream",
"uri": "live/teststream/0_2017-03-08-23:09:46_2017-03-08-23:10:40.flv",
"duration": 69.403,
"start_time": 1488985786,
"stop_time": 1488985840
}
查询录制内容覆盖的时间段
假设您希望查找这条直播流 test.com/live/teststream在 2019-02-15 09:00:00到
2019-02-15 21:00:00之间的录制内容,可按如下方式调用DescribeLiveStreamRecordContent接口:
/?AppName=live
&DomainName=test.com
&StreamName=teststream
&StartTime=2019-02-15T01:00:00Z
&EndTime=2019-02-15T13:00:00Z
&< 公共请求参数>
生成某个时间段的M3U8索引
假设您已录制了 2019-02-15 09:00:00到 2019-02-15 21:00:00的内容,但是想将10点到11点
的内容单独生成一段M3U8录制索引,那么您可以按如下方式调用CreateLiveStreamRecordIndexFiles接口:
/?AppName=live
&DomainName=test.com
&StreamName=teststream
&StartTime=2019-02-15T02:00:00Z
&EndTime=2019-02-15T03:00:00Z
&< 公共请求参数>
生成的M3U8文件将会上传到您指定的MOS Bucket中(保存路径可通过AddLiveAppRecordConfig接口修改)。
以上接口中的StartTime和EndTime字段填的均是UTC时间,请注意和本地时区的对应。
录制文件检索信息在视频直播系统中只保存6个月(过期会删除检索信息,但是不会删除用户录制文件)。
ts分片信息在视频直播系统中只保存3个月,创建手动m3u8文件只能选择最近3个月的录制内容(过期会删除ts检索信息,但是不会删除用户录制ts文件)。
示例:https://localhost:8080/api/domainName/createUrl
方式: GET
生成推拉流地址
参数:
参数名称 | 是否必填 | 示例值 | 说明 |
---|---|---|---|
pushDomainName | 是 | test.edge.moduyun.com | 推流域名 |
pullDomainName | 是 | test.video.moduyun.com | 拉流域名 |
pushKey | 是 | dGVzdC5lZGdlLm1vZHV5dW4uY29t | 推流密钥 |
pullKey | 是 | dGVzdC52aWRlby5tb2R1eXVuLmNvbQ== | 拉流密钥 |
appName | 是 | moduyun-test | 应用名称 |
streamName | 是 | moduyun | 直播流名称 |
templateId | 否 | 1 | 模板ID |
timestamp | 是 | 36000 | 生成链接失效时间,单位(秒) |
返回:
{
"code": 200,
"message": "地址生成成功",
"data": {
"pushFlowUrl": "rtmp://test.edge.moduyun.com/moduyun-test/moduyun?auth_key=1628499756-0-0-fcc48f7704288e803ba8c50c8d9327a5",
"pullFlowUrl": "rtmp://test.video.moduyun.com/moduyun-test/moduyun?auth_key=1628499756-0-0-8f46076b59ad287e1b35fb88bc272dd2",
"flvFlowUrl": "http://test.video.moduyun.com/moduyun-test/moduyun.flv?auth_key=1628499756-0-0-ab9001bdfcc72844459edc28ac67e864",
"m3u8FlowUrl": "http://test.video.moduyun.com/moduyun-test/moduyun.m3u8?auth_key=1628499756-0-0-5d998e0b45d17b449b374c76a655ee84",
"udpFlowUrl": "artc://test.video.moduyun.com/moduyun-test/moduyun?auth_key=1628499756-0-0-8f46076b59ad287e1b35fb88bc272dd2"
}
}
SDK | DEMO | 描述 |
---|---|---|
Java SDK | Java SDK DEMO | 生成直播推流地址SDK |
版权所有 © 广州摩杜云信息科技有限公司 2021 保留一切权利 联系地址:广州市荔湾区黄沙大道粤南大街26-29号 在线联系:4008-521-721按1