阿里开发者

视频分发太繁琐?学会这个10分钟搞定(附留言活动)

前言

互联网不仅改变了信息的形式,也改变了我们获得信息的方式。十几年前,多媒体概念也在互联网的加持下诞生。从含义上讲,多媒体不仅包括文本、声音和图像等多种媒体形式,同时承载了更多的信息互动功能。

云计算为媒体行业赋能

近年来,由于5G技术的快速发展,移动网络不断提速,运营商流量资费也随之下调,同时,影视、会议、直播等行业使得高清内容数量快速增加,内容质量持续提升,内容类型不断丰富,再加上AIGC热潮持续升温,使得多媒体技术以及整个行业进入一个快速发展的阶段。据IDC报告显示,2022年,全球每秒产生3.4PB数据,预计到2027年,这个规模将扩大到9.2PB每秒,企业级数据占总数据的比例将增长至76%,其中媒体、专业服务、零售、金融为主要分布领域。

多媒体数据的产生和运营流程主要包括:采集→传播→用户浏览→内容反馈/互动→运营优化等。其中,采集、传播流程会涉及到视频存储与分发,如社交媒体平台、在线视频媒体平台通常有大量UGC、PGC上传的短视频需要存储,数据每天都在增长,且增速很快,单体客户存储量在数PB到数EB级别。存储设备作为源站进行数据分发,需要提供大吞吐能力的支撑,单个客户需要的吞吐能力,在Gbps到Tbps级别。此外,由于终端用户分散,在跨洋、跨省的上传和下载场景下,需要为终端用户提供迅捷的数据访问体验。

云计算的出现及其快速创新的能力已经基本消除了时间、距离和存储空间的障碍,为全球多媒体行业创造了无限可能性。 不管是多媒体企业,还是在实际中会应用到多媒体数据的企业,都无需兴建专门的基础设施或投入大量资本,即可建立高效的数据支撑系统,并无需考虑扩容的问题。基于云的视频流媒体解决方案使用量的日益增长也在帮助市场成长,凭借先进的数据存储、内容访问和网络分发等功能,云可提供快速访问、流畅处理以及低时延和高并发视频直播、远程协作、多媒体管理等解决方案。

多媒体数据存储与分发方案

在这样的背景下,阿里云推出多媒体数据存储与分发解决方案,该方案融合对象存储OSS、内容分发CDN 、智能媒体管理IMM等产品能力,解决客户多媒体数据存储、处理、加速、分发等业务问题,进而实现低成本、高稳定性的业务目标。

对象存储OSS传输加速是专为云存储互联网上传、下载加速而设计的,通过智能调度的系统、优化的传输链路、调优的协议栈与传输算法,并深度结合OSS服务端的配套策略,提供端到端的加速方案。OSS利用全球分布的云机房,将全球各地用户对客户存储空间的访问,经过智能路由解析至就近的接入点,使用优化后的网络及协议,来访问客户的存储空间。

阿里云CDN产品将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。

阿里云智能媒体管理IMM,提供针对媒体数据的高级、智能管理服务。具有与平台无关的RESTful API接口,为阿里云上的非结构化存储数据(如对象存储OSS中的视频、图片、文档等数据)提供快捷的数据处理通道,比如格式转换,图片、视频的编辑处理,以及人工智能的价值数据提取和检索(例如,标签识别、人脸分组)。

方案优势包括:

  • 更好的弹性:资源弹性扩展,提供大容量和高带宽吞吐的能力,满足客户业务快速增长需求。
  • 更好的访问体验:就近数据上传下载,配合阿里云各种网络加速等能力,提升客户访问体验。
  • 更好的数据可靠性和可用性:同城冗余多中心,为客户提供更高的可靠性和可用性SLA。

方案详情:https://www.aliyun.com/solution/tech-solution/mdsad

一键部署

一键部署基于阿里云资源编排服务ROS(Resource Orchestration Service)实现,ROS模板已定义好脚本。

操作步骤

1. 一键部署资源。

  1. 单击一键部署,并选择地域。
  2. 在配置模板参数页面修改资源栈名称,配置OSS Bucket和Domain,然后单击创建开始一键配置。
  3. 当资源栈信息页面的状态显示为创建成功时表示一键配置完成。

