【问题标题】:is it possible for avassetwriter to output to memoryavassetwriter 是否可以输出到内存
【发布时间】:2012-11-14 14:37:29
【问题描述】:

我想编写一个连续捕获视频的 iphone 应用程序,h.264 以 10 秒的间隔对其进行编码并上传到存储服务器。这可以通过 avassetwriter 完成,并且我可以在创建新文件时继续删除旧文件。然而,由于闪存的写入周期有限,这种方案会在通过闪存的数千个写入周期后破坏闪存。有没有办法将 avassetwriter 重定向到内存,或者在 iphone 上创建一个 ram 驱动器?

谢谢!

【问题讨论】:

  • “但是,由于闪存的写入周期有限,这种方案会在通过闪存的数千个写入周期后破坏闪存。”我很确定内存管理不会以这种方式工作因为有很多创建和覆盖临时文件的进程。如果您经常写信到同一个区域,您所说的将是正确的,但它很少在操作系统中以这种方式实现。
  • 你找到办法了吗?
  • 我正在尝试实现同样的事情。我有一个几乎可以工作的解决方案,我在两个 AVAssetWriters 之间切换。我遇到了问题,因为在编写器之间切换时我需要缓冲音频样本。我使用 CMSampleBufferCreateCopy 创建了 sampleBuffer 的副本。 user1244109 - 有什么进展吗?

标签: ios memory-management video h.264 avassetwriter


【解决方案1】:

是的,avassetwriter 是访问硬件解码器的唯一方法。并且在写入文件时简单地读回文件不会给你 moov 原子,因此基于 avfoundation 或 mpmediaplayer 的播放器将无法读回它。您只有几个选择,定期停止 asassetwriter 并在后台线程上写入文件,从而有效地将您的电影分割成更小的完整文件。或者您可以在服务器端处理不完整的 mp4,您将不得不解码原始 nalu 并重新创建丢失的 moov 原子。如果您使用 ffmpeg mov.c 是要查看的源代码。这也是一个不完整的 mp4 文件会失败。

【讨论】:

【解决方案2】:

为什么要将数据写入文件?不能直接把捕获的数据复制到内存中,然后从内存推送到服务器吗?

【讨论】:

  • 我希望我能做到,但是Apple提供的avassetwriter api只能写入文件URL。
  • 相反,我的意思是为什么要使用 avassetwriter?既然你肯定是从某个地方获取数据并将其提供给 avassetwriter,为什么不绕过中间人直接从某个地方上传数据呢?
  • 因为 AVAssetWriter 不仅写入数据,而且使用硬件视频编码以高效的方式压缩数据。
  • 这应该是评论,而不是答案
猜你喜欢
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多