Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 945221
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 15, 20262026-05-15T22:43:08+00:00 2026-05-15T22:43:08+00:00

I need to get the mjpeg stream from an IP camera, anyone know the

  • 0

I need to get the mjpeg stream from an IP camera, anyone know the right way do it? I googled a bit and I find this example

http://www.anddev.org/mjpeg_on_android_anyone-t1871.html

but I’ve been stucked when I tried to get the stream from another activity called by the main activity. Here the code:

Main acitivity

package com.test;


public class IntentTest extends Activity {
    /** Called when the activity is first created. */
    ListView myListView = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        myListView = (ListView)findViewById(R.id.listView);
        final ArrayList<String> items = new ArrayList<String>();
        items.add("00408C944B9A");
        final ArrayAdapter<String> aa;
        aa = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                items);

        myListView.setAdapter(aa);
        myListView.setOnItemClickListener(listClicked);

    }


    private OnItemClickListener listClicked = new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Intent i = new Intent(IntentTest.this, OtherActivity.class);
            i.putExtra("MAC", myListView.getItemAtPosition(position).toString());
            startActivity(i);         
        }
    };
}

Second activity

package com.test;

import com.test.mjpeg.mjpegsample.MjpegView.*;
import com.test.parser.JSONParse;


public class OtherActivity extends Activity {
    /** Called when the activity is first created. */
    private MjpegView mv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle extras = getIntent().getExtras();
        if (extras != null){
            String mac = (String)extras.get("MAC");
            Log.i("Other", "---->" + mac);
            TextView tv = (TextView)findViewById(R.id.textView);
            tv.setText(mac);


            String URL = "myurl";

            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 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-15T22:43:09+00:00Added an answer on May 15, 2026 at 10:43 pm

    I found this code over the internet some time ago, maybe it will be of some help to you.

    MjpegSample Class

    package de.mjpegsample;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.Window;
    import android.view.WindowManager;
    import de.mjpegsample.MjpegView.MjpegInputStream;
    import de.mjpegsample.MjpegView.MjpegView;
    
    public class MjpegSample extends Activity {
    
        private MjpegView mv;
        private static final int MENU_QUIT = 1;
    
        /* Creates the menu items */
        public boolean onCreateOptionsMenu(Menu menu) {    
        menu.add(0, MENU_QUIT, 0, "Quit");
        return true;
        }
    
        /* Handles item selections */
        public boolean onOptionsItemSelected(MenuItem item) {    
            switch (item.getItemId()) {
                case MENU_QUIT:
                    finish();
                    return true;    
                }    
            return false;
        }
    
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            //sample public cam
            String URL = "http://gamic.dnsalias.net:7001/img/video.mjpeg";
    
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
            mv = new MjpegView(this);
            setContentView(mv);        
            mv.setSource(MjpegInputStream.read(URL));
            mv.setDisplayMode(MjpegView.SIZE_BEST_FIT);
            mv.showFps(false);
        }
    
        public void onPause() {
            super.onPause();
            mv.stopPlayback();
        }
    }
    

    MjpegView Class

    package de.mjpegsample.MjpegView;
    
    import java.io.IOException;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.PorterDuff;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.Rect;
    import android.graphics.Typeface;
    import android.util.AttributeSet;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    
    public class MjpegView extends SurfaceView implements SurfaceHolder.Callback {
        public final static int POSITION_UPPER_LEFT  = 9;
        public final static int POSITION_UPPER_RIGHT = 3;
        public final static int POSITION_LOWER_LEFT  = 12;
        public final static int POSITION_LOWER_RIGHT = 6;
    
        public final static int SIZE_STANDARD   = 1; 
        public final static int SIZE_BEST_FIT   = 4;
        public final static int SIZE_FULLSCREEN = 8;
    
        private MjpegViewThread thread;
        private MjpegInputStream mIn = null;    
        private boolean showFps = false;
        private boolean mRun = false;
        private boolean surfaceDone = false;    
        private Paint overlayPaint;
        private int overlayTextColor;
        private int overlayBackgroundColor;
        private int ovlPos;
        private int dispWidth;
        private int dispHeight;
        private int displayMode;
    
        public class MjpegViewThread extends Thread {
            private SurfaceHolder mSurfaceHolder;
            private int frameCounter = 0;
            private long start;
            private Bitmap ovl;
    
            public MjpegViewThread(SurfaceHolder surfaceHolder, Context context) { mSurfaceHolder = surfaceHolder; }
    
            private Rect destRect(int bmw, int bmh) {
                int tempx;
                int tempy;
                if (displayMode == MjpegView.SIZE_STANDARD) {
                    tempx = (dispWidth / 2) - (bmw / 2);
                    tempy = (dispHeight / 2) - (bmh / 2);
                    return new Rect(tempx, tempy, bmw + tempx, bmh + tempy);
                }
                if (displayMode == MjpegView.SIZE_BEST_FIT) {
                    float bmasp = (float) bmw / (float) bmh;
                    bmw = dispWidth;
                    bmh = (int) (dispWidth / bmasp);
                    if (bmh > dispHeight) {
                        bmh = dispHeight;
                        bmw = (int) (dispHeight * bmasp);
                    }
                    tempx = (dispWidth / 2) - (bmw / 2);
                    tempy = (dispHeight / 2) - (bmh / 2);
                    return new Rect(tempx, tempy, bmw + tempx, bmh + tempy);
                }
                if (displayMode == MjpegView.SIZE_FULLSCREEN) return new Rect(0, 0, dispWidth, dispHeight);
                return null;
            }
    
            public void setSurfaceSize(int width, int height) {
                synchronized(mSurfaceHolder) {
                    dispWidth = width;
                    dispHeight = height;
                }
            }
    
