ios - 为什么 iOS 上的 Codename One 将音频录制为 CAF?

标签 ios codenameone audio-recording

我的问题与此有关other SO question .我正在尝试通过 Capture.captureAudio() 在 iOS 中录制音频.它输出的音频文件可以在计算机上读取,但在 iOS (iPhone 4S) 和 Android 上都无法读取。

ffmpeg -i 产生:

Input #0, caf, from 'myFile.m4a':
Duration: 00:00:07.04, start: 0.000000, bitrate: 37 kb/s
Stream #0:0: Audio: aac (aac  / 0x20636161), 16000 Hz, mono, s16, 23 kb/s

如果我通过 Voice Recorder 应用程序使用 iOS 录制文件,我会从 ffmpeg 获得:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Test.m4a':
Metadata:
major_brand     : M4A 
minor_version   : 0
compatible_brands: M4A mp42isom
creation_time   : 2017-04-03 19:01:32
date            : 2017-04-03T21:01:09+0200
encoder         : com.apple.VoiceMemos (iPhone OS 7.1.2)
Duration: 00:00:05.15, start: 0.000000, bitrate: 67 kb/s
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, s16, 64 kb/s
  Metadata:
  creation_time   : 2017-04-03 19:01:32
  handler_name    : Core Media Audio

此文件可以在 Android 和 iOS 上播放。

虽然乍一看 mime 类型似乎被限制为“amr”
    /**
 * Gets the available recording MimeTypes
 */ 
public String [] getAvailableRecordingMimeTypes(){
    return new String[]{"audio/amr"};
}

一览native code显示在 iOS 上它记录为“MPEG4AAC”16kHz。

因此,为什么我会得到一个无法在移动设备上播放的 caf 文件?

任何帮助表示赞赏!

最佳答案

caf 文件为 Core Audio Format文件。它们只是苹果用于其音频的包装器,因为它在存储“未包装”音频方面具有一些优势。

caf 包装器中的音频仍使用您指定的格式进行编码。由于它只是一个包装器,因此“解包”它应该快速且容易。 This google search for "convert caf to mp4"显示很多结果。如果您希望以编程方式执行此操作,则适当的 Google 搜索应该会产生大量结果。

关于ios - 为什么 iOS 上的 Codename One 将音频录制为 CAF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43226775/

相关文章:

cocoa - 基于时间戳的同步的常见陷阱是什么?

ios - 带有属性文本的 UIButton 不遵守 adjustsFontSizeToFitWidth

codenameone - 代号一 - 对话框按钮

ios - 如何为AVWriter写入设置CMSampleBuffer的时间戳

iOS MVC 模型命名约定

codenameone - 如何在代号一中获取我的 MapContainer 边界框

java - 禁用 Codename 工具栏中的命令

ios - 从回调调用 objective-c 方法

java - 如何暂停/恢复使用 mediarecorder 创建的录音?

ios - 将 AFNetworking 2.0 与后台任务结合使用