使用 PhotoKit (PHAsset) 导出视频每次都会给出不同的视频文件

2023-12-05

我使用该方法(本问题的结尾)从设备检索视频。它的作用是找到库中的第一个视频,创建导出会话并将视频导出为 MOV 文件。

应用程序运行两次后(在方法运行之间停止应用程序),将比较两个结果文件。两个文件是不同的。我期望这两个文件是相同的,因为导出的是相同的资产。

还有一点要注意的是:在同一个应用程序运行中运行该方法两次会按预期提供两个相同的文件。

是否可以让 PhotoKit 每次运行时都导出相同的文件?

- (void)testVideoRetrievalSO {

    PHAsset *oneVideo = [[PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil] firstObject];

    PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
    options.networkAccessAllowed = YES;
    options.deliveryMode = PHVideoRequestOptionsDeliveryModeHighQualityFormat;
    options.version = PHVideoRequestOptionsVersionOriginal;


    [[PHImageManager defaultManager] requestExportSessionForVideo:oneVideo
                                                          options:options
                                                     exportPreset:AVAssetExportPresetPassthrough
                                                    resultHandler:
     ^(AVAssetExportSession * _Nullable exportSession, NSDictionary * _Nullable info) {
         NSLog(@"Video test run on asset %@", oneVideo.localIdentifier);
         NSString *folderPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
         NSString *fileName = [[[NSUUID UUID] UUIDString] stringByAppendingPathExtension:@"mov"];
         NSString *tempFile = [folderPath stringByAppendingPathComponent:fileName];
         NSURL *tempFileUrl = [NSURL fileURLWithPath:tempFile];

         [exportSession setOutputFileType:AVFileTypeQuickTimeMovie];
         [exportSession setOutputURL:tempFileUrl];

         [exportSession exportAsynchronouslyWithCompletionHandler:^{
             NSLog(@"Video test run exported video into file: %@", tempFile);
         }];
     }];
}

UPDATED

目前尚不清楚,但我认为从相机胶卷导出视频并不能保证每次都能获取相同的视频。因此,我将视频从相机胶卷复制到我的文档文件夹,其中包含 url (avurlasset.URL)[NSFileManager copyItemAtURL:toURL:error:]然后它每次都会复制相同的视频文件。目前这是我的最终解决方案。

在这种情况下你必须使用请求AVAssetForVideo not 请求视频导出会话

所以就你而言,

PHVideoRequestOptions *options = [PHVideoRequestOptions new];
options.version = PHVideoRequestOptionsVersionOriginal;

