我通过latency = sampler.getLatency();
if (latency >2000) {
log.info("Save to file " + vars.get("workerId"));
}
类的advance()
方法在比预期更早的信号流结束时遇到问题(文件结束前的方式)。根据Google的参考,advance()方法在使用本地文件时可能会出错(这是我的情况 - MediaExtractor
对本地文件的影响):
提取本地文件时,advance()和。的行为 readSampleData(ByteBuffer,int)在存在时未定义 并发写入同一本地文件:
不幸的是,没有filePath
方法使用MediaExtractor
没有一句话。如何转到下一个样本?如果没有办法,那么我想知道如何在不使用advance()
的情况下提供inputBuffer
。
我的代码片段如下:
MediaExtractor
答案 0 :(得分:1)
在我的示例中,当我使用另一种语句构造时,MediaExtractor正常工作。我没有像你一样用 extractor.advance()检查 EOS 。尝试其他样品提供的方式:
int chunkSize = extractor.readSampleData(inputBuffer, 0);
if (chunkSize < 0) {
// End of stream -- send empty frame with EOS flag set.
codec.queueInputBuffer(inputBufferId, 0, 0, 0L,
MediaCodec.BUFFER_FLAG_END_OF_STREAM);
} else {
// No EOS -- continue
long presentationTimeUs = extractor.getSampleTime();
codec.queueInputBuffer(inputBufferId, 0, chunkSize,
presentationTimeUs, 0 /*flags*/);
extractor.advance();
}
BTW,MediaExtractor的指南讲述了这种用法。 Fadden在Grafika中使用MediaExtractor设置了MoviePlayer。但它在没有 MediaCodec.Callback 的情况下为解码器提供信息。