Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Захват видео с IP камеры / 14 сообщений из 14, страница 1 из 1
12.08.2014, 13:23
    #38718104
Konstantin1706
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Здравствуйте. Передо мной стоит задача, необходимо считывать с IP камеры данные. Может кто знает, какими средствами можно реализовать?
...
Рейтинг: 0 / 0
12.08.2014, 16:12
    #38718472
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Скорее всего надо ковырять название производителя камеры. Потом стандарт в котором она вещает.
...
Рейтинг: 0 / 0
12.08.2014, 16:56
    #38718574
Konstantin1706
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Как я понял камера китайская (ipc-bn20w3130t) и толком про нее ничего нет. Находил, что можно использовать JMF, а также JavaCV, но, понятной мне, документации, а также примеров, я не нашел. Есть еще варианты?
...
Рейтинг: 0 / 0
13.08.2014, 10:33
    #38719044
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
смотреть произоводителя.
а если производитель не представляет документацию к камере и проколам вещения то это плохо.
много лучше если есть sdk от производителя.

а так только wireshark - смотреть на сигнатуру данных попробовать определить протокол (если повезет может быть он стандартизирован и где то получиться найти его описание и библиотеки к нему)
...
Рейтинг: 0 / 0
13.08.2014, 10:36
    #38719051
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
можно начать отсюда http://www.onvif.org/ эта какмера вроде как совместимая.

только не проще купить сразу камеру где поддержка получше
...
Рейтинг: 0 / 0
13.08.2014, 10:39
    #38719061
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
вдогонку http://sourceforge.net/projects/onvifdm/
http://stackoverflow.com/questions/20535199/onvif-beginning-of-device-discovery
http://www.openipcam.com/files/ONVIF/ONVIF_WG-APG-Application_Programmer's_Guide.pdf

на стаковерфлоу репортуют что успешно получили данные с камеры. она вроде как через веб сервис данные передет
...
Рейтинг: 0 / 0
13.08.2014, 13:23
    #38719301
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Konstantin1706, ну возьми любой туториал по JMF запусти
и посмотри что будет. Делов-то на 10 минут.
...
Рейтинг: 0 / 0
13.08.2014, 17:37
    #38719679
Konstantin1706
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Единственное стоящее на тему считывание информации с IP камер средствами JMF это следующий код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.applet.*;
 
public class IPCamera extends Applet implements Runnable
{
     public boolean useMJPGStream = true;
     String appletToLoad;
     Thread appletThread;
 
     public String jpgURL = "http://192.168.1.100/cgi-bin/video.jpg";
     public String mjpgURL = "http://192.168.1.100/video.cgi";
 
     DataInputStream dis;
     private Image image=null;
     public Dimension imageSize = null;
     public boolean connected = false;
     private boolean initCompleted = false;
     HttpURLConnection huc=null;
     Component parent;
 
     /** Creates a new instance of AxisCamera */
      public IPCamera (Component parent_)      //
     {                                   //
          parent = parent_;               //
     }                                   //
 
     public void connect(){
          try{
               URL u = new URL(useMJPGStream?mjpgURL:jpgURL);
               huc = (HttpURLConnection) u.openConnection();
               //System.out.println(huc.getContentType());
               InputStream is = huc.getInputStream();
               connected = true;
               BufferedInputStream bis = new BufferedInputStream(is);
               dis= new DataInputStream(bis);
               if(!initCompleted)
                    initDisplay();
          }
          catch(IOException e){
               //incase no connection exists wait and try again, instead of printing the error
               try{
                    huc.disconnect();
                    Thread.sleep(60);
               }catch(InterruptedException ie){
                    huc.disconnect();connect();
               }
               connect();
          }catch(Exception e){;}
     }
 
     public void initDisplay(){
          //setup the display
          if (useMJPGStream)
               readMJPGStream();
          else{
               readJPG();
               disconnect();
          }
          imageSize = new Dimension(image.getWidth(this), image.getHeight(this));
          setPreferredSize(imageSize);      //
          parent.setSize(imageSize);        //
          parent.validate();          //
          initCompleted = true;
     }
 
