我注意到在使用MediaExtractor
时,由于音频样本比电影的视频帧多得多,因此使用One-Image-Decode / One-SoundSample-Decode / One-Image-Encode / OneSound-SoundSample-Encode不是一个好的策略,因为它总是有更多的音频样本排队等待编码。
使用MediaExtractor
使自定义PCM样本大小大于4096字节(或者上下文的大小)时,这是否可行? 8192会很棒。
有关:
int size = videoExtractor.ReadSampleData (decoderInputBuffer, 0);
大小永远是4096.
这意味着对于44100,立体声,16位声音,这代表+ - 23ms,这或多或少是每秒43.5个音频样本,有时是每秒24个图像。将PCM的样本大小加倍将允许视频始终具有相同或更多的音频以备编码。这甚至可以让我以24 fps同步它并使用AudioTrack
播放音频样本,这样就可以实现我的渲染的实时预览。
我试过了:
inputFormat.SetInteger (MediaFormat.KeyMaxInputSize, 8192);
但它看起来更像是一个优化设置来设置解码器的最小内部缓冲区。
尺寸是否可自定义?
[编辑]
目前,我在排队时为每个视频帧编码两个音频样本,并且视频编码速度的性能变化不明显。正如预测的那样几乎在同一时间结束。
while (_shouldCopyAudio && encodeMoreAudioThanVideo++ < 2) {
[...]
audioEncoder.QueueInputBuffer (encoderInputBufferIndex, 0, size,
pcmChunk.PresentationTimeUs, (MediaCodecBufferFlags)pcmChunk.Flags);