Java 将一个.flv视频文件附加到另一个.flv视频文件
我尝试将两个.flv视频文件合并为一个,但即使输出文件的大小正好是我尝试合并的两个视频的总和-1,当我尝试播放新的视频文件时,它会播放第一个文件。我确信这与在第一个视频读入输出流后设置结束标志有关,但我不确定如何修复并删除它,以便视频一直播放。我确保这两个文件在编码方面完全相同,因为我刚刚从obs录制了一些全屏颜色的测试视频。不管怎样,我该怎么解决这个问题呢Java 将一个.flv视频文件附加到另一个.flv视频文件,java,file,video,flv,bytestream,Java,File,Video,Flv,Bytestream,我尝试将两个.flv视频文件合并为一个,但即使输出文件的大小正好是我尝试合并的两个视频的总和-1,当我尝试播放新的视频文件时,它会播放第一个文件。我确信这与在第一个视频读入输出流后设置结束标志有关,但我不确定如何修复并删除它,以便视频一直播放。我确保这两个文件在编码方面完全相同,因为我刚刚从obs录制了一些全屏颜色的测试视频。不管怎样,我该怎么解决这个问题呢 package testing.space; import java.io.File; import java.io.FileInput
package testing.space;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class TestingSpace
{
public static void main(String args[])
{
final int BUFFERSIZE = 8192;
String introFilePath = "C:\\ExampleFile1Path\\vid1.flv";
String vodFilePath = "C:\\ExampleFile2Path\\vid2.flv";
String outputFilePath = "C:\\ExampleOutputPath\\output.flv";
try (
FileInputStream intro = new FileInputStream(new File(introFilePath));
FileInputStream vod = new FileInputStream(new File(vodFilePath));
FileOutputStream fout = new FileOutputStream(new File(outputFilePath));
)
{
byte[] introBuffer = new byte[BUFFERSIZE];
int introBytesRead;
while ((introBytesRead = intro.read(introBuffer)) > 0)
{
fout.write(introBuffer, 0, introBytesRead);
}
byte[] vodBuffer = new byte[BUFFERSIZE];
int vodBytesRead;
while ((vodBytesRead = vod.read(vodBuffer)) > 0)
{
fout.write(vodBuffer, 0, vodBytesRead);
}
}
catch (Exception e)
{
System.out.println("Something went wrong! Reason: " + e.getMessage());
}
}
}
为什么你这么确定,只需低级别附加两个视频文件就可以生成一个?你是如何“确保两个文件在编码方面完全相同”的?您是否删除了第二个文件中的flv头?是否删除了aac/avc序列头(假设使用avc/aac编解码器)。你重写时间戳了吗?你怎么确定有一个“结束标志”?我把这两个视频都录成了一个1920×1080全屏颜色的简单OBS输出。编码类型是通过OBS设置的,从第一个文件到第二个文件不会有任何更改。我没有对文件做任何特殊的处理,因为我对视频文件格式没有太多经验。基于输出文件是两个文件大小的总和-1,但只播放第一个剪辑,我假设它与表示文件结尾的某个字节有关