     public void disconnect(){
          try{
               if(connected){
                    dis.close();
                    connected = false;
               }
          }catch(Exception e){;}
     }
 
     public void init(){
          System.out.println("Starting Applet");
          appletToLoad = getParameter("appletToLoad");
          setBackground(Color.white);
     }
 
     public void paint(Graphics g){
          //used to set the image on the panel
          if (image != null)
               g.drawImage(image, 0, 0, this);
     }
 
     /*public void run()
     {
          try {
               connect();
               readStream();
               
               Class appletClass = Class.forName(appletToLoad);
               Applet realApplet = (Applet)appletClass.newInstance();
               //realApplet.setStub(this);
               setLayout( new GridLayout(1,0));
               add(realApplet);
               realApplet.init();
               realApplet.start();
          }
          catch (Exception e) {
               System.out.println( e );
          }
          validate();
     }*/
 
     public void start(){
          appletThread = new Thread(this);
          appletThread.start();
     }
 
     public void stop(){
          appletThread.stop();
          appletThread = null;
     }
 
     public void readStream(){
          //the basic method to continuously read the stream
          try{
               if (useMJPGStream){
                    while(true){
                         readMJPGStream();
                         //parent.repaint();
                    }
               }
               else{
                    while(true){
                         connect();
                         readJPG();
                         //parent.repaint();
                         disconnect();
                    }
               }
          }catch(Exception e){;}
     }
 
     public void readMJPGStream(){
          //preprocess the mjpg stream to remove the mjpg encapsulation
 
          //Following commented on 07/08/2006
          //readLine(3,dis); //discard the first 3 lines
 
          //Following added on 07/08/2006
          readLine(4, dis); //discard the first 4 lines for D-Link DCS-900
 
          readJPG();
          readLine(2,dis); //discard the last two lines
     }
 
     public void readJPG(){
          //read the embedded jpeg image
          try{
               JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
               image = decoder.decodeAsBufferedImage();
          }catch(Exception e){
               e.printStackTrace();disconnect();
          }
     }
 
     public void readLine(int n, DataInputStream dis){
          //used to strip out the header lines
          for (int i=0; i<n;i++){
               readLine(dis);
          }
     }
 
     public void readLine(DataInputStream dis){
          try{
               boolean end = false;
               String lineEnd = "\n"; //assumes that the end of the line is marked with this
               byte[] lineEndBytes = lineEnd.getBytes();
               System.out.println("lineEndBytes....."+lineEndBytes);
               byte[] byteBuf = new byte[lineEndBytes.length];
               System.out.println("byteBuf......."+byteBuf);
               
               while(!end){
                    //dis.read(byteBuf,0,lineEndBytes.length);
                    String t = "";
                    if(byteBuf != null){
                         dis.read(byteBuf,0,lineEndBytes.length);
                         t = new String(byteBuf);
                    }
                    //System.out.print(t); //uncomment if you want to see what the lines actually look like
                    if(t.equals(lineEnd))
                         end=true;
               }
          }catch(Exception e){
               e.printStackTrace();
          }
     }
 
     public void run(){
          connect();
          readStream();
     }
 
     public static void main(String[] args)
     {
          JFrame jframe = new JFrame();
          jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          //IPCamera axPanel = new IPCamera();
          IPCamera axPanel = new IPCamera(jframe);
          new Thread(axPanel).start();
          jframe.getContentPane().add(axPanel);
          jframe.pack();
          jframe.show();
     }
}


Но на строчки
Код: java
1.
2.
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
image = decoder.decodeAsBufferedImage();


компилятор будет ругаться. Поискав в нете, обнаружил, что это возможно(!) будет работать с jdk 1.4-1.5.
Для решения данной проблемы предлагают воспользоваться вот этим кодом
Код: java
1.
javax.imageio.ImageIO.write(image, format, stream)


Возможно для замены тех строк потребуется написать следующее
Код: java
1.
2.
URL url = new URL(jpgURL);  
image = ImageIO.read(url);


С таким кодом синтаксических ошибок не оказалось, но при запуске проекта ошибка проявилась.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
java.lang.NoClassDefFoundError: newjframe/NewJFrame (wrong name: NewJFrame/NewJFrame)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Exception in thread "main" Java Result: 1


