
我们想探索在Web浏览器中观看HDR内容的选项,并了解要实现这一目标需要做什么,因此我们可以将其添加到流媒体实验室中。 到目前为止,这是我们学到的。
首先,当前有两个主要编解码器,它们是有效编码和解码HDR(超高清)内容的文件,即HEVC和VP9。 通过最新的浏览器支持,我们知道HEVC仅在存在HEVC硬件解码器的平台上的Microsoft Edge上受支持。 另一方面,Chrome和Firefox均支持VP9,因此我们决定探索该选项。
从HEVC / MP4到VP9 / WEBM
目前,我们有一个用HEVC编码并存储在常规MP4容器中的HDR拖车,因此第一步是将其转码为VP9。 当我们想为自适应HTTP流准备时,我们还必须将其打包成HTTP流格式,因此我们决定选择MPEG-DASH作为格式。 要回答的一个问题是,是否可以将视频和音频放入分块的ISOBMFF容器中。 我们使用Amazon Elastic Transcoder进行了测试,它可以将HEVC转码为VP9,但不能同时将其存储在ISOBMFF容器中。 接下来,我们使用ffmpeg进行了尝试,结果证明将VP9存储在MP4容器中的功能处于试验阶段。 因此,答案是简单地坚持使用webm容器,而MPEG-DASH也支持这种容器。
为了准备MPEG-DASH包,我们提取了HEVC编码的文件,并将其转码成几个具有不同比特率的VP9编码文件,并在其中还分离了音频和视频。 对于每个比特率和分辨率,可以使用以下ffmpeg行来实现。
`$ ffmpeg -i exodus-hdr.mp4 -c:v libvpx-vp9 -s 1920×1080 -b:v 2000k -keyint_min 60 -g 60 -tile-columns 4 -frame-parallel 1 -an -f webm -dash 1 exodus_1920x1080_2000k.webm`
为了更容易实现这一部分的自动化,我们还围绕ffmpeg构建了一个小型Python包装器,我们将其称为vp9-dash。 也可以从我们在Github上的开源软件中心中获得。
$ vp9-dash Exodus_UHD_HDR.mp4出埃及记
因此,现在我们有3个版本,具有不同的比特率和分辨率,还有1个音频版本以VP9编码并存储在WEBM容器中。
为WEBM创建MPEG-DASH
根据ffmpeg文档,应该还可以构建MPEG-DASH清单,但是我们从来没有做过这部分工作。 相反,我们试图找到另一种可以做到这一点的工具。 我们发现,除了您可以在此处找到的Google的开源软件包shaka-packager
之外,大多数MPEG-DASH打包程序都集中在零碎的MP4周围。 而且他们非常方便地构建了一个预安装了所有内容的Docker容器,因此我们只需要从Docker注册表中拉取映像,即可在实验室中的Docker容器主机上运行该映像。
docker run -v / mnt / s3 / webm /:/ mnt / -it — rm google / shaka-packager
然后使用此命令可以创建所需的MPEG-DASH清单文件。
打包程序输入= video_Exodus_1920x1080_2000k.webm,流=视频,输出= v-Exodus-2000.webm输入= video_Exodus_1280x720_1200k.webm,流=视频,输出= v-Exodus-1200.webm输入= video_Exodus_960x540_800k.webm,流=视频,输出= v-Exodus-800.webm输入= audio_Exodus_128k.webm,流=音频,输出= a-Exodus-128.webm — mpd_output exodus.mpd
现在我们有了MPEG-DASH清单和VP9 / WEBM文件,我们只需要在流实验室中将其放入正确的S3存储桶中,就可以在基于Shaka Player的MPEG-DASH播放器中进行尝试。

您可以自己尝试一下,流可以在这里找到:http://lab.eyevinn.technology/webm/exodus.mpd
剩下的就是要验证我们在途中没有丢失任何HDR元数据,并找到将其自动化的过程。 也许结合了Docker容器和Lambda函数。 一个想法待以后测试。
如果您想了解更多或只是想与我联系,可以在Twitter(@JonasBirme)或Slack上我们在瑞典的Streaming Tech社区中找到我,在这里您还将找到我的一些同事(Magnus Svensson和Johan Skaneby)。
JonasBirmé是 Eyevinn Technology 的解决方案架构师和合伙人 。 一家瑞典咨询公司,专门从事流媒体,VR和游戏。