使用AVFoundation捕获和播放新媒体类型

时间:2011-09-19 20:28:41

标签: objective-c ios cocoa-touch avfoundation

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

我正在开发一款应用程序,让用户可以使用AVMutableComposition以编程方式记录我需要的音频位。除了我想要捕获的音频轨道并保存加速度计数据并使其与声音同步之外,这就是问题所在。通常,AVFoundation用于已知的媒体类型,如静态照片,音频和视频,但我想知道使用此框架捕获加速度计数据等内容是否可行。这样我就可以更轻松地将传感器数据与捕获的音频同步,尤其是在将部件与AVMutableComposition放在一起时。

这是我需要完成的事情:

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

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

  3. AVMutableComposition保存到磁盘,包括音频和加速度计轨道。使用像Quicktime

  4. 这样的标准容器会很不错

    第1部分& 3我正在考虑使用AVAssetReaderAVAssetReaderOutputAVAssetWriterAVAssetWriterInput类从加速度计中捕获但没有太多Cocoa的经验我正试图弄清楚我需要扩展什么。此时我认为我需要继承AVAssetReaderOutputAVAssetWriterInput并使用CMSampleBuffers来允许原始加速度计数据和AVAsset之间的转换。我观察到大多数这些类只有一个私有成员引用一个具体的实现(即AVAssetReaderInternalAVAssetWriterInputInternal)。有谁知道这是一种常见模式还是它对编写自定义实现意味着什么?

    我还没有考虑过第2部分。我目前正在使用AVPlayer来播放音频,但我不确定如何将资产中的样本数据分配到我的自定义加速度计视图。

    为这样一个开放式问题道歉 - 我想我更多的是寻求指导而不是特定的解决方案。对AVFoundations架构是否完全可能有任何直觉感受?

1 个答案:

答案 0 :(得分:0)

我会使用NSmutableArray并存储加速器数据加上那里的时间码。因此,当您播放时,您可以从视频播放器中获取时间并使用它查找阵列中的加速器数据。由于数据存储为时间线,因此您无需搜索整个数组。只需在数组中前进并检查时间数据何时重合就足够了。