- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何同时管理多个 GoPro 摄像机?我想同时串流三个 GoPro 摄像机的三个视频,并将视频记录在硬盘上。
我用 Java 为一个 GoPro 编写了一个工具,它可以正常工作。
请帮帮我!
这是代码:
public class GoProStreamer extends JFrame {
private static final String CAMERA_IP = "10.5.5.9";
private static int PORT = 8080;
private static DatagramSocket mOutgoingUdpSocket;
private Process streamingProcess;
private Process writeVideoProcess;
private KeepAliveThread mKeepAliveThread;
private JPanel contentPane;
public GoProStreamer() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(800, 10, 525, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JButton btnStop = new JButton("Stop stream");
JButton btnStart = new JButton("Start stream");
JButton btnRec = new JButton("Rec");
JButton btnStopRec = new JButton("Stop Rec");
// JButton btnZoomIn = new JButton("Zoom In sincrono");
// JButton btnZoomOut = new JButton("Zoom out sincrono");
// JButton btnZoomIn1 = new JButton("Zoom In Camera 1");
// JButton btnZoomOut1 = new JButton("Zoom out Camera 1");
// JButton btnZoomIn2 = new JButton("Zoom in Camera 2");
// JButton btnZoomOut2 = new JButton("Zoom out Camera 2");
// JButton btnZoomIn3 = new JButton("Zoom in camera 3");
// JButton btnZoomOut3 = new JButton("Zoom out Camera 3");
btnStop.setEnabled(false);
btnRec.setEnabled(false);
btnStopRec.setEnabled(false);
// btnZoomIn.setEnabled(false);
// btnZoomOut.setEnabled(false);
// btnZoomIn1.setEnabled(false);
// btnZoomOut1.setEnabled(false);
// btnZoomIn2.setEnabled(false);
// btnZoomOut2.setEnabled(false);
// btnZoomIn3.setEnabled(false);
// btnZoomOut3.setEnabled(false);
JPanel panel = new JPanel();
// JPanel panel2 = new JPanel();
// JPanel panel3 = new JPanel();
// JPanel panel4 = new JPanel();
panel.add(btnStart);
panel.add(btnStop);
panel.add(btnRec);
panel.add(btnStopRec);
// panel2.add(btnZoomIn1);
// panel3.add(btnZoomOut1);
// panel2.add(btnZoomIn2);
// panel3.add(btnZoomOut2);
// panel2.add(btnZoomIn3);
// panel3.add(btnZoomOut3);
// panel4.add(btnZoomIn);
// panel4.add(btnZoomOut);
contentPane.add(panel, BorderLayout.SOUTH);
// contentPane.add(panel2, BorderLayout.NORTH);
// contentPane.add(panel3, BorderLayout.CENTER);
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
startStreamService();
keepAlive();
startStreaming();
btnStart.setEnabled(false);
btnStop.setEnabled(true);
btnRec.setEnabled(true);
btnStopRec.setEnabled(false);
// btnZoomIn.setEnabled(true);
// btnZoomOut.setEnabled(true);
// btnZoomIn1.setEnabled(true);
// btnZoomOut1.setEnabled(true);
// btnZoomIn2.setEnabled(true);
// btnZoomOut2.setEnabled(true);
// btnZoomIn3.setEnabled(true);
// btnZoomOut3.setEnabled(true);
}
});
btnStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
stopStreaming();
stopKeepalive();
btnStart.setEnabled(true);
btnStop.setEnabled(false);
btnRec.setEnabled(false);
btnStopRec.setEnabled(false);
}
});
btnRec.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
startRec();
btnStart.setEnabled(false);
btnStop.setEnabled(false);
btnRec.setEnabled(false);
btnStopRec.setEnabled(true);
}
});
btnStopRec.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
stopRec();
btnStart.setEnabled(false);
btnStop.setEnabled(true);
btnRec.setEnabled(true);
btnStopRec.setEnabled(false);
}
});
}
private void startStreamService() {
HttpURLConnection localConnection = null;
try {
String str = "http://" + CAMERA_IP + "/gp/gpExec?p1=gpStreamA9&c1=restart";
localConnection = (HttpURLConnection) new URL(str).openConnection();
localConnection.addRequestProperty("Cache-Control", "no-cache");
localConnection.setConnectTimeout(5000);
localConnection.setReadTimeout(5000);
int i = localConnection.getResponseCode();
if (i >= 400) {
throw new IOException("sendGET HTTP error " + i);
}
}
catch (Exception e) {
}
if (localConnection != null) {
localConnection.disconnect();
}
}
@SuppressWarnings("static-access")
private void sendUdpCommand(int paramInt) throws SocketException, IOException {
Locale localLocale = Locale.US;
Object[] arrayOfObject = new Object[4];
arrayOfObject[0] = Integer.valueOf(0);
arrayOfObject[1] = Integer.valueOf(0);
arrayOfObject[2] = Integer.valueOf(paramInt);
arrayOfObject[3] = Double.valueOf(0.0D);
byte[] arrayOfByte = String.format(localLocale, "_GPHD_:%d:%d:%d:%1f\n", arrayOfObject).getBytes();
String str = CAMERA_IP;
int i = PORT;
DatagramPacket localDatagramPacket = new DatagramPacket(arrayOfByte, arrayOfByte.length, new InetSocketAddress(str, i));
this.mOutgoingUdpSocket.send(localDatagramPacket);
}
private void startStreaming() {
Thread threadStream = new Thread() {
@Override
public void run() {
try {
streamingProcess = Runtime.getRuntime().exec("ffmpeg-20150318-git-0f16dfd-win64-static\\bin\\ffplay -i http://10.5.5.9:8080/live/amba.m3u8");
InputStream errorStream = streamingProcess.getErrorStream();
byte[] data = new byte[1024];
int length = 0;
while ((length = errorStream.read(data, 0, data.length)) > 0) {
System.out.println(new String(data, 0, length));
System.out.println(System.currentTimeMillis());
}
} catch (IOException e) {
}
}
};
threadStream.start();
}
private void startRec() {
Thread threadRec = new Thread() {
@Override
public void run() {
try {
writeVideoProcess = Runtime.getRuntime().exec("ffmpeg-20150318-git-0f16dfd-win64-static\\bin\\ffmpeg -re -i http://10.5.5.9:8080/live/amba.m3u8 -c copy -an Video_GoPro_" + Math.random() + ".avi");
InputStream errorRec = writeVideoProcess.getErrorStream();
byte[] dataRec = new byte[1024];
int lengthRec = 0;
while ((lengthRec = errorRec.read(dataRec, 0, dataRec.length)) > 0) {
System.out.println(new String(dataRec, 0, lengthRec));
System.out.println(System.currentTimeMillis());
}
} catch (IOException e) {
}
}
};
threadRec.start();
}
private void keepAlive() {
mKeepAliveThread = new KeepAliveThread();
mKeepAliveThread.start();
}
class KeepAliveThread extends Thread {
public void run() {
try {
Thread.currentThread().setName("gopro");
if (mOutgoingUdpSocket == null) {
mOutgoingUdpSocket = new DatagramSocket();
}
while ((!Thread.currentThread().isInterrupted()) && (mOutgoingUdpSocket != null)) {
sendUdpCommand(2);
Thread.sleep(2500L);
}
}
catch (SocketException e) {
}
catch (InterruptedException e) {
}
catch (Exception e) {
}
}
}
private void stopStreaming() {
if (streamingProcess != null) {
streamingProcess.destroy();
streamingProcess = null;
}
stopKeepalive();
mOutgoingUdpSocket.disconnect();
mOutgoingUdpSocket.close();
}
private void stopRec() {
writeVideoProcess.destroy();
writeVideoProcess = null;
}
private void stopKeepalive() {
if (mKeepAliveThread != null) {
mKeepAliveThread.interrupt();
try {
mKeepAliveThread.join(10L);
mKeepAliveThread = null;
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public static void main(String[] args) {
GoProStreamer streamer = new GoProStreamer();
streamer.setVisible(true);
streamer.setTitle("Pannello di controllo");
}
最佳答案
恕我直言,这是一个物理问题:标准 wifi 卡无法连接到多个 wifi 网络。
如果您运行的是 Windows,这里有一个 Microsoft 实用程序 (http://research.microsoft.com/en-us/downloads/994abd5f-53d1-4dba-a9d8-8ba1dcccead7/) 似乎允许它。
Microsoft Research Virtual WiFi
Virtual WiFi helps a user connect to multiple IEEE 802.11 networks with one WiFi card. VIt works by exposing multiple virtual adapters, one for each wireless network to which connectivity is desired. Virtual WiFi uses a network hopping scheme to switch the wireless card across the desired wireless networks.
关于java - 同时管理多个 IP 摄像机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29541435/
如何同时管理多个 GoPro 摄像机?我想同时串流三个 GoPro 摄像机的三个视频,并将视频记录在硬盘上。 我用 Java 为一个 GoPro 编写了一个工具,它可以正常工作。 请帮帮我! 这是代码
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 去年关
当插入的外部麦克风插孔兼容 TRRS(通常是 2 个标准之一:CTIA 和 OMTP)时,大多数 Android 录音应用程序会自动识别音频输入。 尽管我可能会进行搜索,但我还没有遇到使用外接麦克风录
当 GoPro 相机插入我的 Fedora 笔记本电脑时,我可以通过 GUI 访问它 - 它显示为 StillImage(在设备下),但我似乎无法通过命令行访问它。按 CTRL+L 给出的位置为“gp
我正在尝试使用 Javafx 和 OpenCV 通过无线访问网络摄像头(Axis M1013),以便为我的 FRC 团队运行视觉处理。当我运行我的代码时,我可以访问我使用 Scenebuilder 制
我有一台带麦克风的大华网络摄像机。我想在现场广播之类的网站上播放音频流。 我有一个树莓派,我打算将它与 ffmpeg 一起使用,但我在弥合它与我的网站之间的差距以形成音频流方面并没有取得太大的成功。
试图通过FFmpeg正确抓取一个IP摄像机,海康威视品牌。 这就是 FFmpeg 的情况: "ffmpeg", "-rtsp_transport", "tcp",
我有 3 台 ONVIF 摄像机(博世、松下和安讯士)。我使用 WS-Discovery 查找摄像头,并且可以使用 GetDeviceInformation 从摄像头获取信息。我的问题是,当我尝试从中
我正在尝试使用 opencv java 从网络摄像头 (sony snc p1) 获取图像以进行运动检测。该流采用 mjpeg 格式,我正在使用 opencv 的 VideoCapture 尝试检索图
我正在尝试使用 OpenCV 和 Java 从 IP 摄像机访问 RTSP 视频流。我可以使用以下格式的 VLC 播放器访问流:rtsp://192.168.1.10:554/rtsp_live0 但
我正在尝试让 IP 摄像头流在浏览器中运行,并最终在电话中运行。但是,我在通过 ffmpeg 访问 RTSP 流时遇到了问题。 我正在运行下面的命令,替换正确的信息。我将相机更改为静态 IP 地址并将
任何人请帮助我理解这段代码。这是从 android 的 IPCamera 中获取的,我从 googlecode 中获取的。我试图弄清楚的代码是: public NanoHTTPD( int port,
我想通过 WIFI 从 PC 上控制一个基于 arduino 的小型机器人和一个 IP 摄像头,但我已经浏览互联网有一段时间了,我仍然不知道如何设置它。 我想在机器人上安装一个WIFI路由器,例如th
我有一台罗技 PTZ USB 摄像头。我已经使用 WebRtc 准备了视频通话功能。现在我需要的是在浏览器中添加平移、倾斜和缩放控件,以便用户可以根据需要控制摄像机。 是否可以使用JavaScript
#include #include #include int main(int, char**) { cv::VideoCapture vcap; cv::Mat image;
我使用了 onvifcpplib 库,您可以在以下位置找到它: https://github.com/veyesys/onvifcpplib我想用这个库编写 IP 摄像机发现(它可以在网络上找到 IP
我将在不同的计算机上使用多个客户端来查看 IP 摄像机流 url 的视频。因为网络摄像头对连接的客户端数量有限制,所以我想为此设置一个流媒体。我用谷歌搜索并尝试使用不同命令行选项的 GStreamer
我使用以下命令从 RTSP h264 编解码器获取帧。我无法从网络摄像机中获取帧。 $ ffmpeg -i rtsp://xxxx:yyy@192.168.1.yy:xx/tcp/av0_0 -f i
任何现有的 java 或 matlab 库 与背景进行图像相减图片 清除阴影 进行膨胀和腐 eclipse 来计算如何一个房间里有很多人? 最佳答案 OpenCV 将帮助您做您想做的事情,并且有 Ja
我正在使用以下命令通过 gstreamer 从 ip 摄像头获取图像。 gst-launch-0.10 -v rtspsrc location="rtsp://ipaddress :554/user=
我是一名优秀的程序员,十分优秀!