【发布时间】:2021-11-14 22:53:07
【问题描述】:
使用 OpenCV 和 Java,我可以使用 Java JFrame 应用程序实时流式传输来自摄像头的视频,这意味着访问摄像头并从摄像头捕获视频就像 好吧。
我想将视频保存到文件中,下面是我的代码:
import ...;
public final class Main {
VideoCapture videoCapture;
Size size;
Mat matrix;
VideoWriter videoWriter;
public Main() throws SocketException, UnknownHostException, IOException {
System.load( "C:\\opencv\\build\\java\\x64\\" + Core.NATIVE_LIBRARY_NAME + ".dll");
System.load( "C:\\opencv\\build\\bin\\opencv_videoio_ffmpeg453_64.dll");
videoCapture = new VideoCapture(CAMERA_ID, CV_CAP_DSHOW);
if (videoCapture.isOpened()) {
Mat m = new Mat();
videoCapture.read(m);
int fourcc = VideoWriter.fourcc('H','2','6','4');
// int fourcc = VideoWriter.fourcc('x','2','6','4'); // Have tried, did not work.
// int fource = (int) videoCapture.get(Videoio.CAP_PROP_FOURCC); // Have tried, did not work.
// int fourcc = VideoWriter.fourcc('m','j','p','g'); // Have tried, did not work.
// int fourcc = VideoWriter.fourcc('D', 'I', 'V', 'X'); // Have tried, did not work.
double fps = videoCapture.get(Videoio.CAP_PROP_FPS);
Size s = new Size((int) videoCapture.get(Videoio.CAP_PROP_FRAME_WIDTH), (int) videoCapture.get(Videoio.CAP_PROP_FRAME_HEIGHT));
videoWriter = new VideoWriter("C:\\Users\\oconnor\\Documents\\bbbbbbbbbbbbb_1000.h264", fourcc, fps, s, true);
// Have tried, did not work
// videoWriter = new VideoWriter("C:\\Users\\oconnor\\Documents\\bbbbbbbbbbbbb_1000.avi", fourcc, fps, s, true);
// videoWriter = new VideoWriter("C:\\Users\\oconnor\\Documents\\bbbbbbbbbbbbb_1000.Mjpeg", fourcc, fps, s, true);
// videoWriter = new VideoWriter("C:\\Users\\oconnor\\Documents\\bbbbbbbbbbbbb_1000.mjpeg", fourcc, fps, s, true);
while (videoCapture.read(m)) {
videoWriter.write(m);
// Have tried, did not work.
// int i = 0;
// Mat clonedMatrix = m.clone();
// Imgproc.putText(clonedMatrix, ("frame" + i), new Point(100,100), 1, 2, new Scalar(200,0,0), 3);
// videoWriter.write(clonedMatrix);
// i++;
}
}
videoCapture.release();
videoWriter.release();
}
}
当我运行上述代码时,完全没有错误,并且文件bbbbbbbbbbbbb_1000.h264也已创建,但VLC Media Player和Windows Media Player无法播放视频。
我使用的是 Windows 10。以下是 OpenCV 4.5.3 构建信息。我没有自己从源代码构建库。
Video I/O:
DC1394: NO
FFMPEG: YES (prebuilt binaries)
avcodec: YES (58.134.100)
avformat: YES (58.76.100)
avutil: YES (56.70.100)
swscale: YES (5.9.100)
avresample: YES (4.0.0)
GStreamer: NO
DirectShow: YES
Media Foundation: YES
DXVA: NO
如何使用 OpenCV 和 Java 将视频保存到文件中。它可以在Mjpeg 或h264 或其他任何位置,只要我可以播放文件即可。
【问题讨论】:
-
报告
cv::getBuildInformation()的输出。 AVI 中的 MJPEG 始终有效,因为它内置于 OpenCV 中。任何其他格式都需要后端,这意味着第三方库。 OpenCV 通常(但不总是!)使用 ffmpeg 构建。 -
OpenCV 构建信息添加在上面的问题中。我可以在我的 Widows 10 上运行
ffmpeg -f dshow -i video="HP HD Camera" -f mpegts -flush_packets 0 udp://ipaddress:port?query_string来测试通过 UDP 进行的实时流式传输,并且它可以工作。我需要什么才能将视频保存到 h264 文件中?
标签: java opencv video h.264 mjpeg