热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[AVCompositionURL]:unrecognizedselectorsenttoinstance

[managerrequestAVAssetForVideo:PHAssetoptions:videoRequestOptionsresultHandler:^(AVAsset*a

[manager requestAVAssetForVideo:PHAssetoptions:videoRequestOptionsresultHandler:^(AVAsset * avasset, AVAudioMix * audioMix, NSDictionary * info) {}];代码报错:原因是

avasset 可能是AVURLAsset  与 AVComposition , 直接调用 【avasset URL】,当选取的视频 是慢动作视频,huicrash;

解决思路:

1、过滤慢动作视频

//加载视频
+ (void)loadVideos {dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ALAssetsLibrary *videolibrary = [[ALAssetsLibrary alloc] init];__block NSMutableArray *reList=[NSMutableArray array];__block BOOL flag=true;[videolibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {if (group) {[group setAssetsFilter:[ALAssetsFilter allVideos]];[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {if (result) {BDHKUGCVideoInfoItem *videoInfo=[[BDHKUGCVideoInfoItem alloc] init];videoInfo.thumbnail = [UIImage imageWithCGImage:result.thumbnail];videoInfo.videoURL = result.defaultRepresentation.url;NSInteger duration = [[result valueForProperty:ALAssetPropertyDuration] integerValue];videoInfo.duration = [NSDate durationWithSeconds:duration];videoInfo.name = result.defaultRepresentation.filename;videoInfo.size = result.defaultRepresentation.size; //BytesvideoInfo.format = [result.defaultRepresentation.filename pathExtension];videoInfo.creationDate = [result valueForProperty:ALAssetPropertyDate];PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[videoInfo.videoURL] options:nil];PHAsset *phAsset = fetchResult.firstObject;[[PHImageManager defaultManager] requestAVAssetForVideo:phAsset options:nilresultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) {//视频上传不支持慢视频if (avAsset && [avAsset isKindOfClass:[AVURLAsset class]]) {if(videoInfo.thumbnail && videoInfo.videoURL && duration>7) {[reList addObject:videoInfo];}}}];}}];} else {//没有更多的group时,即可认为已经加载完成。if(flag) {//防止重复通知dispatch_async(dispatch_get_main_queue(), ^{//*******//按创建时间倒序NSSortDescriptor *creationDateDesc = [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO];NSArray *descriptorArray = [NSArray arrayWithObjects:creationDateDesc, nil];NSArray *sortedArray = [reList sortedArrayUsingDescriptors: descriptorArray];//*******//通知返回数据[[NSNotificationCenter defaultCenter] postNotificationName:@"ugc_camera_result_notif" object:sortedArray];});flag = false;}}} failureBlock:^(NSError *error) {NSLog(@"error=%@",error);//增加错误返回处理if(flag) {//防止重复通知dispatch_async(dispatch_get_main_queue(), ^{NSArray *sortedArray = [[NSArray alloc] init];//通知返回数据[[NSNotificationCenter defaultCenter] postNotificationName:@"ugc_camera_result_notif" object:sortedArray];});flag = false;}}];});
}



2、将选取的视频存储到本地,上传视频使用

//Output URL
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = paths.firstObject;
NSString *myPathDocs = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"mergeSlowMoVideo-%d.mov",arc4random() % 1000]];
NSURL *url = [NSURL fileURLWithPath:myPathDocs];//Begin slow mo video export
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL = url;
exporter.outputFileType = AVFileTypeQuickTimeMovie;
exporter.shouldOptimizeForNetworkUse = YES;[exporter exportAsynchronouslyWithCompletionHandler:^{dispatch_async(dispatch_get_main_queue(), ^{if (exporter.status == AVAssetExportSessionStatusCompleted) {NSURL *URL = exporter.outputURL;NSData *videoData = [NSData dataWithContentsOfURL:URL];// Upload[self uploadSelectedVideo:video data:videoData];}});
}];
参考地址:
 
https://overflow.buffer.com/2016/02/29/slow-motion-video-ios/


推荐阅读
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 在深入研究 React 项目的过程中,特别是在探索 react-router 源码时,我发现了其中蕴含的中间件概念。这激发了我对中间件的进一步思考与整理。本文将详细探讨 Redux 中间件的原理及其在实际项目中的应用,帮助读者更好地理解和使用这一强大工具。通过具体示例和代码解析,我们将揭示中间件如何提升应用的状态管理和异步操作处理能力。 ... [详细]
author-avatar
rz白雪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有