            private Bitmap makeFpsOverlay(Paint p, String text) {
                Rect b = new Rect();
                p.getTextBounds(text, 0, text.length(), b);
                int bwidth  = b.width()+2;
                int bheight = b.height()+2;
                Bitmap bm = Bitmap.createBitmap(bwidth, bheight, Bitmap.Config.ARGB_8888);
                Canvas c = new Canvas(bm);
                p.setColor(overlayBackgroundColor);
                c.drawRect(0, 0, bwidth, bheight, p);
                p.setColor(overlayTextColor);
                c.drawText(text, -b.left+1, (bheight/2)-((p.ascent()+p.descent())/2)+1, p);
                return bm;           
            }
    
            public void run() {
                start = System.currentTimeMillis();
                PorterDuffXfermode mode = new PorterDuffXfermode(PorterDuff.Mode.DST_OVER);
                Bitmap bm;
                int width;
                int height;
                Rect destRect;
                Canvas c = null;
                Paint p = new Paint();
                String fps = "";
                while (mRun) {
                    if(surfaceDone) {
                        try {
                            c = mSurfaceHolder.lockCanvas();
                            synchronized (mSurfaceHolder) {
                                try {
                                    bm = mIn.readMjpegFrame();
                                    destRect = destRect(bm.getWidth(),bm.getHeight());
                                    c.drawColor(Color.BLACK);
                                    c.drawBitmap(bm, null, destRect, p);
                                    if(showFps) {
                                        p.setXfermode(mode);
                                        if(ovl != null) {
                                            height = ((ovlPos & 1) == 1) ? destRect.top : destRect.bottom-ovl.getHeight();
                                            width  = ((ovlPos & 8) == 8) ? destRect.left : destRect.right -ovl.getWidth();
                                            c.drawBitmap(ovl, width, height, null);
                                        }
                                        p.setXfermode(null);
                                        frameCounter++;
                                        if((System.currentTimeMillis() - start) >= 1000) {
                                            fps = String.valueOf(frameCounter)+"fps";
                                            frameCounter = 0; 
                                            start = System.currentTimeMillis();
                                            ovl = makeFpsOverlay(overlayPaint, fps);
                                        }
                                    }
                                } catch (IOException e) {}
                            }
                        } finally { if (c != null) mSurfaceHolder.unlockCanvasAndPost(c); }
                    }
                }
            }
        }
    
        private void init(Context context) {
            SurfaceHolder holder = getHolder();
            holder.addCallback(this);
            thread = new MjpegViewThread(holder, context);
            setFocusable(true);
            overlayPaint = new Paint();
            overlayPaint.setTextAlign(Paint.Align.LEFT);
            overlayPaint.setTextSize(12);
            overlayPaint.setTypeface(Typeface.DEFAULT);
            overlayTextColor = Color.WHITE;
            overlayBackgroundColor = Color.BLACK;
            ovlPos = MjpegView.POSITION_LOWER_RIGHT;
            displayMode = MjpegView.SIZE_STANDARD;
            dispWidth = getWidth();
            dispHeight = getHeight();
        }
    
        public void startPlayback() { 
            if(mIn != null) {
                mRun = true;
                thread.start();         
            }
        }
    
        public void stopPlayback() { 
            mRun = false;
            boolean retry = true;
            while(retry) {
                try {
                    thread.join();
                    retry = false;
                } catch (InterruptedException e) {}
            }
        }
    
        public MjpegView(Context context, AttributeSet attrs) { super(context, attrs); init(context); }
        public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) { thread.setSurfaceSize(w, h); }
    
        public void surfaceDestroyed(SurfaceHolder holder) { 
            surfaceDone = false; 
            stopPlayback(); 
        }
    
        public MjpegView(Context context) { 
            super(context); 
            init(context); 
            }    
        public void surfaceCreated(SurfaceHolder holder) { 
            surfaceDone = true; 
            }
        public void showFps(boolean b) { 
            showFps = b; 
            }
        public void setSource(MjpegInputStream source) { 
            mIn = source; 
            startPlayback();
            }
        public void setOverlayPaint(Paint p) { 
            overlayPaint = p; 
            }
        public void setOverlayTextColor(int c) { 
            overlayTextColor = c; 
            }
        public void setOverlayBackgroundColor(int c) { 
            overlayBackgroundColor = c; 
            }
        public void setOverlayPosition(int p) { 
            ovlPos = p; 
            }
        public void setDisplayMode(int s) { 
            displayMode = s; 
            }
    }
    

    MjpegInputStream Class

    package de.mjpegsample.MjpegView;
    
    import java.io.BufferedInputStream;
    import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URI;
    import java.util.Properties;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    
    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(String url) {
            HttpResponse res;
            DefaultHttpClient httpclient = new DefaultHttpClient();     
            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));
        }
    }
    

    If you need any more info, let me know, I’ll help in any way I can.

    FYI: I did not write SimpleMjpegView, you can find more up to date code here

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I need to get the contents from this URL http://google.fr/ok in a NSString can
I need to stream a media file from another server through this php file.
I need get H264 stream from x264 encoder and make some kind of live
I need to find values inside this string: 10days25hours15minutes I need get the numbers
I have linq request. I need get item.Title in select. how do this? var
i need get protocol(HTTP, FTP, SSMTP, IMAP, ETC) from ip address and port with
I need get documents from db by oid, like: Docs.objects(_id='4f4381f4e779897a2c000009') But how to do
I need get the same type of array that this.form.elements returns, with input names
i have PostsController controller and in this controller i need get all user list.
When using PowerShell to extract information from TFS, I find that I can get

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.