На данный момент с этой ошибкой не разобрался.
...
Рейтинг: 0 / 0
13.08.2014, 17:39
    #38719682
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Konstantin1706На данный момент с этой ошибкой не разобрался.
Это ошибка подробно описана в FAQ форума.
...
Рейтинг: 0 / 0
13.08.2014, 20:32
    #38719811
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Konstantin1706компилятор будет ругаться. Поискав в нете, обнаружил, что это возможно(!) будет работать с jdk 1.4-1.5.
Для решения данной проблемы предлагают воспользоваться вот этим кодом
Причем здесь тут? Какое jdk1.4 ?
...
Рейтинг: 0 / 0
14.08.2014, 08:03
    #38719933
Konstantin1706
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Единственное стоящее на тему считывание информации с IP камер средствами JMF это следующий код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.applet.*;
 
public class IPCamera extends Applet implements Runnable
{
     public boolean useMJPGStream = true;
     String appletToLoad;
     Thread appletThread;
 
     public String jpgURL = "http://192.168.1.100/cgi-bin/video.jpg";
     public String mjpgURL = "http://192.168.1.100/video.cgi";
 
     DataInputStream dis;
     private Image image=null;
     public Dimension imageSize = null;
     public boolean connected = false;
     private boolean initCompleted = false;
     HttpURLConnection huc=null;
     Component parent;
 
     /** Creates a new instance of AxisCamera */
      public IPCamera (Component parent_)      //
     {                                   //
          parent = parent_;               //
     }                                   //
 
     public void connect(){
          try{
               URL u = new URL(useMJPGStream?mjpgURL:jpgURL);
               huc = (HttpURLConnection) u.openConnection();
               //System.out.println(huc.getContentType());
               InputStream is = huc.getInputStream();
               connected = true;
               BufferedInputStream bis = new BufferedInputStream(is);
               dis= new DataInputStream(bis);
               if(!initCompleted)
                    initDisplay();
          }
          catch(IOException e){
               //incase no connection exists wait and try again, instead of printing the error
               try{
                    huc.disconnect();
                    Thread.sleep(60);
               }catch(InterruptedException ie){
                    huc.disconnect();connect();
               }
               connect();
          }catch(Exception e){;}
     }
 
     public void initDisplay(){
          //setup the display
          if (useMJPGStream)
               readMJPGStream();
          else{
               readJPG();
               disconnect();
          }
          imageSize = new Dimension(image.getWidth(this), image.getHeight(this));
          setPreferredSize(imageSize);      //
          parent.setSize(imageSize);        //
          parent.validate();          //
          initCompleted = true;
     }
 
     public void disconnect(){
          try{
               if(connected){
                    dis.close();
                    connected = false;
               }
          }catch(Exception e){;}
     }
 
     public void init(){
          System.out.println("Starting Applet");
          appletToLoad = getParameter("appletToLoad");
          setBackground(Color.white);
     }
 
     public void paint(Graphics g){
          //used to set the image on the panel
          if (image != null)
               g.drawImage(image, 0, 0, this);
     }
 
     /*public void run()
     {
          try {
               connect();
               readStream();
               
               Class appletClass = Class.forName(appletToLoad);
               Applet realApplet = (Applet)appletClass.newInstance();
               //realApplet.setStub(this);
               setLayout( new GridLayout(1,0));
               add(realApplet);
               realApplet.init();
               realApplet.start();
          }
          catch (Exception e) {
               System.out.println( e );
          }
          validate();
     }*/
 
     public void start(){
          appletThread = new Thread(this);
          appletThread.start();
     }
 
     public void stop(){
          appletThread.stop();
          appletThread = null;
     }
 
     public void readStream(){
          //the basic method to continuously read the stream
          try{
               if (useMJPGStream){
                    while(true){
                         readMJPGStream();
                         //parent.repaint();
                    }
               }
               else{
                    while(true){
                         connect();
                         readJPG();
                         //parent.repaint();
                         disconnect();
                    }
               }
          }catch(Exception e){;}
     }
 
