MediaCodec,MediaExtractor,TextureView+AudioTrack这四个类的作用就不说了。
https://blog.csdn.net/column/details/15450.html
主要思路流程:
MediaExtractor解封装,拿到H264数据。
MediaCodec把数据解码到Surface中。
TextureView展示Surface中的数据。
MediaExtractor,MediaCodec解码音频数据AudioTrack播放
当然这个还可以用TextureView.getBitmap()获取视频的一帧图片,保存到本地。
1.MediaExtractor解封装,拿到H264数据。
extractor = new MediaExtractor();
extractor.setDataSource(mVideoPath);
for (int i = 0; i < extractor.getTrackCount(); i++) {
MediaFormat format = extractor.getTrackFormat(i);
String mime = format.getString(MediaFormat.KEY_MIME);
if (mime.startsWith("video/")) {
extractor.selectTrack(i);
break;
}
}
......
int sampleSize = extractor.readSampleData(buffer, 0);
if (sampleSize < 0) {//把数据传给解码器
decoder.queueInputBuffer(inIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM);
isEOS = true;
}
else {
decoder.queueInputBuffer(inIndex, 0, sampleSize, extractor.getSampleTime(), 0);
extractor.advance();
}
2 .MediaCodec把数据解码到Surface中。
decoder.configure(format, mDecoderSurface, null, 0);
...
decoder.releaseOutputBuffer(outIndex, true);
3. TextureView展示Surface中的数据。
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1)
{
mSurface = new Surface(surfaceTexture);
new Thread(new Runnable()
{
@Override
public void run()
{
VideoDecoder = new VideoDecoder(Environment.getExternalStorageDirectory().getPath()+"/360.mp4",mSurface);
VideoDe

本文介绍了如何利用MediaExtractor进行视频解封装,MediaCodec进行解码,TextureView显示解码后的视频帧,以及AudioTrack播放音频数据,从而实现简易视频播放器的功能。详细步骤包括MediaExtractor获取H264数据,MediaCodec解码到Surface,TextureView展示视频,以及MediaExtractor和MediaCodec配合解码音频通过AudioTrack播放。
最低0.47元/天 解锁文章
853

被折叠的 条评论
为什么被折叠?



