AirPlay 播放 mp4 文件时如何查看字幕 vtt?

How to view subtitles vtt when AirPlay a mp4 file?

目标是在 AirPlay 为 运行 时在电视中以 vtt 格式观看 html 字幕。

html代码:

<video preload="metadata" x-webkit-airplay="allow" src="a.mp4">
    <track kind="subtitles" default="" src="en.vtt" srclang="en">
    <track kind="subtitles" src="de.vtt" srclang="de">
    <track kind="subtitles" src="es.vtt" srclang="es">
    <track kind="subtitles" src="fr.vtt" srclang="fr">
</video>

问题是当启用 AirPlay 时视频和音频在电视上播放,但没有显示字幕。

我尝试使用 ffmpeg 将 vtt/srt 字幕包含到 mp4 元数据中,并且字幕可与 VLC 一起使用,但在 AirPlay 文件时不起作用

ffmpeg -i 8499.mp4 -i 8499.en.vtt -map 0:v -map 0:a -c copy -map 1 -c:s:0 mov_text -metadata:s:s:0 language=en 8499.en.mp4
ffmpeg -i 8499.mp4 -i 8499.en.srt -map 0:v -map 0:a -c copy -map 1 -c:s:0 srt -metadata:s:s:0 language=en 8499.en.mp4

还尝试发送 .m3u8,但没有成功。你们知道 AirPlay 时带有 .mp4 和 .vtt 的简单 .m3u8 的基本格式如何工作吗?

AirPlay 的标准字幕解决方案是什么?

iOS 没有将 VTT 字幕从 <video> 播放到 Airplay 接收器,我并不感到惊讶。

iOS(可能还有 tvOS)仅支持 1 种嵌入式 subtitle/captioning 格式:MP4 Timed Text / MPEG-4 Part 17。有时它被称为 Quicktime Timed Text。 Safari 还支持 <video> 的 VTT(但不支持 SRT),但这仅在 Safari 中。

您的 ffmpeg 个例子很接近。如果您想使用 subtitles/captions 播放 MP4 文件,您必须从 SRT 字幕文件开始作为输入。不是 MP4 Timed Text 文件(远不如 SRT 常见)。使用 mov_text 将对其进行编码。

这是我在 another answer 中找到的与此问题相关的示例。

ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4

注意:如果您使用 -c copy-c 命令的顺序很重要。您必须在它之后指定任何源流更改