ドキュメントがAVURLAsset.resourceLoaderについてこう述べています。ロード時にAVAssetResourceLoaderの使用方法は?
、リソースローダオブジェクトは、リソースのロードを支援するために求められることがあります。たとえば、復号化を必要とするリソースの場合、適切な復号鍵を提供するようにリソースローダーに求められる可能性があります。デリゲートオブジェクトをリソースローダーオブジェクトに割り当て、デリゲートを使用してこれらの要求をインターセプトし、適切な応答を提供することができます。
それでは、私は私のコードでやろうとしていることである:
NSURL* url = ...;
_asset = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetResourceLoader* loader = _asset.resourceLoader;
[loader setDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
_playerItem = [AVPlayerItem playerItemWithAsset:_asset];
_player = [AVPlayer playerWithPlayerItem:_playerItem];
// ... setting up the player layer
[_player play];
とも私のクラスでは、私は@interfaceにAVAssetResourceLoaderDelegateを追加しても、メソッドを実装します。
- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest
{
NSLog(@"YES");
return YES;
}
何であれURLが渡されると、このメソッドは呼び出されません。 URLがHTTP経由の有効なメディアである場合、またはカスタム登録されたNSURLProtocolを使用している場合は、metterしません。
resourceLoaderはいつデリゲートを呼び出すのですか?
間違っています。 Apple docs:* "自分でリソースローダーオブジェクトを作成するのではなく、AVURLAssetオブジェクトのresourceLoaderプロパティからリソースローダーを取得し、これを使用してカスタムデリゲートオブジェクトを割り当てます。" * –
それはどうしたのですか? :AVAssetResourceLoader * resource_loader = [some_AVAsset resourceLoader];新しいものは作成しませんが、avassetからresourceloaderを返します – Marcin