ios - Swift,无需压缩即可加载图库的视频
问题描述
当您为用户提供使用之前在 iPhone 画廊中注册的视频的可能性时,UIImagePickerController
无论原始分辨率如何,它都会被导入并压缩为 1280x720。是否有可能以原始质量获得原始视频UIImagePickerController
?
返回的 urlUIImagePickerController.InfoKey.mediaURL
似乎是压缩文件的临时 url,因此无法获取原始文件。
解决方案
对于这个问题,我可以想到两种方法。首先,有一个UIImagePickerController
被调用的属性videoExportPreset
。您可以将该属性设置为AVAssetExportPresetPassthrough
.
videoExportPreset可用于指定视频的转码质量(通过 AVAssetExportPreset* 字符串)。如果该值为 nil(默认值),则 transcodeQuality 由 videoQuality 确定。如果源类型为 则无效
UIImagePickerControllerSourceTypeCamera
。
记得做import AVFoundation
。
第二种方法是实现自己的选择器,即使用PHAsset。
例子:
let fetchResult = PHAsset.fetchAssets(with: .video, options: nil)
let videoRequestOptions = PHVideoRequestOptions()
videoRequestOptions.version = .original
fetchResult.enumerateObjects { (asset, index, _) in
PHImageManager.default().requestAVAsset(forVideo: asset, options: videoRequestOptions) { (avAsset, audioMix, infoDic) in
//----
}
}
推荐阅读
- java - 使用 ffmpeg 将视频转换为 mp3 音频
- unit-testing - 如何测试我的应用程序方法是否处理 REST API 的 HTTP 状态 404 而无需实际调用该 REST API
- python-3.x - Python 脚本中的 Azure 函数 ModuleNotFoundError
- string - 如何在 SIMD/AVX2 代码中连接有界长度的字符串
- algorithm - 加权圆图的总路径概率
- macos - 我可以使用通配符来阻止主机文件中的网站吗?
- python - ```time.perf_counter()``` 命令有什么作用?
- java - Java:如何将 0 到 1 之间的值四舍五入到至少 3 位小数?
- c# - 我在 Visual Studio 2013 的可扩展性选项卡中找不到添加自定义命令选项
- linux - CMake/CPack:将二进制文件从 Linux 部署到 Mac OSX