我试图打开一个视频文件与OpenCv videoccapture存储在HDFS上。这是一个使用Hadoop RecordReader的案例,我可以找到文件,但在videoccapture中不起作用。对解决这个问题有什么帮助吗?
MyRecordReader.java
public void initialize(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException {
// Set the current frame to 0 and the total number of frames to the length of the video
currentFrame = 0;
System.out.printf("%s#initialize(%s, %s)n", this.toString(), split.toString(), context.getJobName());
Configuration conf = context.getConfiguration();
FileSystem fileSystem = FileSystem.get(conf);
String pathString = "/user/usermr/input/projeto/traffic.mp4";
Path path = new Path(pathString);
if (fileSystem.exists(path))
System.out.println("Found video : " + pathString);
cap = new VideoCapture(path.toString());
if ( !cap.isOpened() )
System.out.println("Cannot open the video file");
System.out.println("Frames: " + cap.get(Videoio.CAP_PROP_FRAME_COUNT));
}
输出:输入图片描述
VideoCapture
参数假设一个本地文件路径,而不是远程文件路径,更不用说引用一个被分割成块并分布在多个服务器(datanode)之间的文件了。
HDFS不是"媒体服务器"的理想系统。用于存储视频资产。您需要下载整个文件,如注释中所述,然后才能处理它。