Cant append to video in Android

2019-08-13 02:55发布

问题:

I am using an mp4 parser for appending video. My problem is that I'm not able to append videos. I am getting such errors as BufferUnderFlow Exception. Can anyone tell me where I might have made a mistake?

This is my code:

public class MainActivity extends Activity
{
    Button b1;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1 = (Button)findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener()
        {

            @SuppressWarnings("resource")
            @Override
            public void onClick(View v)
            {
                try 
                {
                    String f1 = Environment.getExternalStorageDirectory()+ "/wish_by_video.mp4";
                    String f2 = Environment.getExternalStorageDirectory() + "/wish_by_video.mp4";
                    String f3 = Environment.getExternalStorageDirectory() + "/wish_by_video.mp4";

                    Movie[] inMovies = new Movie[]{
                            MovieCreator.build(new FileInputStream(f1).getChannel()),
                            MovieCreator.build(new FileInputStream(f2).getChannel()),
                            MovieCreator.build(new FileInputStream(f3).getChannel())
                         };

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

                    for (Movie m : inMovies) {
                        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();

                    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[3])));
                    }

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


                    @SuppressWarnings("resource")
                    FileChannel fc = new RandomAccessFile(String.format(Environment.getExternalStorageDirectory()+"output.mp4"), "rw").getChannel();
                    fc.position(0);
                    out.getBox(fc);
                    fc.close();

                } 
                catch (FileNotFoundException e) 
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });


    }
}