我有類的advance()
方法提前發送信號的流結束的問題(文件結束之前的方式)。據谷歌引用advance()方法可以使用本地文件時,工作錯誤(這是我的情況 - filePath
ponits到本地文件):MediaExtractor.advance() - 流結束的信號早於預期
在提取本地文件,事先的行爲()和 readSampleData(字節緩衝區,INT)中的 併發寫入到相同的本地文件存在是不確定的:
不幸的是,有關使用MediaExtractor
而不advance()
方法沒有單一的字。如何移動到下一個樣本?如果沒有辦法做到這一點,那麼我想知道如何喂inputBuffer
而不使用MediaExtractor
。
下面我的代碼片段:
if(Build.VERSION.SDK_INT >= 21) {
try {
codec = MediaCodec.createByCodecName("OMX.google.mp3.decoder");
} catch (IOException e) {
e.printStackTrace();
}
final MediaExtractor extractor = new MediaExtractor();
try {
extractor.setDataSource(filePath); //local file
Log.i("filePath", String.valueOf(filePath));
extractor.selectTrack(0);
} catch (IOException e) {
e.printStackTrace();
}
codec.setCallback(new MediaCodec.Callback() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onInputBufferAvailable(MediaCodec mc, int inputBufferId) {
ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);
// fill inputBuffer with valid data
int sampleSize = extractor.readSampleData(inputBuffer,0);
if(extractor.advance) {
codec.queueInputBuffer(inputBufferId, 0, sampleSize, 0, 0);
} else {
// EOS
codec.queueInputBuffer(inputBufferId, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
codec.stop();
codec.release();
}
}
// more callbacks
};
}
This Works。那麼你能告訴我這是什麼意思'當提取本地文件時,advance()和readSampleData(ByteBuffer,int)的行爲在併發寫入同一本地文件時未定義。根據這個參考,你的代碼不應該工作,但它確實有效。 – Kristopher
在開發人員指南中閱讀時,我也感到困惑。但我試過樣品,他們的行爲是確定的。所以我只是跳過這個信息:) – Sheikh