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 の期間が完全ではないことがわかりました。つまり、データがロードされていないということですか? どのように変更すればよいですか?

質問 2: avplayer のサブタイトルに使用しようとしていますが、AVMediaSelectionGroup は常に null です。私は何をすべきか?

4

2 に答える 2

0

ここに解決策を投稿しました: https://stackoverflow.com/a/37945178/171933基本的に、を使用AVMutableCompositionして字幕付きのビデオに参加し、そのコンポジションを再生する必要があります。

2 番目の質問について: Apple エンジニアによるこの声明 (ページの下部)mediaSelectionGroupForMediaCharacteristicによると、これらの「特性」がメディア ファイルまたは m3u8 ストリームに既に焼き付けられている場合にのみサポートされるようです。

于 2016-06-21T13:05:03.307 に答える
0

質問 1 では、durationキーに以下を追加します。

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