私はDVRとIPカメラにスナップショットを要求するアプリケーションを開発しています。私が取り組んでいるデバイスは、そうするためのRTSPリクエストを提供するだけです。次に、ストリームパケットの受信を開始するために必要なRTSPメソッドを実装し、UDP接続を確立して受信を開始しました。私の疑問は、どのようにjpegファイルに受信したデータを保存することができますですか?受信した画像バイトの募集と終了はどこですか?Java - RTSPストリームパケットからスナップショットを保存する
私は、Xuggler(それはもう管理していません)、javacpp-presets - ffmpegとopencvライブラリを含んでいます - Javaでこのタイプのサービスを実装するライブラリをたくさん探しました。誰かがストリームからスナップショットを保存する簡単で良いものを知っているなら、私に知らせてください。
マイコード:
final long timeout = System.currentTimeMillis() + 3000;
byte[] fullImage = new byte[ 1024 * 1024 ];
DatagramSocket udpSocket = new DatagramSocket(8000);
int lastByte = 0;
// Skip first 2 packets because I think they are HEADERS
// Since I don't know what they mean, I just print then in hexa
for(int i = 0; i < 2; i++){
byte[] buffer = new byte[ 1024 ];
DatagramPacket dataPacket = new DatagramPacket(buffer, buffer.length);
udpSocket.receive(dataPacket);
int dataLenght = dataPacket.getLength();
buffer = Arrays.copyOf(buffer, dataLenght);
System.out.println("RECEIVED[" + DatatypeConverter.printHexBinary(buffer) + " L: " + dataLenght);
}
do{
byte[] buffer = new byte[ 1024 ];
DatagramPacket dataPacket = new DatagramPacket(fullImage, fullImage.length);
udpSocket.receive(dataPacket);
System.out.println("RECEIVED: " + new String(fullImage));
for(int i = 0; i < buffer.length; i++){
fullImage[ i + lastByte ] = buffer[ i ];
lastByte ++;
}
} while(System.currentTimeMillis() < timeout);
// I know this timeout is wrong, I should stop after getting full image bytes
出力:80E0000100004650000000006742E01FDA014016C4のL:21 を受け取っ:80E00002000046500000000068CE30A480 L:17 を受け取っ:ストリーミングデータのトン... を受け取っ:トンを受け取っ
... 受信しました:ストリーミングからの多数のデータ... [...]
あなたが想像しているように、私が間違っているので、私がファイルに保存しているイメージは読み込みができません。 私はのヘッダーは、サーバーが私にストリーミングからのイメージの開始と終わりを伝える次のパケットに関するいくつかの情報を提供すると思います。しかし、私はそれらを理解していません。誰かがそれを解決する方法を知っていますか?あらゆるヒントは大歓迎です!