23

我正在尝试创建一个小程序,它将获取 mp4 视频并使用 AVFoundation 框架从视频中提取字幕信息。这样做时,它将创建并返回格式为 startTimeOfSubtitle、endTimeofSubtitle 和 subtitleString 的 NSDictionary 元素的 NSArray。

这是我从 AVFoundation 的发行说明中收集到的。任何代码示例将不胜感激。

提前致谢。

根据语言和其他标准选择音频和字幕媒体

AVFoundation 现在提供的功能可用于发现视听媒体资源可能提供的选项,以适应不同的语言偏好、可访问性要求、自定义应用程序配置和其他需求,并选择这些选项进行播放。例如,一个资源可能包含多个可听选项,每个选项都有以不同语言说出的对话,以被选择用于播放而排除其他选项。也可以为诸如字幕之类的易读媒体提供多种语言的类似选项。基于文件的内容和 HTTP Live Streaming 内容都可以提供媒体选项。要获取有关 AVAsset 实例提供的选项组的信息: • 使用 AVAsynchronousKeyValueLoading 加载 AVAsset 键 availableMediaCharacteristicsWithMediaSelectionOptions 的值。

• 可以通过-[AVAsset mediaSelectionGroupForMediaCharacteristic:] 获得具有感兴趣的媒体特征的每组互斥选项。要获取可听选项,请通过 AVMediaCharacteristicAudible 等。每个组由 AVMediaSelectionGroup 的实例表示。组中的每个选项都由 AVMediaSelectionOption 的实例表示。这两个类都在 AVMediaSelectionGroup.h 中定义。

要检查组中的可用选项并过滤它们以进行播放选择: • AVMediaSelectionGroup 提供了 AVMediaSelectionOptionFiltering 类别中的方法,根据选项是否可播放、匹配所需的区域设置或是否具有对 AVMediaSelectionOptions 数组执行常见过滤操作或者没有特殊的媒体特征,例如它们是否提供特定的可访问性功能。指示存在可用于过滤媒体选择选项的可访问性功能的媒体特征已在 AVMediaFormat.h 中定义。

• AVMediaSelectionOption 提供有关可用于在用户界面中显示的选项的信息,允许用户在可用选项中进行选择或在客户端定义的过滤操作的实施中进行选择。作为使用自定义媒体资源的应用程序中客户端定义的过滤选项的示例,只有当其关联的元数据包含特定值时,才可以将选项视为有资格选择。

• 要选择组内的特定选项进行播放,请使用-[AVPlayerItem selectMediaOption:inMediaSelectionGroup:]。要发现当前选择播放的选项,请使用 -[AVPlayerItem selectedMediaOptionInMediaSelectionGroup:]。

关于字幕的建议

在向用户显示可供回放的可读选项中的选项以及根据用户偏好在可用的可读选项中进行选择时,应特别小心。一些清晰的内容包含“强制”字幕,这意味着根据内容作者的意图,当用户既没有表示对显示字幕的偏好也没有明确选择字幕选项时,应该显示字幕。强制字幕通常用于以内容提供者假定不会被普遍理解的语言传达口语对话或可见文本的含义,然而对话或文本的理解被认为是必不可少的。请确保您的应用程序允许它们按照以下建议正确显示。

特征 AVMediaCharacteristicLegible 的 AVMediaSelectionGroup 可以提供两种类型的易读选项:1) 用于显示被认为是可选的易读内容以及被认为是必不可少的内容,以及 2) 仅显示基本易读内容。包含基本内容的清晰 AVMediaSelectionOptions 仅具有媒体特征 AVMediaCharacteristicContainsOnlyForcedSubtitles(在 AVMediaFormat.h 中定义)。当在选择界面中向最终用户提供清晰的显示选项时,或者在考虑根据用户对语言的偏好自动选择字幕选项时,应排除具有特征 AVMediaCharacteristicContainsOnlyForcedSubtitles 的清晰选项。+[AVMediaSelectionOption mediaSelectionOptionsFromArray:

如果用户表示不喜欢或不选择清晰的内容,则应用程序应选择具有特征 AVMediaCharacteristicContainsOnlyForcedSubtitles 的播放的清晰选项之一(如果存在)。对于大多数包含强制字幕的清晰选项的资源,可以根据当前的声音选择在其中进行适当的选择。使用 -[AVMediaSelectionOption associatedMediaSelectionOptionInMediaSelectionGroup:] 获取与可听选项关联的清晰选项。如果没有其他方式可供选择,则媒体选择组中第一个带有强制字幕的清晰选项是适当的默认值。

4

1 回答 1

2

好吧,我不确定您是否能够获得字幕的开始时间和结束时间...我正在使用以下方法获取有关 HLS 流中的字幕选项的信息。

[tmpCurrentAsset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
    dispatch_async(queueForMultipleAudioHandling, ^(void) {
        AVKeyValueStatus postLoadingStatus = [tmpCurrentAsset statusOfValueForKey:@"tracks" error:NULL];
        if (postLoadingStatus == AVKeyValueStatusLoaded)
        {
            AVMediaSelectionGroup * subtitleGroup = [self.mPlayer.currentItem.asset mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible];
            if (subtitleGroup) {

                _subtitles = subtitleGroup;

                dispatch_async(dispatch_get_main_queue(), ^{
                    [this createSubtitlePopOver];
                });


            }

        }

首先,您需要重新加载曲目并获取有关 AVMediaCharacteristicLegible 的信息。如果你有这个,你可以像这样提取关于字幕的信息: _subtitles.options 这会给你一个 AVMediaSelectionOption 数组,你可以从中选择。如果你想用 AVMediaSelectionOption 玩更多,你可以在这里继续阅读:AVMediaSelectionOption 文档

希望这有点帮助;)

于 2013-07-31T07:38:15.163 回答