博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
here is the code for MJPG video capture on ip camera
阅读量:6279 次
发布时间:2019-06-22

本文共 5064 字,大约阅读时间需要 16 分钟。

http://bytes.com/topic/java/answers/714018-video-capture-using-jmf
————————————————————————————————————————————————————————————————
     
import java.net.*;
    
import com.sun.image.codec.jpeg.*;
    
import java.io.*;
    
import java.awt.*;
    
import java.awt.event.*;
    
import java.awt.image.*;
    
import javax.swing.*;
     
     
    
public 
class AxisCamera1 
extends JPanel 
implements Runnable
    {
        
public 
boolean useMJPGStream = 
true
//
still image set to false
        
//
streaming set to true
        
public String jpgURL="http://192.168.0.36/axis-cgi/jpg/image.cgi?resolution=352x288";
        
public String mjpgURL="http://192.168.0.36/mjpg/video.mjpg";
//
"
http://192.168.1.198/mjpg/video.mjpg
";
        DataInputStream dis;
        
private BufferedImage image=
null;
        
int counter=0;
     
        
public Dimension imageSize = 
null;
        
public 
boolean connected = 
false;
        
private 
boolean initCompleted = 
false;
        HttpURLConnection huc=
null;
        Component parent;
     
        
/**
 Creates a new instance of AxisCamera1 
*/
        
public AxisCamera1(Component parent_) {
        parent = parent_;
        }
     
        
public 
static Image getScaledInstanceAWT(BufferedImage source, 
double factor) {
        
int w = (
int) (source.getWidth() * factor);
        
int h = (
int) (source.getHeight() * factor);
        
return source.getScaledInstance(w, h, Image.SCALE_SMOOTH);
        }
     
        
public 
static BufferedImage toBufferedImage(Image image) {
        
new ImageIcon(image); 
//
load image
        
int w = image.getWidth(
null);
        
int h = image.getHeight(
null);
        BufferedImage bimage = 
new BufferedImage(w, h, BufferedImage.TYPE_BYTE_INDEXED);
        
//
BufferedImage bimage = getDefaultConfiguration().createCompatibleImage(w, h, Transparency.OPAQUE);
        Graphics2D g = bimage.createGraphics();
        g.drawImage(image, 0, 0, 
null);
        g.dispose();
        
return bimage;
        }
     
        
public 
void connect()
        {
            
try
            {
                URL u = 
new URL(useMJPGStream?mjpgURL:jpgURL);
                huc = (HttpURLConnection) u.openConnection();
                
//
System.out.println("huc="+huc);
                System.out.println(huc.getInputStream());
                InputStream is = huc.getInputStream();
                
//
System.out.println("is="+is);
                connected = 
true;
                BufferedInputStream bis = 
new BufferedInputStream(is);
                
//
System.out.println("bis="+bis);
                dis= 
new DataInputStream(bis);
                
if (!initCompleted) initDisplay();
            }
            
catch(IOException e)
            { 
//
incase no connection exists wait and try again, instead of printing the error
     
                
try
                {
                    huc.disconnect();
                    Thread.sleep(60);
                }
                
catch(InterruptedException ie)
                {
                    
//
huc.disconnect();connect();
                }
                
//
connect();
            }
            
catch(Exception e){;}
        }
     
        
public 
void initDisplay()
        { 
//
setup the display
            
if (useMJPGStream)readMJPGStream();
            
else
            {
                readJPG();
                disconnect();
            }
            imageSize = 
new Dimension(image.getWidth(
this), image.getHeight(
this));
            setPreferredSize(imageSize);
            parent.setSize(imageSize);
            parent.validate();
            initCompleted = 
true;
        }
     
        
public 
void disconnect(){
        
try{
        
if(connected){
        dis.close();
        connected = 
false;
        }
        }
catch(Exception e){;}
        }
     
        
public 
void paint(Graphics g) { 
//
used to set the image on the panel
        
if (image != 
null)
        g.drawImage(image, 0, 0, 
this);
        }
     
        
public 
void readStream(){ 
//
the basic method to continuously read the stream
        
try{
        
if (useMJPGStream){
        
while(
true){
        readMJPGStream();
        parent.repaint();
        }
        }
        
else{
        
while(
true){
        connect();
        readJPG();
        parent.repaint();
        disconnect();
     
        }
        }
     
        }
catch(Exception e){;}
        }
     
     
        
public 
void readMJPGStream(){ 
//
preprocess the mjpg stream to remove the mjpg encapsulation
        readLine(4,dis); 
//
discard the first 3 lines
        readJPG();
        readLine(1,dis); 
//
discard the last two lines
        }
     
        
public 
void readJPG(){ 
//
read the embedded jpeg image
        
try{
        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
        image = decoder.decodeAsBufferedImage();
     
        String s="a"+counter+".jpg";
        counter++;
        String filename="c:\\find_stillset\\"+s;
        System.out.println(filename);
     
        BufferedImage smaller = toBufferedImage(getScaledInstanceAWT(image, 1.0/3.0));
//
scalling image size
     
        
try {
        OutputStream out = 
new FileOutputStream(filename);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(smaller);
        out.close();
        } 
catch (Exception e) {
        System.out.println(e);
        }
     
        }
catch(Exception e){e.printStackTrace();disconnect();}
        }
     
        
public 
void readLine(
int n, DataInputStream dis){ 
//
used to strip out the header lines
        
for (
int i=0; i<n;i++){
        readLine(dis);
        }
        }
     
        
public 
void readLine(DataInputStream dis){
        
try{
        
boolean end = 
false;
        String lineEnd = "\n"; 
//
assumes that the end of the line is marked with this
        
byte[] lineEndBytes = lineEnd.getBytes();
        
byte[] byteBuf = 
new 
byte[lineEndBytes.length];
     
        
while(!end){
        dis.read(byteBuf,0,lineEndBytes.length);
        String t = 
new String(byteBuf);
        System.out.print(t); 
//
uncomment if you want to see what the lines actually look like
        
if(t.equals(lineEnd)) end=
true;
        }
        }
catch(Exception e){e.printStackTrace();}
     
     
        }
        
public 
void run() {
            System.out.println("in Run...................");
            connect();
            readStream();
        }
     
        
public 
static 
void main(String[] args) {
     
            
//
System.setProperty("http.proxyHost","proxy.tp.edu.sg");
        
//
    System.setProperty("http.proxyPort","80");
        JFrame jframe = 
new JFrame();
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        AxisCamera1 axPanel = 
new AxisCamera1(jframe);
        
new Thread(axPanel).start();
        jframe.getContentPane().add(axPanel);
        jframe.pack();
        jframe.show();
        }
     
    }

 

转载地址:http://lgyva.baihongyu.com/

你可能感兴趣的文章
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>