Потоковое видео в реальном времени с беспроводной IP-камеры на мобильный Android

Здесь мне нужно получить потоковое видео в реальном времени с беспроводной IP-камеры на мобильный телефон Android с использованием протокола RTSP. Камера подключена к беспроводному маршрутизатору, а мобильный телефон также имеет ту же сеть Wi-Fi. Теперь мне нужно реализовать потоковое видео в реальном времени с камеры.

Для этого, что мне делать? это новая концепция для меня. Как программно подключить мобильный телефон Android и камеру и получить прямую трансляцию. Буду признателен за любую помощь.


person vignesh ramanathan    schedule 23.07.2014    source источник
comment
Следуйте инструкциям по этой ссылке чтобы сделать это.   -  person Pravin Raj    schedule 23.07.2014


Ответы (1)


Вы можете получить доступ к прямой трансляции изображения с вашей IP-камеры на свой компьютер, мой был

String URL = "http://192.168.1.8/image/jpeg.cgi";

или какой-то. Вы должны проверить свое устройство, если оно включено. Затем вы можете загрузить изображение и поместить его в изображение. не сам файл изображения, а только его графические детали. Вы можете найти для этого MJpegInputStream, вот пример кода для него

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));
}

Подробнее о потоке MJpegInput можно узнать здесь и здесь

надеюсь, что это полезно, счастливое кодирование.

person ralphgabb    schedule 11.08.2015