16

AVPlayerItem は、1 つの AVPlayer にのみ割り当てることができます。AVPlayerItem が AVPlayer に追加されると、それを別の AVPlayer に追加しようとすると、アプリが SIGABRT されます。

したがって、AVPlayerItem が与えられた場合、次のように判断できます。

  1. 現在関連付けられている AVPlayer は何ですか? と
  2. 過去に AVPlayer に挿入されたことがある場合は?

次のコードは、問題を確実に示しています。

AVPlayerItem *item = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
AVPlayer *firstPlayer = [[AVPlayer alloc] init];
[firstPlayer replaceCurrentItemWithPlayerItem:item];
AVPlayer *secondPlayer = [[AVPlayer alloc] init];
[secondPlayer replaceCurrentItemWithPlayerItem:item];

エラーメッセージは次のとおりです。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem cannot be associated with more than one instance of AVPlayer'
4

5 に答える 5

3

逆にやってみた?AVPlayer によって再生されているアイテム内の詳細にアクセスしてみてください

AVPlayer *firstPlayer = [[AVPlayer alloc]init];

その後、 にアクセスできますfirstPlayer.currentItem。これにより、 にアクセスできfirstPlayerますAVPlayerItem

例えば:

firstPlayer.currentItem.duration

そのトラックの長さを教えてくれます。

于 2012-10-18T12:50:29.103 に答える
0

Based on Anil's answer, for a looped playback on multiple videos:

for (NSObject * obj in cachedVideos){
    if ([obj isKindOfClass:[AVPlayerLayer class]]){
        AVPlayerLayer * layer = (AVPlayerLayer *)obj;
        if ([layer.player.currentItem isEqual:n.object]){
            [layer.player seekToTime:kCMTimeZero];
            [layer.player play];
            break;
        }
    }
}
于 2016-07-07T14:37:16.737 に答える
0

次を使用AVPlayerItemしてを に関連付けることができます。AVPlayer

static char playerKey;

objc_setAssociatedObject(item, &playerKey, player, OBJC_ASSOCIATION_RETAIN);

次を使用して取得します。

objc_getAssociatedObject(item, &playerKey);
于 2014-01-05T05:25:32.307 に答える