AC3 音频 FramesPerPacket 大小

Posted

技术标签:

【中文标题】AC3 音频 FramesPerPacket 大小【英文标题】:AC3 audio FramesPerPacket size 【发布时间】:2012-07-28 20:19:22 【问题描述】:

我确实通过以下方式创建音频队列

AudioQueueNewOutput(&audioFormat, audioQueueOutputCallback, (__bridge void*)self, NULL, NULL, 0, &mAudioQueue)

格式如下

audioFormat.mFormatID = kAudioFormatAC3;                
audioFormat.mBytesPerPacket = 0;
audioFormat.mFramesPerPacket = mavfContext->streams[audio_index]->codec->frame_size;
audioFormat.mBytesPerFrame = 0;
audioFormat.mChannelsPerFrame = mavfContext->streams[audio_index]->codec->channels;
audioFormat.mBitsPerChannel = 0;

创建失败并出现 kAudioFormatUnsupportedDataFormatError。 我检查了mavfContext->streams[audio_index]->codec->frame_size 是 0。 那么 ac3 media 的 mFramesPerPacket 是否有任何标准值?

【问题讨论】:

我相信答案是否定的(如果文件是可变比特率,则它只有 0,AFAIK 在 AC3 中不常见),但更大的问题是为什么您的格式无效。 mavfContext 结构是从哪里来的,它可能会让你误入歧途吗?如果您直接从磁盘读取音频数据,AudioQueue 文档建议使用 AudioFileGetProperty()(使用 kAudioFilePropertyDataFormat)获取 ASBD,这样可以为您提供所需的所有信息,而无需进行任何硬编码。 数据格式是从ffmpeg压缩而来的。 mChannelsPerFrame 不为零。所以你的建议是错误是因为mFramesPerPacket 为 0 引起的? 【参考方案1】:

AC3 帧大小应该是 256 * 个通道,因此我希望在这里:

mFramesPerPacket = 256 * mChannelsPerFrame.

【讨论】:

以上是关于AC3 音频 FramesPerPacket 大小的主要内容,如果未能解决你的问题,请参考以下文章

规范化 AC3 文件 [关闭]

怎样才能让windows media player能播放H264编码的AVI文件(音频是AC3)

我有一部带有4K(HEVC Main 10 HDR)视频和DTS-HD MA 7.1音频的电影,我希望保持视频和音频的原样,但要在EAC3或必要时在AC3中添加第二音频轨道立体声

视频相关术语

怎么把mp3转成aac格式?

将音频样本转换为 AVFrame FFmpeg & C++