我在使用它时注意到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 位声音,这表示 +- 23 毫秒,即每秒或多或少 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);