Конвертировать выходной файл 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)

0 ответов

Другие вопросы по тегам