有这种情况: 在文件系统上有FFmpeg程序,它将视频源从网络摄像头流式传输到youtube服务器。 FFmpeg支持文本过滤器,您可以在其中指定从哪个文件中读取一些静态文本然后重叠"覆盖"通过视频。问题是如果文件不存在或者其他人正在写入此文件,则FFmpeg可能会崩溃。
在Java中,使用StandardCopyOption.ATOMIC_MOVE选项完成了此示例:
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class FileMover {
private void runIt() {
Random r = new Random();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
try
{
PrintWriter writer = new PrintWriter("c:/video/temppodatki.txt", "UTF-8");
writer.println("Temp: " + ((int)(Math.random() * (40 - 10)) + 10)+ " °C");
writer.println("Sla: " + ((int)(Math.random() * (37 - 30)) + 30)+ " PSU");
writer.close();
//premaknemo fajl..
Path sourceFile = Paths.get("c:/video/temppodatki.txt");
Path destinationFile = Paths.get("c:/video/podatki.txt");
Files.move(sourceFile, destinationFile, StandardCopyOption.ATOMIC_MOVE);
System.out.println("move.." + new Date().toString());
}
catch(Exception ex)
{
}
}
}, 0, 5 * (1000 * 1));
}
public static void main(String[] args) {
new FileMover().runIt();
}
}
此脚本写入tmp文件,然后移动到FFmpeg读取的文件。 但问题仍然是相同的,因为随机的FFmpeg会崩溃:
还有其他方法吗?