HTML 5 视频的 DASH 自适应流媒体
动态自适应 HTTP 流媒体 (DASH) 是一种自适应流媒体协议。这意味着它允许视频流根据网络性能在比特率之间切换,以保持视频播放。
浏览器支持
Firefox 21 包含一个用于 HTML WebM 视频的 DASH 实现,默认情况下处于关闭状态。可以通过“about:config”和“media.dash.enabled”首选项启用它。
Firefox 23 移除对 HTML WebM 视频的 DASH 支持。它将由 Media Source Extensions API 的实现替换,这将允许通过 dash.js 等 JavaScript 库支持 DASH。有关详细信息,请参见错误 778617。
使用 DASH - 服务器端
首先,您需要使用附带的各种比特率视频文件将 WebM 视频转换为 DASH 清单。首先,您只需要来自 ffmpeg.org 的 FFmpeg 程序,该程序具有用于 WebM 视频和音频的 libvpx 和 libvorbis 支持,至少是 2.5 版本(可能是;这在 3.2.5 上测试过)。
1. 使用现有的 WebM 文件创建单个音频文件和多个视频文件
例如
文件 in.video 可以是任何包含至少一个音频流和一个视频流的容器,这些流可以被 FFmpeg 解码,
使用以下命令创建音频:
ffmpeg -i in.video -vn -acodec libvorbis -ab 128k -dash 1 my_audio.webm
创建每个视频变体。
ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1 -f webm -dash 1 \
-an -vf scale=160:90 -b:v 250k -dash 1 video_160x90_250k.webm
ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1 -f webm -dash 1 \
-an -vf scale=320:180 -b:v 500k -dash 1 video_320x180_500k.webm
ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1 -f webm -dash 1 \
-an -vf scale=640:360 -b:v 750k -dash 1 video_640x360_750k.webm
ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1 -f webm -dash 1 \
-an -vf scale=640:360 -b:v 1000k -dash 1 video_640x360_1000k.webm
ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1 -f webm -dash 1 \
-an -vf scale=1280:720 -b:v 1500k -dash 1 video_1280x720_1500k.webm
或者在一个命令中完成所有操作。
ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 \
-g 150 -tile-columns 4 -frame-parallel 1 -f webm -dash 1 \
-an -vf scale=160:90 -b:v 250k -dash 1 video_160x90_250k.webm \
-an -vf scale=320:180 -b:v 500k -dash 1 video_320x180_500k.webm \
-an -vf scale=640:360 -b:v 750k -dash 1 video_640x360_750k.webm \
-an -vf scale=640:360 -b:v 1000k -dash 1 video_640x360_1000k.webm \
-an -vf scale=1280:720 -b:v 1500k -dash 1 video_1280x720_1500k.webm
2. 创建清单文件
ffmpeg \
-f webm_dash_manifest -i video_160x90_250k.webm \
-f webm_dash_manifest -i video_320x180_500k.webm \
-f webm_dash_manifest -i video_640x360_750k.webm \
-f webm_dash_manifest -i video_1280x720_1500k.webm \
-f webm_dash_manifest -i my_audio.webm \
-c copy \
-map 0 -map 1 -map 2 -map 3 -map 4 \
-f webm_dash_manifest \
-adaptation_sets "id=0,streams=0,1,2,3 id=1,streams=4" \
my_video_manifest.mpd
-map
参数对应于输入文件,按它们给出的顺序排列;您应该为每个文件提供一个。-adaptation_sets
参数将它们分配到自适应集;例如,这将创建一个包含流 0、1、2 和 3(视频)的集 (0),以及另一个仅包含流 4(音频流)的集 (1)。
将清单和相关的视频文件放在您的 Web 服务器或 CDN 上。DASH 通过 HTTP 工作,因此只要您的 HTTP 服务器支持字节范围请求,并且设置了使用 mimetype="application/dash+xml"
提供 .mpd
文件,那么您就准备好了。
使用 DASH - 客户端
您需要修改您的网页,使其首先指向 DASH 清单,而不是直接指向特定视频文件
<video>
<source src="movie.mpd" />
<source src="movie.webm" />
Your browser does not support the video tag.
</video>
就是这样!如果浏览器支持 DASH,您的视频现在将自适应流式传输。