Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Live video streaming from an Wireless IP Camera to Android mobile

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.

like image 992
vignesh ramanathan Avatar asked Jul 23 '14 09:07

vignesh ramanathan


People also ask

Can you live stream with an IP camera?

IP camera is short for Internet Protocol camera, and it describes a category of digital devices designed for no-fuss live video streaming.

Can I connect wireless camera to Android phone?

(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.

How do I connect my IP camera to my Android phone?

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.


1 Answers

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.

like image 100
ralphgabb Avatar answered Sep 19 '22 20:09

ralphgabb