Here, I have to get live video streaming from an wireless Ip camera to android mobile using RTSP protocol.Camera is connected to the wireless router and mobile also has same wifi network.Now I need to implement live video streaming from camera.
For this purpose ,What should I do?. this is new concept for me.How to connect android mobile and camera programmatically and get live streaming.Any help would be appreciated.
IP camera is short for Internet Protocol camera, and it describes a category of digital devices designed for no-fuss live video streaming.
(This can be done by going to the settings in your Android phone and turning on the "hotspot" function—usually called "mobile hotspot" or "portable hotspot". Set a password for the hotspot connection.) Connect the camera to the Android phone's hotspot-enabled Wi-Fi network.
From the configuration menu select: Devices & Services. In the bottom right, click on the Add Integration button. From the list, search and select “Android IP Webcam”. Follow the instruction on screen to complete the set up.
You can access the image live feed from your Ip Cam to your PC, mine was
String URL = "http://192.168.1.8/image/jpeg.cgi";
or some sort. You should check your device if that is included. You can then download the image and put it on the imageview. not the actual image file just its graphical details. You can search for MJpegInputStream for that, heres the sample code for it
public class MjpegInputStream extends DataInputStream {
private final byte[] SOI_MARKER = { (byte) 0xFF, (byte) 0xD8 };
private final byte[] EOF_MARKER = { (byte) 0xFF, (byte) 0xD9 };
private final String CONTENT_LENGTH = "Content-Length";
private final static int HEADER_MAX_LENGTH = 100;
private final static int FRAME_MAX_LENGTH = 40000 + HEADER_MAX_LENGTH;
private int mContentLength = -1;
public static MjpegInputStream read(Context context,String url) {
HttpResponse res;
MyHttpClient httpclient = new MyHttpClient( context );
try {
res = httpclient.execute(new HttpGet(URI.create(url)));
return new MjpegInputStream(res.getEntity().getContent());
} catch (ClientProtocolException e) {
} catch (IOException e) {}
return null;
}
public MjpegInputStream(InputStream in) { super(new BufferedInputStream(in, FRAME_MAX_LENGTH)); }
private int getEndOfSeqeunce(DataInputStream in, byte[] sequence) throws IOException {
int seqIndex = 0;
byte c;
for(int i=0; i < FRAME_MAX_LENGTH; i++) {
c = (byte) in.readUnsignedByte();
if(c == sequence[seqIndex]) {
seqIndex++;
if(seqIndex == sequence.length) return i + 1;
} else seqIndex = 0;
}
return -1;
}
private int getStartOfSequence(DataInputStream in, byte[] sequence) throws IOException {
int end = getEndOfSeqeunce(in, sequence);
return (end < 0) ? (-1) : (end - sequence.length);
}
private int parseContentLength(byte[] headerBytes) throws IOException, NumberFormatException {
ByteArrayInputStream headerIn = new ByteArrayInputStream(headerBytes);
Properties props = new Properties();
props.load(headerIn);
return Integer.parseInt(props.getProperty(CONTENT_LENGTH));
}
public Bitmap readMjpegFrame() throws IOException {
mark(FRAME_MAX_LENGTH);
int headerLen = getStartOfSequence(this, SOI_MARKER);
reset();
byte[] header = new byte[headerLen];
readFully(header);
try {
mContentLength = parseContentLength(header);
} catch (NumberFormatException nfe) {
mContentLength = getEndOfSeqeunce(this, EOF_MARKER);
}
reset();
byte[] frameData = new byte[mContentLength];
skipBytes(headerLen);
readFully(frameData);
return BitmapFactory.decodeStream(new ByteArrayInputStream(frameData));
}
You can look more about MJpegInput stream here and here
hope its helpful, happy codings.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With