音频队列服务录制到 .mp4 文件,无法播放。和魔术饼干问题

Posted

技术标签:

【中文标题】音频队列服务录制到 .mp4 文件,无法播放。和魔术饼干问题【英文标题】:Audio Queue Services recording to .mp4 file, that cannot be play. And Magic Cookie issue 【发布时间】:2011-01-12 05:13:32 【问题描述】:

我是一个新手 Mac 程序员才 3 个月。我遇到了音频队列服务问题,希望有人能帮助我。

我使用 Audio Queue Services API 创建了一个录音程序,并输出 AAC 格式的数据。看起来不错,一切正常。

直到我使用 MP4V2 库(一个开源库)输出一个 .mp4 文件时,问题才出现。

问题一:

我使用 ma​​gic cookie 作为 AAC 标头 输入到 MP4V2 库函数 MP4WriteSample()。 .mp4 文件里面有数据,但是 播放器(例如:Quicktime)无法识别 .mp4 文件,无法播放音频数据。


问题 2:

我将我的音频队列基本描述格式设置为:

    aqData.mDataFormat.mSampleRate = 44100.0;
    aqData.mDataFormat.mFormatID = kAudioFormatMPEG4AAC;  // AAC codec.
    aqData.mDataFormat.mChannelsPerFrame = 2;
    aqData.mDataFormat.mFramesPerPacket = 1024;

并使用 AudioQueueGetProperty() 获取魔法 cookie。

然后我打印出我的 ma​​gic cookie 内容,就像这样:

    <03808080 22000000 04808080 14401500 18000001 f4000001 f4000580 80800212 10068080 800102>

总共 39 字节。

具体是什么意思?

每个代表的 39 个字节是什么意思?

可以转成AAC头吗?

参考:

Set a Magic Cookie for an Audio File

Set a Magic Cookie for a Playback Audio Queue

CoreAudio - how to determine the end of the playing aac file


非常感谢。

瑞恩

【问题讨论】:

难道没有人可以帮助我吗?请帮忙! 【参考方案1】:

将文件类型设置为 kAudioFileM4AType

AudioFileCreateWithURL (
            audioFileURL,
            kAudioFileM4AType,
            &audioFormat,
            kAudioFileFlags_EraseFile,
            &audioFileID
    );

【讨论】:

以上是关于音频队列服务录制到 .mp4 文件,无法播放。和魔术饼干问题的主要内容,如果未能解决你的问题,请参考以下文章

录制音频并保存到文档目录后无法使用 AVAudioPlayer 播放音频文件

Video 标签无法播放 mp4 的原因和解决办法

在播放 iOS 时从 HLS 流(视频)中提取/录制音频

使用Samsung录制的音频无法在iOS上播放

在 mp4 中使用 gstreamer h264 + aac 录制只会产生部分可播放的文件

以编程方式在 iOS 中录制的音频无法在 Windows 中播放