[[PHImageManager defaultManager] requestAVAssetForVideo:asset
                                                options:options
                                          resultHandler:
 ^(AVAsset * _Nullable avasset,
   AVAudioMix * _Nullable audioMix,
   NSDictionary * _Nullable info)
{
     NSError *error;
     AVURLAsset *avurlasset = (AVURLAsset*) avasset;

     // Write to documents folder
     NSURL *fileURL = [NSURL fileURLWithPath:tmpShareFilePath];
     if ([[NSFileManager defaultManager] copyItemAtURL:avurlasset.URL
                                                 toURL:fileURL
                                                 error:&error]) {
         NSLog(@"Copied correctly");
     }
 }];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PhotoKit (PHAsset) 导出视频每次都会给出不同的视频文件 的相关文章

  • 在不使用PrepareForSegue的情况下在segue之间传递数据

    我正在使用情节提要创建一个用户设置帐户 分 5 个步骤 每个步骤都有一个 ViewController 1 输入姓名 联系人等 2 导入照片 3 输入等 4 更多输入 5 确认页面 如果用户单击 确认 gt 获取所有输入并上传到解析 当我在
  • 强/弱/保留/__unsafe_unretained/分配

    合成属性的属性 保留 分配 保留 它被保留 旧值被释放并被分配 分配 仅分配 所有权财产 iOS5 强 弱 IOS4 保留 unsafe unretained 强 iOS4 保留 我是所有者 你不能释放它 在瞄准之前 保留 弱 iOS 4
  • 在 IOS 上检查 Facebook Connect 会话

    在新的 Facebook 库中 FBSession 对象消失了 当用户启动应用程序时 如何在不提示 safari 或 uiwebview 的情况下立即检查用户的设备上是否有有效会话 facebook isSessionValid 方法适用于
  • Firebase数据库在批准后保存数据

    我在 iOS 应用程序上使用 firebase 数据库 我正在快速写作 我正在使用 发送 按钮在我的 firebaseDatabase 上写入数据 例如文本字段和标签值 有什么方法可以接受或拒绝我的数据库中的数据吗 我的意思是 如果用户向文
  • 从 Firebase Swift 检索信息的好方法

    我和我的朋友正在 swift 上开发一个 IOS 项目 并集成了 新的 Firebase 我们能够写入 Firebase 数据库 但是我们在检索数据时遇到了问题 我们有一个 tableView 控制器 我们希望从 Firebase 数据库填
  • 使用 React Native 隐藏在 TabBarIOS 后面的内容

    我正在使用 React Native 构建一个 iOS 应用程序 并正在实现一个TabBarIOS 选项卡上的内容似乎流到后面并被栏遮挡 在 xcode 中 我只是取消选中 扩展边缘 框 但不知道如何使用 React Native 来做到这
  • 如何在 Swift 中使用具有相同协议变量的多个协议?

    我很快就实现了两个协议 GADCustomEventInterstitial and GADCustomEventBanner 这两个协议都需要一个名为delegate delegate每个协议中的类型不同 因此会产生冲突 class Ch
  • iOS 64 位 @try {... } @catch {...} 不起作用

    我有一个非常特殊的问题 最近 我向我的 iOS 项目 arm64 添加了 64 位支持 从那时起 我开始收到内部代码段未捕获的异常 try catch 我使用 Crashlytics 进行崩溃报告 我设法在应用程序中的任何位置使用以下代码行
  • 相当于 AppKit 的 NSObliquenessAttributeName 的 CoreText 是什么?

    我正在使用 CoreText 在 Mac iOS 跨平台代码中绘制一些文本 我可能使用的字体没有在操作系统中为所有用户安装真正的 斜体 版本 但他们需要知道即使这样文本也是斜体的 通过 AppKit 的 NSAttributedString
  • Swift 和 Cocoapods - 缺少必需的模块

    我正在尝试制作一个 Swift 框架 该框架依赖于两个库 阿拉莫菲尔 https github com Alamofire Alamofire and SwiftyJSON https github com SwiftyJSON Swift
  • ios - navigationItem.titleView 更新时闪烁

    我有一个UIView 拿着一个UIButton 设置为我的navigationItem titleView 当我更新此按钮的文本时 它会短暂闪烁 消失并随新文本重新出现 无论如何 当它改变时 是否可以保持它可见 那么 如果我更改 2015
  • 使用PhotoKit可以获取“最近删除”中的照片吗?

    我已经扫描了 API 到目前为止什么也没发现 我会采取一个PHAssetCollection对于 最近删除 或者获取个人的方法PHAssets 我不推荐 或不推荐 但有一些解决方案outsideAPI 但可能仍然可以通过 AppStore
  • 视图水平和垂直不明确且布局复杂

    我有一个UIViewController在我的故事板上有 2 个水平并排的子视图 我添加了约束来将前缘和后缘固定为常数 20 点 并添加了另一个约束来保持宽度相等 如果我假设以下内容 应该可以计算每个子视图需要的宽度 子视图不重叠 不存在其
  • 获取 iOS 5 中最后一个重定向的 url?

    有人可以发布最简单的工作代码 当我 GET 请求一个 url 时 它可以获取最后一个重定向的 url nth 吗 我知道我需要使用异步请求 但我无法制定出解决问题的完整工作代码 我正在使用 ios5 因此我可以使用 ios5 中最新添加的异
  • 如何制作字幕 UILabel / UITextField / NSTextField

    我需要制作字幕UILabel在 Xcode 中 选取框将从右向左滚动 我试过CCScrollingLabel also JHTickerView和别的 但我找不到带有选框的简单代码 没有任何视图 数组 一些愚蠢的库和其他库 如何制作选框UI
  • 如何在首选项包中使用 PSLinkListCell 中的值?

    我想为我的越狱调整制作一个偏好包 我成功地制作了一个带有可用开关的首选项捆绑包 但我想要一个选择颜色的设置 例子 Blue Color gt Yellow Green 所以如果我点击Color 它会将我带到另一个屏幕 要求我选择 Blue
  • Xcode 6 iOS 8 UIImage imageNamed 来自捆绑包问题

    我使用 iOS 7 1 构建我的项目 并尝试使用存储在 images cars car 1 png 中的图像加载 UIImage 视图 所有图像都位于项目树中的图像文件夹中 如下图所示 所以它非常适合 iOS 7 1 和 Xcode 5 但
  • 通过 HTTP 代理进行 iOS XMPP 聊天

    我有一个 iPhone 应用程序 可与 2 项服务配合使用 通过 http 使用 REST 服务 使用 AFNetworking 通过 TCP 进行 XMPP 聊天 使用 XMPPFrameworkhttps github com robb
  • 检测 AVPlayerViewController 是否正在播放视频或正在缓冲并向播放器添加覆盖

    我必须检测视频是否处于播放模式或缓冲模式 我正在从 URL 加载视频 我已经尝试了下面的代码 我可以在视频开始播放后进行跟踪 但不能在视频处于缓冲状态时进行跟踪 另外 我想在我的播放器中添加覆盖视图 我尝试在 AVPlayer 中添加叠加层
  • Swift 和 Objective-C 框架公开其内部结构

    我正在尝试将 Swift 添加到具有公共 私有和项目文件的现有 Objective C 框架中 为了让 Swift 能够访问项目文件 我添加了一个定义新模块的模块映射 例如MyFramework Internal 通过包含所有项目标题 如下

