【问题标题】:Swift - Reduce weight of a videoSwift - 减轻视频的重量
【发布时间】:2018-03-21 14:30:59
【问题描述】:

目前我遇到了一个大问题,我正在使用 AssetsPickerViewController 从图库中获取图像和视频,然后在网络查询中将其上传到服务器。

AssetsPickerViewController:https://github.com/DragonCherry/AssetsPickerViewController

我的问题是,当我从视频中获取数据上传到服务器时,它太大了,大约 30 秒的视频重量超过 50MB,我认为这是错误的原因:

Connection to assetsd was interrupted or assetsd died
Message from debugger: Terminated due to memory issue

我认为我可以解决这个问题的方法是减轻视频的重量,但我仍然找不到方法。

提前感谢您的帮助。

【问题讨论】:

  • 要减小视频的整体文件大小,您需要在设备上使用 AVFoundation 对其进行转码。您可以降低视频质量、帧速率、帧大小、单独调整音频/视频质量等。当我最后一次这样做时,我创建了一个“高分辨率”视频(低于录制的分辨率)并上传了它。然后在服务器上我也创建了中低质量版本
  • 感谢您对Scriptable的评论,这似乎是一个很好的建议,您可以在互联网上给我一个关于如何使用AVFoundation来减轻视频重量的例子吗?
  • 有很多,但大多数都在objective-c stackoverflow.com/questions/11751883/…中显示代码,你也可以参考这个库。 github.com/NextLevel/NextLevel

标签: ios swift phasset


【解决方案1】:

在我看来,您在上传之前尝试将整个视频加载到内存中,这对于大文件来说是个坏主意。一种替代方法是使用URLSessionUploadTask,它使用文件 URL 而不是原始数据:

let videoFileURL = <get a file URL>
let request = URLRequest(url: URL(string: "https://mygreatsite.com")!)
URLSession.shared.uploadTask(with: request, fromFile: videoFileURL) { data, response, error in
    // handle
}.resume()

【讨论】:

  • 这是处理大文件的好建议,但有充分的理由表明 OP(以及最终用户)可能强烈希望在将文件发送到服务器之前减小文件大小。
  • 非常感谢您的回答,我认为这是尝试解决我的问题的好方法,我只是有一个问题,在服务器上可能使用PHP,我怎样才能获取数据?由于使用 uploadTask 我不会观察以后用来识别变量的参数
猜你喜欢
  • 2021-06-30
  • 2017-07-29
  • 1970-01-01
  • 2012-07-11
  • 2023-03-08
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多