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: Он всегда переходит в «Загруженный блок», но я считаю, что продолжительность avAsset не завершена, что означает, что данные не загружены? Как мне его изменить?

Вопрос 2: Я пытаюсь использовать его в субтитрах моего avplayer, но AVMediaSelectionGroup всегда имеет значение null. Что я должен делать?


person Leon Shiu    schedule 14.10.2015    source источник
comment
Привет, это работает, я пробовал это, но это не работает? Есть идеи?   -  person Yohan    schedule 22.02.2016
comment
Вы поняли это? любые обновления?   -  person Christian Stavro    schedule 09.03.2016


Ответы (2)


Для вопроса 1 добавьте duration к своим ключам:

NSArray *requestKeys = @[@"tracks",@"playable", @"duration"];
person Rhythmic Fistman    schedule 14.10.2015
comment
Привет, спасибо за ваш ответ. Добавляю, но результат тот же. - person Leon Shiu; 14.10.2015
comment
о нет. Вы пытались открыть URL-адрес в Mobile Safari? - person Rhythmic Fistman; 14.10.2015
comment
это звучит неправильно. у вас есть публичная ссылка на файл? - person Rhythmic Fistman; 14.10.2015
comment
Хорошо - я вижу, что вы пытаетесь сделать? Продолжительность работает для меня, но AVMediaSelectionGroup, кажется, доступен только для субтитров внутри фильмов. - person Rhythmic Fistman; 15.10.2015
comment
продолжительность у вас есть? - person Leon Shiu; 15.10.2015
comment
3978,03 с или 1 час 6 минут 18 секунд - person Rhythmic Fistman; 15.10.2015
comment
Должно быть 6951.053 - person Leon Shiu; 15.10.2015

Я разместил решение здесь: https://stackoverflow.com/a/37945178/171933 В основном вам нужно используйте AVMutableComposition, чтобы соединить видео с субтитрами, а затем воспроизведите эту композицию.

Что касается вашего второго вопроса: mediaSelectionGroupForMediaCharacteristic, похоже, поддерживается только в том случае, если эти «характеристики» уже встроены либо в медиафайл, либо в ваш поток m3u8, согласно это заявление инженера Apple (внизу страницы).

person Johannes Fahrenkrug    schedule 21.06.2016