随机推荐

  • Android开发中Fragment之间传递对象数组列表

    我正在尝试在 Android 开发中的片段之间传递 arraylist 这是我尝试将事务数组列表传递给另一个片段的部分 switch menuItem getItemId case R id expenses final ExpenseAc
  • SSIS导出到Excel

    使用 SSMS 我创建了一个导出到 Excel 的查询并将其保存为 DTSX 包 将此 DTSX 包导入到 BIDS 项目中 使其每小时运行一次 并导出一个带有时间戳的 Excel 文件 使用表达式的动态名称 当我从 BIDS 运行时 包成
  • 仅限 C++:一元减 0x80000000

    这个问题据说是针对语言律师的 假设有符号整型和无符号整型都是 32 位宽 如 n3337 pdf 草案 5 3 1 8 中所述 0x80000000u 0x100000000u 0x80000000u 0x80000000u 但我找不到这个
  • 使用 JPA EntityManager 批量插入

    有没有一种方法可以让我们使用 JPA EntityManager 进行批量插入 我知道没有直接的方法可以实现这一点 但必须有某种方法来实现这种机制 实际上 对于每个插入操作 它需要 300 毫秒 我想使用批量插入而不是单个插入来减少这个时间
  • 注射器返回未定义的值?

    我试图从我的遗留代码中获取服务并遇到一个奇怪的错误injector 返回未定义 检查这个plnkr 另外 我正在尝试将新的属性值设置回服务 这是否会在不使用监视的情况下反映到范围 非常感谢您 非常感谢任何指点或建议 您试图在 DOM 构建之
  • Spring 3 - 访问 jsp 中的 messages.properties

    我是 spring 3 的新手 并且已经被困在这个问题上一段时间了 您知道如何从 jsp 访问 messages properties 吗 例如 在控制器中我为模型设置了一个值 model setError user not found 消
  • Gnuplot 中某些特定值的不同颜色的颜色条

    我正在使用 Gnuplot 生成直方图 但如果值高于 低于特定值 我需要将其中一些颜色着色为另一种颜色 例如 如果值 10 值 20 则将直方图着色为红色 所以我希望图表是这样的 x y color 1 4 绿色的 2 15 黄色的 3 4
  • Java:FloatBuffer 到 OpenGL - wrap() 与 allocate() 与 BufferUtils.createBuffer()

    数据源 float v 工作示例 FloatBuffer buf BufferUtils createFloatBuffer v length buf put v buf flip or buf rewind 现在可以将缓冲区上传到 ope
  • 这个正则表达式不应该工作吗?

    testString something something task type Checkin patt new RegExp something w match patt exec testString document querySe
  • 使用 PouchDB 作为离线栅格地图缓存

    我一直在探索使用 PouchDB 作为栅格地图图块的离线缓存 具体来说 对于传单 我刚刚完成了一些初步测试 我想我会分享这些测试 我创建了一个 JsFiddle 实际上我现在更喜欢 CodePen 作为展示如何使用 PouchDB 缓存离线
  • 从pdf文件中提取文本

    我需要从 pdf 文件中提取文本 逐字 import java io import com itextpdf text import com itextpdf text pdf import com itextpdf text pdf pa
  • 如何让 .js 和 .js.map 文件滚动成为 .ts 文件下的子文件

    我有一堆 js 和 js map 文件 这些文件没有汇总在相关的 ts 文件下 这使得找到我感兴趣的文件变得更加困难 在使用 Webstorm 之前我尝试过 Eclipse 并TypeEcs 插件关于这个项目 我认为这就是导致我的问题的原因
  • 如何从 Windows 启动 Mongo DB?

    我已经在 Windows 7 64 位 机器上安装了 MongoDB 我也创建了路径 data db 但当我尝试使用命令启动 mongodb 时 C mongodb bin mongod exe 它没有启动 它正在显示admin web c
  • Javascript从具有多个属性的文件输入元素获取文件数量及其文件名?

    我有一个文件输入multiple multiple 属性允许用户一次选择多个文件 我想在上传之前显示选定的文件名及其计数 但是我不确定如何使用 javascript 从文件输入元素获取此信息
  • 用于转换为任何本地时间的 C++ 库(由 linux zoneinfo 字符串定义)

    我正在寻找一个 C 库来将 UTC 时间转换为任何本地时间 反之亦然 不仅是计算机的时区 而且是任何给定的时区 时区由 unix zoneinfo 字符串 例如 Europe Paris Olson 字符串定义 该库应该在 Windows
  • 将 OPENQUERY 与 Oracle 数据库结合使用来查询日期范围

    我们有一个 Oracle 数据库 可以通过 OpenQuery 访问该数据库以获取某些内容 显然 您无法使用 OleDB 驱动程序直接在 OpenQuery 中进行日期比较 因此要解决此问题 您必须将日期转换为 Julien 日期并比较这些
  • NSOperation 内的调度组 - 尽管 maxConcurrentOperationCount = 1,仍然允许多个操作

    我的目标是在 NSOperation 子类中使用调度组来管理异步任务的串行下载队列 我将 maxConcurrentOperationCount 设置为 1 我已经定义了我的队列 var GlobalDownloadQueue Dispat
  • 为什么我从 mov ax, bx+si+1 得到的结果为零?

    mov ax 10 mov bx 4 mov si ax mov ax bx si 1 LEA ax bx si 1 当我将 bx si 和 1 加在一起并移至 ax 时 结果为 0 在下一行 当我使用 LEA 时 它起作用了 我得到了 1
  • 根据登录用户django显示不同的内容

    所以我上周末刚刚学习了Python Django 我想做的是根据登录者的不同提供具有不同内容的 url 路由 所以我的用例是我创建 5 个用户名 密码 然后这 5 个用户可以登录以阅读适合他们的特定内容 路由 而没有其他用户可以使用用户应该
  • 使用 PhotoKit (PHAsset) 导出视频每次都会给出不同的视频文件

    我使用该方法 本问题的结尾 从设备检索视频 它的作用是找到库中的第一个视频 创建导出会话并将视频导出为 MOV 文件 应用程序运行两次后 在方法运行之间停止应用程序 将比较两个结果文件 两个文件是不同的 我期望这两个文件是相同的 因为导出的