Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224

Необходимо считывать видео c IP камеры в режиме реального времени

12.08.2014, 13:32. Показов 6884. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, имеется IP камера, мне необходимо получить видео. Как мне это реализовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.08.2014, 13:32
Ответы с готовыми решениями:

Обработка видео с камеры в режиме реального времени
Добрый день, мне нужно обрабатывать в режиме реального времени видео, которое я получаю с вебки, подключенной к матлабу. Я хочу, чтобы...

Передача аудио и видео в режиме реального времени
Добрый день! Планируется большой проект, по разработке комплекса программ, для управления персоналом, в ТЗ есть пункт который требует...

Работа в режиме реального времени
Возможно создать не там, ибо вопрос практически не касается тему Qt, но разработка именно в нем. Опыт программирования не сильный, поэтому...

12
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
12.08.2014, 14:50
http://www.oracle.com/technetw... 78282.html
1
Вежливость-главное оружие
 Аватар для some_name
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
12.08.2014, 14:55
How to view video stream with ip cam and JMF
1
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
13.08.2014, 11:26  [ТС]
Спасибо, сейчас займусь чтением содержимого. Но в ходе чтения будут вопросы, надеюсь на Ваши ответы.

Добавлено через 20 часов 6 минут
raxp, любая ссылка в статье перекидывает на начало статьи. Есть ли туториал по JMF?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
13.08.2014, 11:41
How to run this sample

Download and unzip the ZIP file that contains the source and compiled classes.
Add the directory where you unzipped the classes to your CLASSPATH
Run the JVidCap program:
java jmfsample.JVidCap

Source Code

monitor.zip
также есть (ссылку не даю, ибо форум) в сети "Захват видео с web камеры средствами JMF"
1
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
13.08.2014, 12:01  [ТС]
как я говорил выше, ссылка на monitor.zip перекидывает на эту же статью. Не имеет разницы, что у меня IP камера, а не веб?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
13.08.2014, 12:27
...вы ж по ссылкам ходили вроде ...для 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();
     }
}
2
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
13.08.2014, 14:36  [ТС]
На данный момент с этим кодом я и разбираюсь. Но компилятор ругается на
Java
1
JPEGCodec.createJPEGDecoder(dis);
и на decoder в строке
Java
1
decoder.decodeAsBufferedImage();
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
13.08.2014, 14:52
Konstantin1706, в нетах пишут, что Under JDK6, the following is actually resulting in a compile failure.
com.sun.image.codec.jpeg.JPEGCodec is Sun proprietary API and may be removed in a future release

Предлагают юзать javax.imageio.ImageIO.write(image, format, stream)

https://www.java.net/node/662849

Какой у вас JDK? Можете попробовать компильнуть в 1.4 - 1.5, может поможет.
1
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
14.08.2014, 13:44  [ТС]
у меня 1.7. Попробую ка я воспользоваться ImageIO.read и стрельнуть скриншот с камеры.

Добавлено через 20 часов 55 минут
данная камера работает по спецификации Оnvif, был ли о кого-нибудь опыт разработки по данной спецификации?
0
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
15.08.2014, 14:26  [ТС]
две, вышеуказанные, строчки я заменил на
Java
1
ImageIO.write(ImageIO.read(new URL(jpgURL)), "jpg", new File("1.jpg"));
но как я понимаю мне необходим какой-то адрес для получения(например) картинки. Предположим вот такой:
http://195.208.36.174/image.jpg
Если имеется логин и пароль, то данная строка по идее будет выглядеть следующим образом:
http://login: password@195.208.36.174/image.jpg
Но в таком случае кидает в эксепшн, с 401-м кодовым состоянием HTTP. Хотя логин и пароль точно совпадают.
У меня подозрения, что конструкция вида
http://login: password@195.208.36.174/image.jpg
является не корректной. Может кто знает другой вариант авторизации?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
15.08.2014, 14:40
логин пробел что ли?

Добавлено через 6 минут
погорячился я, но идее эта запись правильная
0
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
18.08.2014, 11:45  [ТС]
Данный код рабочий. Снимает скриншоты с камеры. Надеюсь понадобится. К сведению, у разных камер разные пути к картинкам.

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
212
213
214
215
216
217
218
219
220
221
import java.awt.*;
import javax.swing.*;
import java.applet.*;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.imageio.*;
 
public class NewJFrame extends Applet implements Runnable
{
    private int counter = 0;
     public boolean useMJPGStream = false;
     String appletToLoad;
     Thread appletThread;
     public String mjpgURL = "http://admin:admin@192.168.1.1:80/snap.jpg";
     DataInputStream dis;
     private Image image=null;
     public Dimension imageSize = null;
     public boolean connected = false;
     private boolean initCompleted = false;
     HttpURLConnection huc=null;
     Component parent;
 
      public NewJFrame (Component parent_)      //
     {                                   //
          parent = parent_;               //
     }                                   //
 
     public void connect(){
          try{
              
              // URL u = new URL(useMJPGStream?mjpgURL:jpgURL);
               URL u = new URL(mjpgURL);
               huc = (HttpURLConnection) u.openConnection();
               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{
                   System.out.println("Disconnect. " + e.getMessage());
                   huc.disconnect();
                   Thread.sleep(60);
               }catch(InterruptedException ie){
                   System.out.println("Disconnect inside error: " + ie.getMessage()); 
                   huc.disconnect();connect();
               }
               connect();
          }catch(Exception e){System.out.println("Connect" + e.getMessage());}
     }
 
     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){System.out.println("In meth disconnect " + e.getMessage());}
     }
 
     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();
               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){System.out.println(e.getMessage());}
     }
 
     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(){
        boolean b = false;  
        //read the embedded jpeg image
          try{
              b = ImageIO.write(ImageIO.read(new URL(mjpgURL)), "jpg", new File("C:/projects/" + ++counter +".jpg"));
          }catch(IOException e){
                System.out.println("ERROR " + e.getMessage());
               disconnect();
          } finally {
              System.out.println(b);
          }
     }
 
     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){
              System.out.println(e.getMessage());
          }
     }
 
     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();
          NewJFrame axPanel = new NewJFrame(jframe);
          new Thread(axPanel).start();
          jframe.getContentPane().add(axPanel);
          jframe.pack();
          jframe.show();
     }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2014, 11:45
Помогаю со студенческими работами здесь

Генерирование MD5 в режиме реального времени
Есть HTML форма, в которой вводятся параметры, передаваемый из переменных php - эта часть работает. но проблема в том. что при загрузке...

ОС для работы в режиме реального времени?
Подходит ли windows server 2003 для работы в режиме реального времени, если нет, то с какими погрешностями, и какую другую ОС лучше...

Не обрабатывается скрипт в режиме реального времени
Привет! У меня есть страничка http://hobbylife-market.ru/kabinet/korzina - если добавить туда товары и изменять количество, то стоимость...

Обработка звука в режиме реального времени
Вопрос очень общий. Позволяет ли это делать C#? Каковы методы обработки? Прошу советы, ссылки, литературу. Начальная цель -...

Сетевая игра в режиме реального времени. Qt
Всем привет! Решил в учебных целях сделать на Qt сетевую игру (для локальной сети) в режиме реального времени. Всё что я знаю о работе с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru