Dường như cách hợp lệ duy nhất là yêu cầu AVAsset
từ PHImageManager
, và kiểm tra xem tài sản trả lại có phải là AVURLAsset
không. Trong trường hợp này URL có thể được sử dụng để truy cập trực tiếp tập tin và nhận được đoạn cần thiết của byte:
[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
NSURL *URL = [(AVURLAsset *)asset URL];
// use URL to get file content
}
}];
này sẽ không làm việc với video chuyển động chậm, vì AVComposition
thay vì AVURLAsset
được trả về. giải pháp khả thi là sử dụng PHVideoRequestOptionsVersionOriginal
đoạn video tập tin phiên bản:
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
NSURL *URL = [(AVURLAsset *)asset URL];
// use URL to get file content
}
}];
Và để có được url hình ảnh fullsize:
PHContentEditingInputRequestOptions *options = [[PHContentEditingInputRequestOptions alloc] init];
options.canHandleAdjustmentData = ^BOOL(PHAdjustmentData *adjustmentData) {
return YES;
};
[imageAsset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
// use contentEditingInput.fullSizeImageURL
}];
Không làm việc trong thiết bị thực –
Basil, giải pháp này được sử dụng trong ứng dụng trực tiếp của chúng tôi mà không cần bất kỳ vấn đề. vui lòng chia sẻ một phần mã không hoạt động để biết thêm thông tin – f3n1kc
Trong trường hợp của tôi, tôi đã lên kế hoạch sử dụng URL làm luồng đầu vào để tải lên video lớn. Nhưng không thành công, vì 'hasBytesAvailable' của luồng đó trả về NO. – Benson