gpt4 book ai didi

android - android 4.1 (API 16) 中捕获的缓冲区到缓冲区编码/解码

转载 作者:行者123 更新时间:2023-11-29 00:05:39 25 4
gpt4 key购买 nike

我搜索了几个小时..我只想对录制的电影进行有效的解码/编码。这甚至可能在 android 4.1 上吗?现在我只写了几 kb 到我的 mp4 文件。没有错误。

这将起作用后,我将使用 KEY_FRAME_RATE 和 KEY_I_FRAME_INTERVAL 将其置于慢动作中。

我使用 mediaExtractor 来配置 MediaCodec。我看到 3 个步骤(完整代码请参见要点):

1./

encoder.dequeueInputBuffer(5000);
extractor.readSampleData(inputBuf, offset);
ptsUsec2 = extractor.getSampleTime();
encoder.queueInputBuffer(inputBufIndex, ...);

2./

encoder.dequeueOutputBuffer(info, 5000);
ByteBuffer encodedData = encoderOutputBuffers[encoderStatus];
//i write encodedData to a FileOutputStream (to save the MP4);
decoder.queueInputBuffer(inputBufIndex, ...);

3./

decoder.dequeueOutputBuffer(info, 5000);
decoder.releaseOutputBuffer(decoderStatus, ...);

这是我从谷歌的 EncodeDecodeTest 文件中修改的完整函数: gist

感谢帮助,菲利克斯

最佳答案

一些附加信息可在 bigflake 上找到.特别是,FAQ item #9 .

不能保证从 MediaCodec 解码器输出的帧格式有用。许多流行的设备将数据解码为专有的 YUV 格式,这就是为什么 checkFrame()缓冲区到缓冲区测试中的函数不能始终验证结果。您希望 MediaCodec 编码器能够接受解码器输出的帧,但这并不能保证。

针对 API 18+ 的编码通常要容易得多,因为您可以使用 Surface 而不是 ByteBuffer。

当然,如果您只需要慢动作视频,则无需对 H.264 流进行解码和重新编码。您需要做的就是更改 .mp4 包装器中的演示时间戳。在 API 18+ 上,您可以使用 MediaExtractor 进行提取并立即使用 MediaMuxer 进行编码,而根本不涉及 MediaCodec。在 API 16 上,MediaMuxer 不存在,因此您需要一些其他方法将 H.264 包装为 .mp4。

当然,除非您厌恶可变帧率视频,在这种情况下,您需要使用重复的“慢动作”帧(并适当调整时间戳)对其进行重新编码。 KEY_FRAME_RATEKEY_I_FRAME_INTERVAL 值对您没有帮助——它们是在配置编码器时设置的,对帧时序没有影响。

关于android - android 4.1 (API 16) 中捕获的缓冲区到缓冲区编码/解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com