背景:
我一直在努力实现像录像机这样的Vine两天。 首先,我尝试了MediaRecorder。 但我需要的视频可能是由小视频片段组成的。 此类不能用于录制短时视频剪辑。 然后我找到了MediaCodec,FFmpeg和JavaCV。 FFmpeg和JavaCV可以解决这个问题。 但我必须使用许多库文件编译我的项目。 它会生成一个非常大的APK文件。 所以我更喜欢通过MediaCodec实现它,尽管这个类只能在Android 4.1之后使用。 90%的用户会满意。
结果:
我终于得到了编码文件,但无法播放。 我通过FFprobe检查了信息,结果如下:
输入#0,h264,来自'test.mp4':持续时间:N / A,比特率:N / A流#0:0:视频:h264(基线),yuv420p,640x480,25 fps,25 tbr,1200k tbn, 50 tbc
我不太了解H.264编码的机制。
码:
从此链接修改
public class AvcEncoder {
private static String TAG = AvcEncoder.class.getSimpleName();
private MediaCodec mediaCodec;
private BufferedOutputStream outputStream;
private int mWidth, mHeight;
private byte[] mDestData;
public AvcEncoder(int w, int h) {
mWidth = w;
mHeight = h;
Log.d(TAG, "Thread Id: " + Thread.currentThread().getId());
File f = new File("/sdcard/videos/test.mp4");