我想播放PHAsset从iOS相册中收集的视频.PHAsset视频nsurl(/sf/answers/2456990021/)对我自己的应用程序有效,可以说MyPlayer几分钟/块.当我将图像/视频复制到MyPlayers自己的沙箱中nsurl时,它始终有效.在我看来,
我需要将每个视频从临时
PHAssetnsurl 复制到MyPlayers沙箱(appgroup/documents),然后才能使用沙箱相对nsurl播放视频.
如果是这种情况,所有其他玩家如何在飞行中播放长视频?如果有任何其他方式播放视频而不复制到应用程序沙箱,请让我知道方式.
我需要使用AVAsset对象,以便使用AVPlayer和AVPlayerLayer播放它.我开始使用Photos框架,因为不推荐使用AssetsLibrary.现在我到了我有一个PHAsset对象数组的点,我需要将它们转换为AVAsset.我尝试通过PHFetchResult枚举并使用PHAsset的本地化描述分配新的AVAsset,但是当我播放时它似乎没有显示任何视频.
PHAssetCollection *assetColl = [self scaryVideosAlbum];
PHFetchResult *getVideos = [PHAsset fetchAssetsInAssetCollection:assetColl options:nil];
[getVideos enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) {
NSURL *videoUrl = [NSURL URLWithString:asset.localizedDescription];
AVAsset *avasset = [AVAsset assetWithURL:videoUrl];
[tempArr addObject:avasset];
}];
Run Code Online (Sandbox Code Playgroud)
我假设本地化描述不是视频的绝对URL.
我还偶然发现了PHImageManager和requestAVAssetForVideo,但是,当涉及到视频时,options参数没有isSynchrounous属性,image参数就是这种情况.
PHVideoRequestOptions *option = [PHVideoRequestOptions new];
[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:option resultHandler:^(AVAsset * _Nullable avasset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
Run Code Online (Sandbox Code Playgroud)
有同步方法吗?
谢谢.
目前我正在使用以下代码上传视频:
NSURLRequest *urlRequest = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[[entity uploadUrl]absoluteString] parameters:entity.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[UploadModel getAssetData:entity.asset resultHandler:^(NSData *filedata) {
NSString *mimeType =[FileHelper mimeTypeForFileAtUrl:entity.fileUrl];
// NSError *fileappenderror;
[formData appendPartWithFileData:filedata name:@"data" fileName: entity.filename mimeType:mimeType];
}];
} error:&urlRequestError];
Run Code Online (Sandbox Code Playgroud)
GetAssetData方法
+(void)getAssetData: (PHAsset*)mPhasset resultHandler:(void(^)(NSData *imageData))dataResponse{
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestAVAssetForVideo:mPhasset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
NSURL *localVideoUrl = [(AVURLAsset *)asset URL];
NSData *videoData= [NSData dataWithContentsOfURL:localVideoUrl];
dataResponse(videoData);
}
}];
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,无论何时上传大/多个视频文件,应用程序都会耗尽内存.我想这是因为请求NSDATA(aka filedata …
目前我正在使用以下代码将文件上传到服务器
NSURLRequest *urlRequest = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[[entity uploadUrl]absoluteString] parameters:entity.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// Get file url
[UploadModel getAassetUrl:entity.asset resultHandler:^(NSURL *fileUrl) {
NSError *fileappenderror;
// Append
[formData appendPartWithFileURL:fileUrl name:@"data" error:&fileappenderror];
if (fileappenderror) {
[Sys MyLog: [fileappenderror localizedDescription] ];
}
}];
} error:&urlRequestError];
Run Code Online (Sandbox Code Playgroud)
/*getAassetUrl*/
+(void)getAassetUrl: (PHAsset*)mPhasset resultHandler:(void(^)(NSURL *imageUrl))dataResponse{
PHImageRequestOptions * requestOption = [[PHImageRequestOptions alloc] init];
requestOption.synchronous = YES;
requestOption.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
[[PHImageManager defaultManager] requestImageDataForAsset:mPhasset options:requestOption resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
dataResponse([info objectForKey:@"PHImageFileURLKey"]);
}];
}
Run Code Online (Sandbox Code Playgroud)
这种方法适用于模拟器,但在真实设备上失败:空文件很可能由于无法从本地存储读取而上载到服务器.日志显示通知
注意:Sandbox:MyApp(213)拒绝文件读取数据/private/var/mobile/Media/DCIM/101APPLE/IMG_1570.PNG
我相信这个笔记意味着app无法通过指定的路径访问该文件.此外,我尝试了一种替代方法,通过附加NSData来上传文件,NSData是从请求PHAsset数据返回的.但是这种方法在大型媒体文件的情况下是不可用的.因为整个文件都被加载到内存中. …
ios ×4
phasset ×3
afnetworking ×2
iphone ×2
objective-c ×2
video ×2
avasset ×1
nsurl ×1
swift ×1