这里有一个音视频同步的系列博客,写得很好,贴出来以备后用:
https://blog.csdn.net/nonmarking/article/details/78747369
下面是我自己实现的一个小demo:
首先是MyMediaPlayer这个类,主要用于编解码器的初始化和提供对外层的调用:
package com.com.leilu.mediacodec;
import android.media.MediaCodec;
import android.view.Surface;
import java.io.IOException;
/**
* Created by ll on 2018/5/17.
*/
public class MyMediaPlayer implements IPlayer {
private MyMediaExtractor mVideoExtractor;
private MyMediaExtractor mAudioExtractor;
private MediaCodec mVideoMediaCodec;
private MediaCodec mAudiMediaCodec;
private OnPlayingStateListener mOnPlayingStateListener;
private Surface mSurface;
private DecodeThread mVideoDecodeThread;
private DecodeThread mAudioDecodeThread;
public MyMediaPlayer(String path) {
mVideoExtractor = new MyMediaExtractor(path, false);
mAudioExtractor = new MyMediaExtractor(path, true);
}
@Override
public void setSurface(Surface surface) {
mSurface = surface;
}
@Override
public void init() {
try {
mVideoExtractor.init();
initVideoMediaCodec();
mAudioExtractor.init();
initAudioMediaCodec();
} catch (IOException e) {
e.printStackTrace();
}
}
private void initAudioMediaCodec() throws IOException {
mAudiMediaCodec = MediaCodec.createDecoderByType(mAudioExtractor.getMimeType());
mAudiMediaCodec.configure(mAudioExtractor.getMediaFormat(), null, null, 0);
mAudiMediaCodec.start();
}
private void initVideoMediaCodec() throws IOException {
mVideoMediaCodec = MediaCodec.create