1

我正在尝试使用 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的duration不完整,是不是数据没有加载?我应该如何修改它?

问题 2:我试图将它用于我的 avplayer 的字幕,但 AVMediaSelectionGroup 始终为空。我应该怎么办?

4

2 回答 2

0

我在这里发布了一个解决方案:https ://stackoverflow.com/a/37945178/171933基本上,您需要使用 anAVMutableComposition来加入带有字幕的视频,然后播放该作品。

关于您的第二个问题:根据Apple 工程师的声明(页面底部),mediaSelectionGroupForMediaCharacteristic似乎只有当这些“特征”已经融入媒体文件或您的 m3u8 流时才受支持。

于 2016-06-21T13:05:03.307 回答
0

对于问题 1,添加duration到您的密钥:

NSArray *requestKeys = @[@"tracks",@"playable", @"duration"];
于 2015-10-14T02:49:17.577 回答