AVAssetResourceLoaderDelegate и вложенный shouldWaitForLoadingOfRequestedResource - PullRequest
0 голосов
/ 04 мая 2020

Я использую AVAssetResourceLoaderDelegate для декодирования на носителях MacOS MP4, извлеченных из сети. Код работает, но я не уверен, как обрабатывать вложенные вызовы shouldWaitForLoadingOfRequestedResource. То есть, в то время как код извлекает данные для одного запроса асинхронно, поступает другой shouldWaitForLoadingOfRequestedResource.

Из журналов я вижу, что в большинстве случаев до выдачи нового запроса предыдущий отменяется с помощью didCancelLoadingRequest, который обрабатывается кодом. Но иногда новый запрос приходит без отмены.

Обычно для начального запроса AVAssetResourceLoadingRequest.requestsAllDataToEndOfResource имеет значение true. Код обрабатывает это, запрашивая сетевую подсистему асинхронно считывать данные в виде фрагментов по 64 Кбайт до конца носителя. Когда приходит каждый кусок, код вызывает [[loadingRequest dataRequest] respondWithData:ns_data].

Но затем, после доставки нескольких блоков по 64 КБ, приходит другой AVAssetResourceLoadingRequest. До сих пор мы видим, что это всегда запрос на чтение 64K с более ранним смещением в медиа-файле. Как правильно его обработать?

Текущий код ожидает, пока сеть завершит sh, выбирая последний запрашиваемый фрагмент 64 КБ для предыдущего запроса и доставляя его с responseWithData. Затем этот запрос откладывается, и код просит извлечь 64 КБ для нового запроса с более ранним смещением на носителе. Когда данные поступают, код вызывает responseWithData и finishLoading для нового запроса, а затем продолжает читать начальный запрос. Кажется, это работает, но я хотел бы убедиться, что это правильный путь.

Например, если я изменю код для постановки в очередь нового запроса и просто продолжу читать данные для первоначального запроса до это явно отменено, тогда я получил ошибки декодирования от AVAssetReader. Таким образом, существуют некоторые требования к порядку обработки вложенного shouldWaitForLoadingOfRequestedResource. Но что они?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...