objective-c - 使用 AVFoundation 捕获和播放新的媒体类型

标签 objective-c ios cocoa-touch avfoundation

我有一个非常不标准的 AVFoundation 问题,作为 iOS 世界的相对新手,我真的可以使用专家的一些指导 -

我正在开发一个应用程序,它允许用户记录我需要使用 AVMutableComposition 以编程方式安排的音频位。事情是这样的,除了我想要捕获和保存加速度计数据并使其与声音同步的音轨之外。通常 AVFoundation 用于已知的媒体类型,如静态照片、音频和视频,但我想知道使用此框架捕获诸如加速度计数据之类的东西是否可行。这将使我更容易将传感器数据与捕获的音频同步,尤其是在使用 AVMutableComposition 将这些部分放在一起时。

这是我需要完成的:

  1. 将加速度计数据记录为 AVAsset/AVAssetTrack,以便我可以将其插入到 AVMutableComposition

  2. 允许在自定义 View 中播放加速度计数据及其录制的音频

  3. AVMutableComposition 保存到磁盘,包括音频和加速度计轨道。最好使用像 Quicktime 这样的标准容器

对于第 1 部分和第 3 部分,我正在研究使用 AVAssetReaderAVAssetReaderOutputAVAssetWriterAVAssetWriterInput 类从加速度计捕获但没有太多 cocoa 经验我试图弄清楚我需要扩展什么。在这一点上,我想我需要子类化 AVAssetReaderOutputAVAssetWriterInput 并使用 CMSampleBuffers 以允许原始加速度计数据和AVAsset。我观察到这些类中的大多数只有一个引用具体实现的私有(private)成员(即 AVAssetReaderInternalAVAssetWriterInputInternal)。有谁知道这是一种常见模式还是编写自定义实现意味着什么?

我还没有仔细考虑第 2 部分。我目前正在使用 AVPlayer 播放音频,但我不确定如何让它将示例数据从 Assets 分配到我的自定义加速度计 View 。

对于这样一个开放式问题,我深表歉意 - 我想我更多的是在寻求指导,而不是特定的解决方案。关于 AVFoundations 架构是否完全有可能,有什么直觉吗?

最佳答案

我会使用 NSmutableArray 并将加速器数据和时间码存储在那里。因此,当您播放时,您可以从视频播放器获取时间并使用它来查找数组中的加速器数据。由于数据存储为时间线,因此您不必搜索整个数组。在数组中向前一步并检查时间数据何时重合就足够了。

关于objective-c - 使用 AVFoundation 捕获和播放新的媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476926/

相关文章:

ios - 无法找到 `GoogleSymbolUtilities (~> 1.1)` 所依赖的 `FirebaseAnalytics` 规范

ios - UISearchDisplayDelegate 弃用解决方法

objective-c - 用于应用程序数据更新的 iOS 设计模式

ios - 用 CALayers mask 在褪色的黑色 View 中有空心圆圈

ios - 识别何时将 UIView 拖动到 UICollectionViewCell 顶部

ios - 父节点移动时子节点不移动?

ios - 如何使用 iOS SDK(核心音频)将原始 PCM 保存到文件中?

ios - 从 iOS 中的 UILabel 中删除括号

iphone - 我真的需要 MainWindow.xib 文件吗?

objective-c - 在第二次运行应用程序时重新初始化整个 subview