Как я могу установить соединение с 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:

  1. Поддержка протокола: TCP/IP, UDP, SMTP, NTP, DHCP, DDNS
  2. Сжатие видео: H.264
  3. Операционная система: Linux

Я буду очень признателен за любые советы.

1 ответ

Как отметили другие в комментариях, совет должен знать, как работает существующее приложение для Android.

Возможно, стоит попытаться проверить пакеты и ответы (полученные с помощью сниффера, такого как Shark for Droid) относительно связи между клиентом Android и видеорегистратором.

Другие вопросы по тегам