9

我的系统由一台数字录像机 (dvr) 和两台摄像机组成,它们与 dvr 相连。dvr 也可用作服务器(连接到 LAN)。系统中包含一个 android 应用程序,我在其中放置了有关服务器、端口、用户名和密码的信息(我可以使用服务器软件添加帐户)。该应用程序从摄像机流式传输视频。我还可以通过 http(仅限 IE)连接 dvr,然后显示 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

我将非常感谢任何建议。

4

0 回答 0