Конвертировать выходной файл Android Mediarecorder в H264
У меня есть MediaRecorder
что дает мне File
в качестве выхода. Но мне нужно получить H264
из записи, чтобы использовать его с mp4parser
библиотека, которую можно найти здесь: mp4parser.
Mp4parser позволяет создать H264 object like this
:
H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl("video.h264"));
Теперь мне нужно сделать точно такой же H264
когда MediaRecorder
остановлен
private void setUpMediaRecorder() throws IOException {
if (null == parentactivity) {
return;
}
mMediaRecorder = new UMediaRecorder();
mMediaRecorder.setStateListener(new UMediaRecorder.UMediaRecorderStateListener() {
@Override
public void onStop() {
tempVideo = new File(mNextVideoAbsolutePath);
try {
// It gives the error here
H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl(mNextVideoAbsolutePath));
} catch (IOException e) {
e.printStackTrace();
}
}
});
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mNextVideoAbsolutePath = getVideoFilePath();
mMediaRecorder.setOutputFile(mNextVideoAbsolutePath);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoEncodingBitRate(500000); //Recomennded 500k
mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
int rotation = parentactivity.getWindowManager().getDefaultDisplay().getRotation();
switch (mSensorOrientation) {
case SENSOR_ORIENTATION_DEFAULT_DEGREES:
mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation));
break;
case SENSOR_ORIENTATION_INVERSE_DEGREES:
mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation));
break;
}
try {
mMediaRecorder.prepare();
} catch (IllegalStateException ex) {
ex.printStackTrace();
}
}
При попытке сделать H264
от любого tempVideo
или же mNextVideoAbsolutePath
, дает мне ошибки:
Оба выдают одну и ту же ошибку:
W/System.err: java.lang.IndexOutOfBoundsException: index=0 out of bounds (limit=0)
W/System.err: at java.nio.Buffer.checkIndex(Buffer.java:528)
at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:204)
at com.googlecode.mp4parser.authoring.tracks.h264.H264TrackImpl.getNalUnitHeader(H264TrackImpl.java:96)
W/System.err: at com.googlecode.mp4parser.authoring.tracks.h264.H264TrackImpl.readSamples(H264TrackImpl.java:285)
at com.googlecode.mp4parser.authoring.tracks.h264.H264TrackImpl.parse(H264TrackImpl.java:107)
at com.googlecode.mp4parser.authoring.tracks.h264.H264TrackImpl.<init>(H264TrackImpl.java:83)
at com.googlecode.mp4parser.authoring.tracks.h264.H264TrackImpl.<init>(H264TrackImpl.java:87)
at com.googlecode.mp4parser.authoring.tracks.h264.H264TrackImpl.<init>(H264TrackImpl.java:91)