通过空投分享视频
Sharing video with airdrop
我在使用空投分享视频时遇到了一些问题。所以,我像这样使用 AssetLibrary
:
else if (conformsToVideo) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Asset Loaded" message:@"Video One Loaded"
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
self.mediaAsset = [AVAsset assetWithURL:[info objectForKey:UIImagePickerControllerMediaURL]];
UIActivityViewController * controller = [[UIActivityViewController alloc] initWithActivityItems:@[self.mediaAsset] applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil];
}
也许这不是方法,我不知道也没有找到任何教程所以如果你有教程,我会很乐意接受。
现在我的问题是,当我 select 一个视频时,一切正常,直到 UIActivityViewController
弹出,我没有任何错误,但我不能使用空投(nor any other service BTW
) 我唯一能做的就是按 UIAVController
的 Cancel button
。
我正在使用 iOS 8.3
。
感谢您的帮助
好吧,最终我找到了一个答案,也许不是最好的但我把它放在那里以防它对某人有帮助因为我没有找到太多关于通过空投分享视频的信息:
NSURL * path = [info objectForKey:UIImagePickerControllerReferenceURL];
BOOL conformsToVideo = (UTTypeConformsTo((__bridge_retained CFStringRef) mediaType, kUTTypeAudiovisualContent));
if (conformsToVideo) {
[self.library assetForURL:path
resultBlock:^(ALAsset *asset) {
ALAssetRepresentation* assetRepresentation = [asset defaultRepresentation];
NSString* outputDirectory = [NSString stringWithFormat:@"%@", NSTemporaryDirectory()];
NSString* pathToCopy = [outputDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", assetRepresentation.filename]];
NSUInteger size = (NSUInteger)assetRepresentation.size;
NSMutableData* data = [NSMutableData dataWithLength:size];
NSUInteger bytesRead = [assetRepresentation getBytes:data.mutableBytes fromOffset:0 length:size error:nil];
NSURL * url = nil;
if ([data writeToFile:pathToCopy atomically:YES])
{
NSLog(@"Ok");
url = [NSURL fileURLWithPath:pathToCopy];
UIActivityViewController * controller = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil];
}
} failureBlock:^(NSError *error) {
NSLog(@"Failure to use the ALAsset");
}
];
}
我找到了使用这个问题的解决方案:Share a video from asset library with AirDrop fails
我只是将前面的步骤添加到那里给出的代码中,希望它有用。
我在使用空投分享视频时遇到了一些问题。所以,我像这样使用 AssetLibrary
:
else if (conformsToVideo) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Asset Loaded" message:@"Video One Loaded"
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
self.mediaAsset = [AVAsset assetWithURL:[info objectForKey:UIImagePickerControllerMediaURL]];
UIActivityViewController * controller = [[UIActivityViewController alloc] initWithActivityItems:@[self.mediaAsset] applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil];
}
也许这不是方法,我不知道也没有找到任何教程所以如果你有教程,我会很乐意接受。
现在我的问题是,当我 select 一个视频时,一切正常,直到 UIActivityViewController
弹出,我没有任何错误,但我不能使用空投(nor any other service BTW
) 我唯一能做的就是按 UIAVController
的 Cancel button
。
我正在使用 iOS 8.3
。
感谢您的帮助
好吧,最终我找到了一个答案,也许不是最好的但我把它放在那里以防它对某人有帮助因为我没有找到太多关于通过空投分享视频的信息:
NSURL * path = [info objectForKey:UIImagePickerControllerReferenceURL];
BOOL conformsToVideo = (UTTypeConformsTo((__bridge_retained CFStringRef) mediaType, kUTTypeAudiovisualContent));
if (conformsToVideo) {
[self.library assetForURL:path
resultBlock:^(ALAsset *asset) {
ALAssetRepresentation* assetRepresentation = [asset defaultRepresentation];
NSString* outputDirectory = [NSString stringWithFormat:@"%@", NSTemporaryDirectory()];
NSString* pathToCopy = [outputDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", assetRepresentation.filename]];
NSUInteger size = (NSUInteger)assetRepresentation.size;
NSMutableData* data = [NSMutableData dataWithLength:size];
NSUInteger bytesRead = [assetRepresentation getBytes:data.mutableBytes fromOffset:0 length:size error:nil];
NSURL * url = nil;
if ([data writeToFile:pathToCopy atomically:YES])
{
NSLog(@"Ok");
url = [NSURL fileURLWithPath:pathToCopy];
UIActivityViewController * controller = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil];
}
} failureBlock:^(NSError *error) {
NSLog(@"Failure to use the ALAsset");
}
];
}
我找到了使用这个问题的解决方案:Share a video from asset library with AirDrop fails 我只是将前面的步骤添加到那里给出的代码中,希望它有用。