Как я могу установить соединение с DVR и декодировать данные?
Моя система состоит из цифрового видеомагнитофона (DVR) и двух камер, которые связаны с DVR. Видеорегистратор также работает как сервер (подключен к локальной сети). В систему было включено приложение для Android, куда я помещал информацию о сервере, порте, имени пользователя и пароле (я могу добавлять учетные записи с помощью серверного программного обеспечения). Приложение транслирует видео с камер. Я также могу подключиться с DVR через HTTP (только IE), затем он показывает приложение ActiveX.
Что я должен сделать, это написать подобное приложение, но я застрял в проблеме - как я могу получить видеопоток с DVR? Я не специалист по Java, и попытался соединиться с DVR, безуспешно.
Вот мой код:
import java.net.*;
import java.io.*;
public class VideoStream
{
final static int BUFFER_SIZE = 1024000;
public static void main(String[] args) throws Exception
{
Authenticator.setDefault(new Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
System.out.println("Authenticatting...");
PasswordAuthentication p=new PasswordAuthentication("login", "password".toCharArray());
return p;
}
});
Socket s = new Socket();
String host = "192.168.80.107"; //192.168.80.107
PrintWriter s_out = null;
BufferedReader s_in = null;
BufferedInputStream bufferedInputStream = null;
try
{
s.connect(new InetSocketAddress(host, 34599));
System.out.println("Is connected? : " + s.isConnected());
s_out = new PrintWriter(s.getOutputStream(), true);
s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
//bufferedInputStream = new BufferedInputStream(s.getInputStream());
}
catch(UnknownHostException e)
{
e.printStackTrace();
System.exit(1);
}
catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
byte[] b = new byte[BUFFER_SIZE];
//bufferedInputStream.read(b);
int bytesRead = 0;
System.out.println("Reading... \n");
while((bytesRead = s_in.read()) > 0)
{
System.out.println(s_in.readLine());
}
System.out.println("Done");
}
Я попробовал другой порт (TCP и для включенного приложения Android). Сокет соединяется с сервером, но он "зависает", когда я пытаюсь использовать метод read() (даже вне цикла while). Аутентификатор тоже не работает.
Некоторая информация о DVR:
- Поддержка протокола: TCP/IP, UDP, SMTP, NTP, DHCP, DDNS
- Сжатие видео: H.264
- Операционная система: Linux
Я буду очень признателен за любые советы.
1 ответ
Как отметили другие в комментариях, совет должен знать, как работает существующее приложение для Android.
Возможно, стоит попытаться проверить пакеты и ответы (полученные с помощью сниффера, такого как Shark for Droid) относительно связи между клиентом Android и видеорегистратором.