Java 将两个剪辑与&;没有音频会导致音频在生成的视频中从头开始

Java 将两个剪辑与&;没有音频会导致音频在生成的视频中从头开始,java,android,recording,mp4parser,Java,Android,Recording,Mp4parser,我正在尝试使用MP4Parser将两个视频(mp4文件)合并到一个视频中,一个有音频,一个没有音频。生成的最终视频始终从一开始就有音频。 e、 g.第一个视频长度为20秒,没有音频。第二个视频长度为10秒,具有音频。 生成的最终视频长度为30秒,但音频将在视频开始时播放10秒(其余20秒将不会有任何音频),而开始时20秒没有音频,结束时10秒有音频 Movie[] clips = new Movie[2]; //location of the movie clip storage File m

我正在尝试使用MP4Parser将两个视频(mp4文件)合并到一个视频中,一个有音频,一个没有音频。生成的最终视频始终从一开始就有音频。 e、 g.第一个视频长度为20秒,没有音频。第二个视频长度为10秒,具有音频。 生成的最终视频长度为30秒,但音频将在视频开始时播放10秒(其余20秒将不会有任何音频),而开始时20秒没有音频,结束时10秒有音频

Movie[] clips = new Movie[2];

//location of the movie clip storage
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES), "TestMerge");

//Build the two clips into movies
Movie firstClip = MovieCreator.build(first);
Movie secondClip = MovieCreator.build(second);

//Add both movie clips
clips[0] = firstClip;
clips[1] = secondClip;

//List for audio and video tracks
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();

//Iterate all the movie clips and find the audio and videos
for (Movie movie: clips) {
    for (Track track : movie.getTracks()) {
        if (track.getHandler().equals("soun")) 
            audioTracks.add(track);                
        if (track.getHandler().equals("vide"))
            videoTracks.add(track);
    }
}

//Result movie from putting the audio and video together from the two clips
Movie result = new Movie();

//Append all audio and video
if (videoTracks.size() > 0)
    result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));

if (audioTracks.size() > 0) 
    result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
Movie[]clips=新电影[2];
//电影剪辑存储的位置
File mediaStorageDir=新文件(Environment.getExternalStoragePublicDirectory(
环境。目录_图片),“TestMerge”);
//将这两个剪辑制作成电影
Movie firstClip=MovieCreator.build(第一);
Movie secondClip=MovieCreator.build(秒);
//添加两个电影剪辑
clips[0]=firstClip;
片段[1]=第二片段;
//音频和视频曲目列表
List videoTracks=新建链接列表();
List audioTracks=新建链接列表();
//迭代所有电影剪辑并查找音频和视频
用于(电影:剪辑){
for(曲目:movie.getTracks()){
if(track.getHandler().equals(“soun”))
添加(音轨);
if(track.getHandler().equals(“vide”))
videoTracks.add(track);
}
}
//将两个剪辑中的音频和视频放在一起生成电影
电影结果=新电影();
//附加所有音频和视频
如果(videoTracks.size()>0)
result.addTrack(新的AppendTrack(videoTracks.toArray)(新的Track[videoTracks.size()));
如果(audioTracks.size()>0)
result.addTrack(新的AppendTrack(audioTracks.toArray)(新的曲目[audioTracks.size()));
}

我试着通过如下改变几行来添加静音音轨

//List for audio and video tracks
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();
Track audioSourceTrack = null;

    for (final Movie movie : inMovies) {
        for (final Track t : movie.getTracks()) {
            if (isAudioTrack(t)) {
                audioSourceTrack = t;
                break;
            }
        }
        if (audioSourceTrack != null) break;
    }

    //Iterate all the movie clips and find the audio and videos
for (Movie movie: clips) {
        if (movie.getTracks().size() == 1) {
            videoTracks.add(movie.getTracks().get(0));
            audioTracks.add(new SilenceTrackImpl(audioSourceTrack, movie.getTracks().get(0).getDuration() / 2));
        } else {
            for (final Track t : movie.getTracks()) {
                if (isAudioTrack(t)) {
                    audioTracks.add(t);
                }
                if (isVideoTrack(t)) {
                    videoTracks.add(t);
                }
            }
        }
    }
//音频和视频曲目列表
List videoTracks=新建链接列表();
List audioTracks=新建链接列表();
Track audioSourceTrack=null;
对于(最终电影:inMovies){
for(最终曲目t:movie.getTracks()){
if(isAudioTrack(t)){
audioSourceTrack=t;
打破
}
}
如果(audioSourceTrack!=null)中断;
}
//迭代所有电影剪辑并查找音频和视频
用于(电影:剪辑){
if(movie.getTracks().size()==1){
添加(movie.getTracks().get(0));
add(新的SilenceTrackImpl(audioSourceTrack,movie.getTracks().get(0.getDuration()/2));
}否则{
for(最终曲目t:movie.getTracks()){
if(isAudioTrack(t)){
添加(t);
}
if(isVideoTrack(t)){
视频跟踪。添加(t);
}
}
}
}

我可以通过在静音片段中添加静音曲目来实现这一点。问题是react本地视频没有正确播放静音曲目,因此Q播放器无法正常播放。我不得不对视频进行转码,以查看附加的静音是否正常工作