     public void readMJPGStream(){
          //preprocess the mjpg stream to remove the mjpg encapsulation
 
          //Following commented on 07/08/2006
          //readLine(3,dis); //discard the first 3 lines
 
          //Following added on 07/08/2006
          readLine(4, dis); //discard the first 4 lines for D-Link DCS-900
 
          readJPG();
          readLine(2,dis); //discard the last two lines
     }
 
     public void readJPG(){
          //read the embedded jpeg image
          try{
               JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
               image = decoder.decodeAsBufferedImage();
          }catch(Exception e){
               e.printStackTrace();disconnect();
          }
     }
 
     public void readLine(int n, DataInputStream dis){
          //used to strip out the header lines
          for (int i=0; i<n;i++){
               readLine(dis);
          }
     }
 
     public void readLine(DataInputStream dis){
          try{
               boolean end = false;
               String lineEnd = "\n"; //assumes that the end of the line is marked with this
               byte[] lineEndBytes = lineEnd.getBytes();
               System.out.println("lineEndBytes....."+lineEndBytes);
               byte[] byteBuf = new byte[lineEndBytes.length];
               System.out.println("byteBuf......."+byteBuf);
               
               while(!end){
                    //dis.read(byteBuf,0,lineEndBytes.length);
                    String t = "";
                    if(byteBuf != null){
                         dis.read(byteBuf,0,lineEndBytes.length);
                         t = new String(byteBuf);
                    }
                    //System.out.print(t); //uncomment if you want to see what the lines actually look like
                    if(t.equals(lineEnd))
                         end=true;
               }
          }catch(Exception e){
               e.printStackTrace();
          }
     }
 
     public void run(){
          connect();
          readStream();
     }
 
     public static void main(String[] args)
     {
          JFrame jframe = new JFrame();
          jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          //IPCamera axPanel = new IPCamera();
          IPCamera axPanel = new IPCamera(jframe);
          new Thread(axPanel).start();
          jframe.getContentPane().add(axPanel);
          jframe.pack();
          jframe.show();
     }
}


Но на строчки
Код: java
1.
2.
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
image = decoder.decodeAsBufferedImage();


компилятор будет ругаться. Поискав в нете, обнаружил, что это возможно(!) будет работать с jdk 1.4-1.5.
Для решения данной проблемы предлагают воспользоваться вот этим кодом
Код: java
1.
javax.imageio.ImageIO.write(image, format, stream)


Возможно для замены тех строк потребуется написать следующее
Код: java
1.
2.
URL url = new URL(jpgURL);  
image = ImageIO.read(url);


С таким кодом синтаксических ошибок не оказалось, но при запуске проекта ошибка проявилась.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
java.lang.NoClassDefFoundError: newjframe/NewJFrame (wrong name: NewJFrame/NewJFrame)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Exception in thread "main" Java Result: 1


На данный момент с этой ошибкой не разобрался.
...
Рейтинг: 0 / 0
14.08.2014, 08:06
    #38719934
Konstantin1706
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
maytonKonstantin1706компилятор будет ругаться. Поискав в нете, обнаружил, что это возможно(!) будет работать с jdk 1.4-1.5.
Для решения данной проблемы предлагают воспользоваться вот этим кодом
Причем здесь тут? Какое jdk1.4 ?
Поправьте, если не так.
...
Рейтинг: 0 / 0
14.08.2014, 09:58
    #38719988
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Вопрос: какое отношение компилятор имеет к отсутствию пользовательского класса?
Ответ: никакого

Вопрос: какой версии компилятор будет ругаться при компиляции отсутствующего класса
Ответ: любой


JMF вообще непонятно развивается он или нет. Ваш пример имеет значение только если камера транслирует в mjpg формате, в то время как в описании на нее указано что она поддерживает onvif.

Можно зайти в настройки (наверняка админка есть) и смотреть там, можно попробовать найти спецификацию на сайте производителя или в интернете.

Прежде чем рубить с горяча попробуйте собрать информацию на камеру.
...
Рейтинг: 0 / 0
14.08.2014, 10:43
    #38720022
Konstantin1706
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Захват видео с IP камеры
Спасибо большое за помощь. Буду копать в сторону onvif.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Захват видео с IP камеры / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]