Прогрессивная загрузка и воспроизведение видео в Objective-C

Есть ли способ воспроизвести видео во время его загрузки в Objective-C? Я пытаюсь настроить прогрессивную загрузку с помощью AFNetworking, потому что хочу, чтобы процесс был асинхронным, поэтому я не замораживаю пользовательский интерфейс, и мне нужны некоторые учетные данные для доступа к файлу. Но подойдет и любое другое решение, не связанное с AFNetworking.

Это код, над которым я работаю. Я хотел бы начать воспроизведение видео до того, как видео будет полностью загружено, но я застрял на том факте, что объект ответа недоступен до завершения загрузки.

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

    [formData appendPartWithFormData:[pwd dataUsingEncoding:NSUTF8StringEncoding] name:@"password"];
    [formData appendPartWithFormData:[user_id dataUsingEncoding:NSUTF8StringEncoding] name:@"userid"];

} error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"Fraction completed: %f", uploadProgress.fractionCompleted);
    });

} completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {

    // Here I save the responseObject to the drive and convert it to an AVPlayer asset for playing

}];
[uploadTask resume];

person Alex    schedule 22.03.2017    source источник


Ответы (1)


Для этой цели вы можете попробовать загрузчик ресурсов AVPlayer.

Загрузчик ресурсов даст вам контроль над данными, которые AVPlayer использует для воспроизведения видео.

Таким образом, вы будете продолжать получать данные в делегатах загрузчика ресурсов, а загрузчик ресурсов будет предоставлять те же данные avplayer для воспроизведения видео. Один сетевой вызов, и вы транслируете видео, а также загружаете его.

person Vikas Dadheech    schedule 23.03.2017
comment
Спасибо. Но будет ли запрос URL асинхронным? Другие попытки доступа к URL-адресам замедляли работу пользовательского интерфейса. - person Alex; 24.03.2017
comment
Да Алекс, это будет асинхронно. - person Vikas Dadheech; 24.03.2017