从DASH-IF IOP版本4.2开始,第6.2.6节定义了DASH中基于图像的轨道的概念:https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf.
这是一种由mime类型的图像组成的自适应集的能力,这些图像本身就是一条低分辨率缩略图。当用户将鼠标悬停在视频时间线上并获得帧在那个近似时间码的预览。
Theo播放器网站有一个专门用于播放此功能的页面:https://www.theoplayer.com/blog/in-stream-thumbnail-support-dvr-dash-streams
我需要使用ffmpeg生成一个短划线流(非实时(,其中也包含这些缩略图。我已经有了一个ffmpeg命令,它将生成jpgs的胶片条,它每5秒输出一个输入视频的缩略图,并将其中5个连接在一个jpg:中
ffmpeg -i INPUT -q:v 20 -vf "select=not(mod(n,125)),scale=480:270,tile=5x1" -vsync vfr output%d.jpg
以及mpeg破折号本身:
ffmpeg -i INPUT -y -map 0 -acodec aac -ac 2 -ar 48000 -s 960x540 -vcodec libx264 -f dash -preset veryfast -b:v:2 1500k -seg_duration 2 output.mpd
但我在ffmpeg中找不到将缩略图包含在dash-mpd文件中的方法。
我使用了这种精确的方法来生成平铺的缩略图,但我不得不手动将自适应集注入output.mpd。BaseURL指向一个静态图像服务器,在那里存储平铺的图像,并从流媒体服务器提供视频/音频/字幕。您需要确保Adaptation集id不会与清单中的任何其他值冲突。
下面是我添加到DASH周期中的自适应集的一个示例。
<AdaptationSet contentType="image" id="5" mimeType="image/jpeg">
<BaseURL>
http://origin.yourdomain.com/storage/thumbs/video_id/
</BaseURL>
<SegmentTemplate duration="120" media="$RepresentationID$/number/tile$Number%03d$.jpg" startNumber="1"/>
<Representation bandwidth="12895" height="432" id="thumbnails_256x144" width="1024">
<EssentialProperty schemeIdUri="http://dashif.org/guidelines/thumbnail_tile" value="4x3"/>
</Representation>
</AdaptationSet>