Objective-C中的渐进式下载和视频播放

时间:2017-03-22 14:38:46

标签: ios objective-c video-streaming afnetworking progressive-download

有没有办法在Objective-C下载视频时播放视频?我正在尝试使用AFNetworking设置渐进式下载,因为我希望该过程是异步的,所以我不冻结UI,我需要一些凭据才能访问该文件。但是任何其他不涉及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];

1 个答案:

答案 0 :(得分:1)

您可以为此目的尝试AVPlayer的资源加载程序。

资源加载程序可让您控制AVPlayer用于播放视频的数据。

这样,您将继续在资源加载器的代理中接收数据,资源加载器将向avplayer提供相同的数据来播放视频。一个网络电话,您正在流式传输视频以及下载视频。