私のシステムは、デジタル ビデオ レコーダー (dvr) と、dvr に接続された 2 台のカメラで構成されています。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 に関する情報:
- プロトコルのサポート: TCP/IP、UDP、SMTP、NTP、DHCP、DDNS
- ビデオ圧縮: H.264
- オペレーティング システム: Linux
アドバイスをいただければ幸いです。