本文整理了Java中android.media.MediaExtractor.getSampleTrackIndex()
方法的一些代码示例,展示了MediaExtractor.getSampleTrackIndex()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。MediaExtractor.getSampleTrackIndex()
方法的具体详情如下:
包路径:android.media.MediaExtractor
类名称:MediaExtractor
方法名:getSampleTrackIndex
暂无
代码示例来源:origin: guoxiaoxing/phoenix
@SuppressLint("Assert")
@Override
public boolean stepPipeline() {
if (mIsEOS) return false;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex < 0) {
mBuffer.clear();
mBufferInfo.set(0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
mMuxer.writeSampleData(mSampleType, mBuffer, mBufferInfo);
mIsEOS = true;
return true;
}
if (trackIndex != mTrackIndex) return false;
mBuffer.clear();
int sampleSize = mExtractor.readSampleData(mBuffer, 0);
assert sampleSize <= mBufferSize;
boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
int flags = isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0;
mBufferInfo.set(0, sampleSize, mExtractor.getSampleTime(), flags);
mMuxer.writeSampleData(mSampleType, mBuffer, mBufferInfo);
mWrittenPresentationTimeUs = mBufferInfo.presentationTimeUs;
mExtractor.advance();
return true;
}
代码示例来源:origin: guoxiaoxing/phoenix
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mExtractor.readSampleData(mDecoderInputBuffers[result], 0);
boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: guoxiaoxing/phoenix
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
final int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = mExtractor.readSampleData(mDecoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: MasayukiSuda/GPUVideo-android
@SuppressLint("Assert")
public boolean stepPipeline() {
if (isEOS) return false;
int trackIndex = mediaExtractor.getSampleTrackIndex();
if (trackIndex < 0) {
buffer.clear();
bufferInfo.set(0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
muxRender.writeSampleData(sampleType, buffer, bufferInfo);
isEOS = true;
return true;
}
if (trackIndex != this.trackIndex) return false;
buffer.clear();
int sampleSize = mediaExtractor.readSampleData(buffer, 0);
assert sampleSize <= bufferSize;
boolean isKeyFrame = (mediaExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
int flags = isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0;
bufferInfo.set(0, sampleSize, mediaExtractor.getSampleTime(), flags);
muxRender.writeSampleData(sampleType, buffer, bufferInfo);
writtenPresentationTimeUs = bufferInfo.presentationTimeUs;
mediaExtractor.advance();
return true;
}
代码示例来源:origin: LLhon/Android-Video-Editor
@SuppressLint("Assert")
public boolean stepPipeline() {
if (isEOS) return false;
int trackIndex = mediaExtractor.getSampleTrackIndex();
if (trackIndex < 0) {
buffer.clear();
bufferInfo.set(0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
muxRender.writeSampleData(sampleType, buffer, bufferInfo);
isEOS = true;
return true;
}
if (trackIndex != this.trackIndex) return false;
buffer.clear();
int sampleSize = mediaExtractor.readSampleData(buffer, 0);
assert sampleSize <= bufferSize;
boolean isKeyFrame = (mediaExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
int flags = isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0;
bufferInfo.set(0, sampleSize, mediaExtractor.getSampleTime(), flags);
muxRender.writeSampleData(sampleType, buffer, bufferInfo);
writtenPresentationTimeUs = bufferInfo.presentationTimeUs;
mediaExtractor.advance();
return true;
}
代码示例来源:origin: ypresto/android-transcoder
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mExtractor.readSampleData(mDecoderInputBuffers[result], 0);
boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: MasayukiSuda/Mp4Composer-android
private int drainExtractor() {
if (isExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mediaExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != this.trackIndex) {
return DRAIN_STATE_NONE;
}
int result = decoder.dequeueInputBuffer(0);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
isExtractorEOS = true;
decoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mediaExtractor.readSampleData(decoderInputBuffers[result], 0);
boolean isKeyFrame = (mediaExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
decoder.queueInputBuffer(result, 0, sampleSize, mediaExtractor.getSampleTime() / timeScale, isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mediaExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: windrunnerlihuan/DogCamera
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mExtractor.readSampleData(mDecoderInputBuffers[result], 0);
boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: GoBelieveIO/im_android
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mExtractor.readSampleData(mDecoderInputBuffers[result], 0);
boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: MasayukiSuda/GPUVideo-android
private int drainExtractor() {
if (isExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mediaExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != this.trackIndex) {
return DRAIN_STATE_NONE;
}
int result = decoder.dequeueInputBuffer(0);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
isExtractorEOS = true;
decoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mediaExtractor.readSampleData(decoderInputBuffers[result], 0);
boolean isKeyFrame = (mediaExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
decoder.queueInputBuffer(result, 0, sampleSize, mediaExtractor.getSampleTime() / timeScale, isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mediaExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: kriztan/Pix-Art-Messenger
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mExtractor.readSampleData(mDecoderInputBuffers[result], 0);
boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: LLhon/Android-Video-Editor
private int drainExtractor() {
if (isExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mediaExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != this.trackIndex) {
return DRAIN_STATE_NONE;
}
int result = decoder.dequeueInputBuffer(0);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
isExtractorEOS = true;
decoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
int sampleSize = mediaExtractor.readSampleData(decoderInputBuffers[result], 0);
boolean isKeyFrame = (mediaExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
decoder.queueInputBuffer(result, 0, sampleSize, mediaExtractor.getSampleTime() / timeScale, isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mediaExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: stackoverflow.com
MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(...);
int numTracks = extractor.getTrackCount();
for (int i = 0; i < numTracks; ++i) {
MediaFormat format = extractor.getTrackFormat(i);
String mime = format.getString(MediaFormat.KEY_MIME);
if (weAreInterestedInThisTrack) {
extractor.selectTrack(i);
}
}
ByteBuffer inputBuffer = ByteBuffer.allocate(...)
while (extractor.readSampleData(inputBuffer, ...) >= 0) {
int trackIndex = extractor.getSampleTrackIndex();
long presentationTimeUs = extractor.getSampleTime();
...
extractor.advance();
}
extractor.release();
extractor = null;
代码示例来源:origin: LLhon/Android-Video-Editor
private int drainExtractor(long timeoutUs) {
if (isExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = extractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != this.trackIndex) {
return DRAIN_STATE_NONE;
}
final int result = decoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
isExtractorEOS = true;
decoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = extractor.readSampleData(decoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (extractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
decoder.queueInputBuffer(result, 0, sampleSize, extractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
extractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: GoBelieveIO/im_android
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
final int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = mExtractor.readSampleData(mDecoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: ypresto/android-transcoder
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
final int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = mExtractor.readSampleData(mDecoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: MasayukiSuda/Mp4Composer-android
private int drainExtractor(long timeoutUs) {
if (isExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = extractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != this.trackIndex) {
return DRAIN_STATE_NONE;
}
final int result = decoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
isExtractorEOS = true;
decoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = extractor.readSampleData(decoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (extractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
decoder.queueInputBuffer(result, 0, sampleSize, extractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
extractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: windrunnerlihuan/DogCamera
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
final int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = mExtractor.readSampleData(mDecoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: MasayukiSuda/GPUVideo-android
private int drainExtractor(long timeoutUs) {
if (isExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = extractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != this.trackIndex) {
return DRAIN_STATE_NONE;
}
final int result = decoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
isExtractorEOS = true;
decoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = extractor.readSampleData(decoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (extractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
decoder.queueInputBuffer(result, 0, sampleSize, extractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
extractor.advance();
return DRAIN_STATE_CONSUMED;
}
代码示例来源:origin: kriztan/Pix-Art-Messenger
private int drainExtractor(long timeoutUs) {
if (mIsExtractorEOS) return DRAIN_STATE_NONE;
int trackIndex = mExtractor.getSampleTrackIndex();
if (trackIndex >= 0 && trackIndex != mTrackIndex) {
return DRAIN_STATE_NONE;
}
final int result = mDecoder.dequeueInputBuffer(timeoutUs);
if (result < 0) return DRAIN_STATE_NONE;
if (trackIndex < 0) {
mIsExtractorEOS = true;
mDecoder.queueInputBuffer(result, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
return DRAIN_STATE_NONE;
}
final int sampleSize = mExtractor.readSampleData(mDecoderBuffers.getInputBuffer(result), 0);
final boolean isKeyFrame = (mExtractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0;
mDecoder.queueInputBuffer(result, 0, sampleSize, mExtractor.getSampleTime(), isKeyFrame ? MediaCodec.BUFFER_FLAG_SYNC_FRAME : 0);
mExtractor.advance();
return DRAIN_STATE_CONSUMED;
}
内容来源于网络,如有侵权,请联系作者删除!