开启听视频功能后,CDN节点会将视频文件中的音频分离,并返回给客户端,实现听视频的同时降低带宽的使用,有效节省流量。通过本文您可以了解开启音视频分离的操作方法。
背景信息
当客户端请求访问视频文件时,向服务器端发送URL请求,例如:http://www.aliyun.com/test.flv?ali_audio_only=1,CDN服务器端仅向客户端发送纯音频数据。客户端必须支持Transfer-Encoding:chunked传输方式。
听视频功能不支持Range请求,但是播放视频时许多客户端都会发起Range请求(包括但不限于Safari、iOS设备上的浏览器),建议您使用自研的客户端对接该功能。
听视频过程中如果需要拖动进度条播放,需同时配置拖拽功能。进行拖拽时,会先读取原音视频文件的meta信息获取播放时长,将播放时长作为播放进度来实现播放进度的拖拽具体操作。更多信息,请参见配置拖拽播放。
目前听视频功能不支持 MP4 Box Header Size 等于 16 的场景(64 位),仅支持 MP4 Box Header Size 等于 8 的场景。关于 Header Size 的详细说明和查看方法,请参见下方 MP4 Box Header Size 说明。
操作步骤
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击视频相关。
在听视频区域,打开听视频开关。
开启听视频功能后,需要配合请求参数
ali_audio_only使用。支持的文件格式如下表所示。文件格式
meta信息
ali_audio_only参数
举例
MP4
源站视频的meta信息必须在文件头部,不支持meta信息在尾部的视频。
ali_audio_only参数表示该请求为音视频分离请求,服务端只返回meta信息和音频信息,视频信息会被过滤掉。如果不带该参数或参数值非1,则该功能失效。请求
http://domain/video.mp4?ali_audio_only=1。FLV
无要求。
ali_audio_only参数表示该请求为音视频分离请求,服务端只返回meta信息和音频信息,视频信息会被过滤掉。如果不带该参数或参数值非1,则该功能失效。请求
http://domain/video.flv?ali_audio_only=1。
MP4 Box Header Size 说明
如果 MP4 文件在使用听视频功能时无法正常提取音频,可能是文件的 mdat Box 使用了扩展 Header(16 字节),不符合当前听视频功能的要求。
此限制主要针对 mdat Box(存储实际音视频数据的容器)。moov 等其他 Box 通常默认使用 8 字节 Header,不受此限制影响。
通过本节可以了解 Header Size 的概念,并检查文件是否兼容。
什么是 MP4 Box Header Size
MP4 文件由多个 Box(容器单元)组成,例如 moov box、mdat box 等。每个 Box 包含一个 Header,用于描述该 Box 的大小和类型。Header 有以下两种规格:
规格 | Header 大小 | 说明 |
标准 Header | 8 字节(32 位) | 包含 size(4 字节)和 box type(4 字节)。size 字段直接存储 Box 的实际大小。适用于 Box 数据量可用 4 字节表示的场景。 |
扩展 Header | 16 字节(64 位) | 包含 size(4 字节,固定值为 1)、box type(4 字节)和 largesize(8 字节)。当 size 值为 1 时,表示启用 largesize 机制,真实大小存储在 largesize 字段中。常见于 mdat Box 数据量较大的场景。 |
查看 MP4 文件的 Box Header Size
可以使用以下工具查看 MP4 文件的 Box Header Size。
方式一:使用 MP4Box.js 在线工具(推荐)
上传 MP4 文件。
在左侧 Box View 的 Tree View 中,单击 mdat (MediaDataBox)。
在右侧 Box Property View 中查看
original_size字段,判断 Header Size:original_size显示为 1:mdat Box Header Size 为 16 字节,不支持听视频功能。original_size不显示或不为 1:mdat Box Header Size 为 8 字节,支持听视频功能。
以下为两种情况的属性对比:
属性字段 | Header Size = 8 字节(支持) | Header Size = 16 字节(不支持) |
size | 实际大小数值 | 实际大小数值 |
box_name | MediaDataBox | MediaDataBox |
start | 偏移字节数 | 偏移字节数 |
original_size | 不显示 | 显示为 1 |
方式二:使用 Bento4 命令行工具
运行以下命令:
./mp4dump 文件名.mp4 | grep -E "\[mdat\]|\[moov\]"根据输出结果判断:
[mdat] size=8+xxxxxx:Header Size 为 8 字节,支持听视频功能。[mdat] size=16+xxxxxx:Header Size 为 16 字节,不支持听视频功能。