2. 开启CDN缓存自动刷新。

在OSS管理控制台的域名管理页签,打开目标域名右侧的CDN缓存自动刷新开关,(在全屏模式下)选择所有支持的操作,然后单击确定。

Image

3. 绑定IMM项目。

  1. 登录OSS管理控制台。
  2. 在左侧导航栏,单击Bucket列表,然后单击创建的examplebucket。
  3. 在左侧导航栏,选择数据处理。
  4. 单击媒体处理,然后在弹出绑定页面单击Bucket绑定IMM project按钮。
  5. 在绑定智能媒体项目对话框的IMM配置区域,选择创建新的Project,输入Project的名称,然后单击确定。

4. 配置证书加密访问(可选)

如果您需要实现全网数据加密传输,您可以上传自定义证书或将已经托管在阿里云SSL证书服务的证书部署至CDN平台,从而启用HTTPS加速服务。本教程以托管在阿里云SSL证书服务的证书为例。在执行以下步骤前,您需要购买SSL证书,详情请参见购买SSL证书。

  1. 登录CDN控制台。
  2. 在左侧导航栏,单击域名管理。
  3. 在域名管理页面,单击目标域名操作列的管理。
  4. 在指定域名的左侧导航栏,单击HTTPS配置。
  5. 在HTTPS证书区域,单击修改配置。
  6. 在HTTPS设置对话框,打开HTTPS安全加速开关。

    当您打开HTTPS安全加速开关时,系统弹出确认开启HTTPS界面,该操作单独计费,您可以根据所需选择是否开启。HTTPS计费标准请参考HTTPS请求数/动态HTTP请求数。

  7. 配置证书相关参数。

项目

说明

示例值

证书来源

证书来源包含以下两种,两种证书之间可以相互切换。

  • 云盾(SSL)证书中心
    • 自定义上传(证书+私钥)

云盾(SSL)证书中心

证书名称

选择证书的名称。

cert-9687672

  1. 单击确定,完成配置。

Image

验证及清理

方案验证

完成了多媒体数据加速分发配置后,您可以通过加速域名访问OSS上的多媒体资源。

  1. 向OSS上传视频。
  1. 登录OSS管理控制台。
  2. 在顶部菜单栏,选择华东1(杭州)地域。
  3. 单击Bucket列表,然后单击目标Bucket名称。
  4. 在左侧导航栏,选择文件管理 > 文件列表。
  5. 在文件列表页面,单击上传文件,根据页面提示上传srcexample.mp4。

  1. 通过CDN加速域名访问通过IMM转码后的视频。

  1. 通过IMM对上传的视频进行转码,并生成视频链接。

# -*- coding: utf-8 -*-import base64import oss2from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())# 填写自定义域名,例如example.com。cname = 'http://example.com'# 指定Bucket名称,例如examplebucket。bucket_name = 'examplebucket'# 指定原视频文件名称。source_key = 'srcexample.mp4'# 指定处理后视频文件名称。target_key = 'destexample.mp4'# 填写Bucket名称,并设置is_cname=True来开启CNAME。CNAME是指将自定义域名绑定到存储空间。bucket = oss2.Bucket(auth, cname, bucket_name, is_cname=True) # 对srcexample.mp4进行视频转码。转码输出媒体文件容器为mp4,视频流格式为H.265,example,帧率为30 fps,视频码率为2 Mbps,音频编码格式为aac,音频码率为100 Kbps,并禁用字幕流。style = 'video/convert,f_mp4,vcodec_h265,s_640x480,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1'process = "{0}|sys/saveas,o_{1},b_{2}".format(style, oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_key))).replace('=', ''), oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(bucket.bucket_name))).replace('=', ''))# 调用异步流媒体处理接口。result = bucket.async_process_object(source_key, process)# 设置签名URL的有效期,单位为秒。expires = 3600# 生成签名URL。signed_url = bucket.sign_url('GET', target_key, expires)# 打印签名URL。print(signed_url)

生成的转码后的视频链接示例如下: