一部の IP カメラを監視するための Android アプリを開発しています。ビデオをストリーミングするためにMjpegView クラスを使用しています。
私は3台のカメラを持っています。
- - カメラ 1: ユーザー/パスワードなしでインターネット上で見つけた公開カメラ。
- - カメラ 2: 公共のカメラですが、これにはユーザー名とパスワードが必要です。
- - カメラ 3: アプリで最終的に使用するカメラ。また、資格情報も求められます。
私の主な活動のコードは次のとおりです。
public class MainActivity extends Activity {
private MjpegView mv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Camera 1
String URL = "http://216.62.222.101/mjpg/video.mjpg";
//Camera 2
// String URL = "http://user:user@iprobocam.marmitek.com/cgi/mjpg/mjpg.cgi";
//Camera 3
// String URL = "http://MyIp:MyPort/mjpg/video.mjpg";
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
mv = new MjpegView(this);
setContentView(mv);
mv.setSource(MjpegInputStream.read(URL));
mv.setDisplayMode(MjpegView.SIZE_BEST_FIT);
mv.showFps(true);
}
public void onPause() {
super.onPause();
mv.stopPlayback();
}
問題なくカメラ 1 をストリーミングできます。カメラ 2 または 3 でアプリを実行すると、エラーも警告も表示されませんが、ほとんどの場合、黒い画面が表示されます。認証に問題があると思いましたが、カメラから削除すると、同じ結果、黒い画面が表示されます。
機能するカメラと機能しないカメラの違いは何ですか?
助けてくれてありがとう。
- - 編集 - -
カメラ 2 でアプリを実行しているときに奇妙なことがわかりました。MjpegView
メソッドを呼び出すときに、クラスで例外をキャッチしますMjpegInputStream.readMjpegFrame
。さらに詳しく見てみると、このメソッドgetEndOfSeqeunce
は常に 1 を返しますが、カメラ 1 (うまく機能するもの) はより高い値 (66 から 68 の間) を返します。
これが誰かにここで何が起こっているかのアイデアを与えることができることを願っています...