Question

I am using the mp4Parser isoviewer-1.0-RC-35.jar to combine clips recorded with the android MediaRecorder. The clips seem to get combined correctly by listening to the audio tracks, but the video stays on one frame and the time code stays at zero on play back.

Media Recorder Code at time individual clips are created

mediaRecorder = new MediaRecorder();

        myCamera.lock();

        myCamera.unlock();

        String clipLocation = file.getAbsolutePath();
        _moviePaths.add(clipLocation);
        // Please maintain sequence of following code.

        // If you change sequence it will not work.
        mediaRecorder.setCamera(myCamera);
        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

        if (facingBack) {
            mediaRecorder.setOrientationHint(90);
        } else {
            mediaRecorder.setOrientationHint(270);
        }

        // Log.v("cam","supported vid sizes: "+
        // myCamera.getParameters().getSupportedVideoSizes());
        CamcorderProfile profile = CamcorderProfile
                .get(CamcorderProfile.QUALITY_720P);

        // mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
         //mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        // mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setMaxDuration(g.kMaxVideoDurationInMiliseconds);// 15seconds
        mediaRecorder.setProfile(profile);
        mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
        mediaRecorder.setOutputFile(path + filename);
        mediaRecorder.prepare();
        startTimer();
        mediaRecorder.start();

    }

Method i am using to combine the clips:

protected void combineClips() throws IOException{

        for(int i=0; i<_moviePaths.size();i++){

                Movie tm = MovieCreator.build(_moviePaths.get(i));
                _clips.add(tm);

        }

         List<Track> videoTracks = new LinkedList<Track>();
         List<Track> audioTracks = new LinkedList<Track>();

            for (Movie m : _clips) {
                for (Track t : m.getTracks()) {
                    if (t.getHandler().equals("soun")) {
                        audioTracks.add(t);
                    }
                    if (t.getHandler().equals("vide")) {
                        videoTracks.add(t);
                    }
                }
            }

            Movie result = new Movie();
            Log.v("cam", "adding:"+audioTracks.size()+" audio tracks and "+videoTracks.size()+" video tracks");
            if (audioTracks.size() > 0) {
                result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
            }
            if (videoTracks.size() > 0) {
                result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
            }

            Container out = new DefaultMp4Builder().build(result);

            FileChannel fc = new RandomAccessFile(String.format(videoFolder.getPath()+"/output.mp4"), "rw").getChannel();
            out.writeContainer(fc);
            fc.close();

    }
Was it helpful?

Solution

Apparently the problem had something to do with the library: isoviewer-1.0-RC-35.jar. I replaced it with isoviewer-1.0-RC-27.jar and now everything is just dandy!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top