2014-10-14 2 views
2

AVAssetResourceLoaderDelegate 프로토콜에서 일부 메시지를 다시 가져 오려고했지만 호출 된 적이없는 것 같습니다. 나는 모든 것이 주 스레드에서 일어나고 있음을 확인했다. AVURLAsset 작성에서 AVPlayerItem 작성, 위임 작성 및 위임 대기열이 기본 스레드로 설정됩니다. 웹 호스팅 MP4 콘텐츠 및 암호화되지 않은 HLS 콘텐츠를 스트리밍하려고합니다.AVAssetResourceLoaderDelegate가 호출되지 않음

내 선언 : 비디오 재생을위한

@property (readwrite, strong) AVPlayer* player; 
@property (strong) AVPlayerItem* playerItem; 
@property (strong) id<AVAssetResourceLoaderDelegate> resourceLoaderDelegate; 

코드 :

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; 
... 
self->_resourceLoaderDelegate = [[MyAssetResourceLoaderDelegate alloc] init]; 
[asset.resourceLoader setDelegate:self->_resourceLoaderDelegate 
          queue:dispatch_get_main_queue()]; 
... 
self->_playerItem = [AVPlayerItem playerItemWithAsset:asset]; 
... 
[self setPlayer:[AVPlayer playerWithPlayerItem:self->_playerItem]]; 

그러나, resourceLoader:shouldWaitForLoadingOfRequestedResource:가 호출되지 없구요 (도 다른 대리자 메서드 중 하나를 수행합니다).

분명히하기 위해 iOS 시뮬레이터와 iOS 8을 실행하는 iPhone 5 (테스트 결과는 동일하게 나타남)를 사용하여 테스트하고 있습니다.

모든 코드가 동일한 스레드에 있어야한다는 것을 this question에서 읽었 기 때문에 모든 코드가 주 스레드에서 실행되고 있는지 확인했습니다.

누구든지 제안을하거나이 대리자가 실제로 호출 된 일부 소스 코드에 대한 참조를 갖고 있습니까?

업데이트 : URL이 로컬 파일 인 경우이 코드가 제대로 작동하지만 원격 파일 인 경우이 코드는 작동하지 않습니다. 예상되는 동작입니까 아니면 원격 파일에 대해이 작업을 수행 할 수있는 방법입니까?

+0

_playerItem 및 _resourceLoaderDelegate가 선언 된 코드를 게시 할 수 있습니까? – Acey

+0

위 코드를 업데이트했습니다. 또한 url이 로컬 파일을 가리키는 경우 대리자가 호출되는 것으로 확인되었습니다. 대의원에게 전화하는 것을 속이는 방법이 있습니까? – MxSagan

+0

당신과 비슷한 문제가있을 수 있습니다. http://stackoverflow.com/questions/26649865/avassetresourceloaderdelegate-methods-not-working-on-device 그리고 내 대답이 있습니다. – Chugaister

답변

7

AVAssetResourceLoaderDelegate는 "비표준/비 예약"URL 스키마를 사용하는 경우에만 작동합니다. HTTP, HTTPS 등은 예약 된 URL 스키마로 간주되며 URL에 해당 스키마가있는 경우 iOS는 위임 호출을하지 않습니다. 내가 끝낸 것은 https URL에 대해 http urls 및 my_own_https에 my_own_http를 사용하는 것이 었습니다. 잘 작동한다. 기억해야 할 또 다른 사항 인 URL이 비표준 방식 인 경우 HLS를 지원하는 다른 기기에서 작동하지 않을 수 있습니다.

+0

'AVAssetResourceLoaderDelegate는 "비표준/비 예약"URL 스키마를 사용할 때만 작동합니다. 이것은 사실처럼 보이지 않습니다. key url에 https를 사용하고 있으며 m3u8 재생 목록에 언급 된 키의 위치를 ​​찾지 못한 경우 항상 호출됩니다. 그러나 인터넷에 연결되어 있지 않으면 전화를 걸지 않습니다. 키 체인 또는 앱 샌드 박스에서 키를 가져 오려고 할 때 지속되는 비디오의 경우와 같습니다. – abhinavroy23