根据AVFrame的分类,对于音频,lineSize是每个平面的字节大小,并且只能设置linesize [0]。但是,我不确定linezie [0]是保持每个平面缓冲区大小,还是它是完整的缓冲区大小,我们必须将其除以通道,以获得每个平面缓冲区大小。
例如,当我打电话时
dbContext.SaveChanges
对于iDesiredNoOfChannels = 2,iAudioSamples = 1024& iDesiredFormat = AV_SAMPLE_FMT_FLTP data_size = 8192。非常简单,因为每个样本是4个字节,并且由于有2个通道,所以总存储器将是(1024 * 4 * 2)个字节。因此,对于平面音频,lineSize [0]应为4096。数据[0]&数据[1]应该是每个大小为4096.但是,pFrame-> lineSize [0]给出8192.因此,为了得到每个平面的大小,我必须做pFrame-> lineSize [0] / pFrame->通道。这种行为与文档建议的不同或者我对文档的理解是否错误。
答案 0 :(得分:0)
老问题,但我想无论如何我都会为那些可能想知道同样事情的人回答。
在所有音频 AVFrames 中,只能设置 linesize[0] 并且它们都需要是相同的大小。你不应该使用 linesize[1] 等。我不知道他们为什么选择这样做,因为它与视频帧不一致,但无论如何。请记住,是交错还是平面仅 linesize[0] 很重要,因此您必须除以平面的通道数。