AVURLAsset加载webvtt文件

时间:2015-10-14 02:29:57

标签: ios avfoundation avurlasset webvtt

我正在尝试使用AVURLAsset加载webvtt文件。

以下是我的代码。

    NSString *urlAddress = @"http://somewhere/some.vtt";
    NSURL *urlStream = [[NSURL alloc] initWithString:urlAddress];
    AVAsset *avAsset = [AVURLAsset URLAssetWithURL:urlStream options:nil];

    NSArray *requestKeys = [NSArray arrayWithObjects:@"tracks",@"playable",nil];
    [avAsset loadValuesAsynchronouslyForKeys:requestKeys completionHandler:^{
    dispatch_async(dispatch_get_main_queue(),^{

        //complete block here
        AVKeyValueStatus status =[avAsset statusOfValueForKey:@"tracks" error:nil];
        if(status == AVKeyValueStatusLoaded) {

            //loaded block !
            //Question 1
            CMTime assetTime = [avAsset duration];
            Float64 duration = CMTimeGetSeconds(assetTime);
            NSLog(@"%f", duration);

            //Question 2
            AVMediaSelectionGroup *subtitle = [avAsset mediaSelectionGroupForMediaCharacteristic: AVMediaCharacteristicLegible];
            NSLog(@"%@", subtitle);
        }
        else {
            //don’t load block ! 
        }
    });
}];

问题1:它总是进入" Loaded Block",但我发现avAsset的持续时间不完整,这意味着数据没有被加载?我应该如何修改它?

问题2:我正在尝试将它用于我的avplayer的副标题,但AVMediaSelectionGroup始终为null。我该怎么办?

2 个答案:

答案 0 :(得分:0)

对于问题1,请在您的密钥中添加duration

NSArray *requestKeys = @[@"tracks",@"playable", @"duration"];

答案 1 :(得分:0)

我已在此处发布了一个解决方案:https://stackoverflow.com/a/37945178/171933基本上您需要使用AVMutableComposition将视频加入字幕,然后播放该合成。

关于您的第二个问题:mediaSelectionGroupForMediaCharacteristic似乎只有在this statement by an Apple engineer (bottom of the page)根据媒体文件或您的m3u8流播放这些“特征”时才会受到支持。