# 哈哈镜项目
## 视频捕获技术资料
遇到了很多困难,主要是JMF不支持64位Java JDK,同时捕获到的视频流有各种问题,如出现只能移动到屏幕左边才能够显示,同时需要安装第三方视频流捕获软件才能获取本机摄像头,因此本项目采用了开源框架WebCame。
> webcam和jfm等java播放框架的最大不同之处在于其底层封装了可以直接获取本机所有摄像头设备和图像展示的接口,可以很方便的获取视频流并添加各种特效(主要通过处理视频流中生成的缓存流图片(格式为BufferedImage)实现对视频效果的转换)
>
> 最大的优势在于,具有很多优质的开源代码,开发者可以用很少的代码完成jmf等处理的逻辑。与此同时,框架支持主流驱动,如jmf、opencv等,更多的信息可以参考[官方文档](https://github.com/ambitiousCC/webcam-capture/tree/master/webcam-capture/src/example/java)
获取多种摄像头的方法:
```java
String name = "";
try {
//获取所有的摄像头设备
List<Webcam> webcams = Webcam.getDiscoveryService().getWebcams(10, TimeUnit.SECONDS);
name = webcams.get(1).getName();
} catch (TimeoutException e) {
e.printStackTrace();
}
Webcam webcam = Webcam.getWebcamByName(name);
```
实现视频流展示的主要实现代码:
```java
Webcam webcam = Webcam.getDefault(); // 获取默认的摄像头设备
Dimension size = WebcamResolution.VGA.getSize(); // 获取VGA格式的视频窗口大小
webcam.setViewSize(size); // 设置展示窗口
WebcamPanel panel = new WebcamPanel(webcam); // 视频展示的panel,可以直接加入容器中展示
JFrame window = new JFrame("webcam panel"); // JFrame容器
window.add(panel); // 添加视频容器
window.setResizable(true); // 允许调整大小
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.pack();
window.setVisible(true);
```
### 实现软件设置功能
软件设置主要有缓存变量和实例化缓存两种方式,根据具体需要,既要实现变量缓存动态更新保存目录,又要实现下一次打开软件可以自动加载上次保存
#### 变量动态缓存
实现的思路比较容易,具体配置的内容修改主要是通过全局变量实现:
设定全局的变量保存设置的相关配置,当用户进行操作时,通过改变全局变量实现动态更新,同时支持将全局变量当前状态保存到具体的实例化文件中,具体操作见【实例化缓存】
#### 实例化缓存
图形化交互:
* 用户点击按钮摊开可供选择的文件窗口:
1. 通过`JFileChooser`类实现打开窗口,获取用户选择的目录,写入全局变量的同时写入实例化文件。这里通过实现一个`ObjectFile`实现,类代码如下:
```java
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
public class ObjectFile
{
/**
* 持久化为XML对象
*
* @param obj
* @param out
*/
public void storeXML(Object obj, OutputStream out)
{
XMLEncoder encoder = new XMLEncoder(out);
encoder.writeObject(obj);
encoder.flush();
encoder.close();
}
/**
* 从XML中加载对象
*
* @param in
* @return
*/
public Object loadXML(InputStream in)
{
XMLDecoder decoder = new XMLDecoder(in);
Object obj = decoder.readObject();
decoder.close();
return obj;
}
/**
* 持久化对象
*
* @param obj
* @param out
* @throws IOException
*/
public void store(Object obj, OutputStream out) throws IOException
{
ObjectOutputStream outputStream = new ObjectOutputStream(out);
outputStream.writeObject(obj);
outputStream.flush();
outputStream.close();
}
/**
* 加载对象
*
* @param in
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public Object load(InputStream in) throws IOException,
ClassNotFoundException
{
ObjectInputStream inputStream = new ObjectInputStream(in);
Object obj = inputStream.readObject();
inputStream.close();
return obj;
}
public static void main(String[] args) throws Exception
{
String storeName = "java object";
//xml文件形式存储
File xmlFile = new File("xmlFile.dat");
ObjectFile serializable = new ObjectFile();
serializable.storeXML(storeName, new FileOutputStream(xmlFile));
System.out.println(serializable.loadXML(new FileInputStream(xmlFile)));
//文件形式存储
File file = new File("file.dat");
serializable.store(storeName, new FileOutputStream(file));
System.out.println(serializable.load(new FileInputStream(file)));
}
}
```
2. 引入实例化类,实现这个对象,将用户选择的设置写入缓存,这里监听用户提交的按钮,每次提交之后执行,具体代码如下:
```java
saveBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
currentImgPath = imgText.getText();//图片保存路径,全局变量,声明在类内,private String xxxpath;
currentImgType = (String)choosedImgType.getSelectedItem();//图片保存格式
currentVdoPath = vdoText.getText();//视频保存路径
currentVdoType = (String)choosedVdoType.getSelectedItem();//视频保存格式
String[] saveOption = {currentImgPath,currentImgType,currentVdoPath,currentVdoType};
//在此处实现持久化
try {
ObjectFile serializable = new ObjectFile();
File file = new File(saveFilePath);
serializable.store(saveOption, new FileOutputStream(file));
System.out.println(serializable.load(new FileInputStream(file)));
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
jF.dispose(); //退出窗口
}
});
```
## 视频格式和图片格式转换材料
### 截图并保存为多种格式图片文件
各种图片实质上的缓冲流一致,各个图片格式的保存方式一致,但是支持的图片保存格式有限,需要先判断用户输入的格式是否支持,支持的图片格式有:png、jpg、gif、bmp、wbmp
具体代码如下:
```java
private String getImageType(String name) {
String t = name.substring(name.lastIndexOf(".")+1,name.length()); //从路径中获取图片的格式
for(String type:supportImgFormat) { // 判断是否支持
if(t.equals(type))
return type;
}
return null;
}
```
实现保存图片的基本方法如下:
```java
try{
File file = new File(filePath); //根据用户选择的路径创建新的图片对象
String choosedType = getImageType(file.getName()); //判断用户选择的类型是否支持
if(choosedType==null) {
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
JOptionPane.showMessageDialog(null, "不支持的文件类型!");
}
});
retu
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
基于Java的视频流处理(原创) (394个子文件)
00718f406fda2d141cc1ec21f58e6bb899afe8 60B
0286739dbf3a0783b426572c9c0777a96aba4b 2KB
043b30a62db50467d41925e591a3659ee33ef5 793B
04aa427fdceb0bafe158f678647b961e9c525f 828B
04db25e0efe753dfdf5804cf365fc1da1c64e2 970B
04dcdc7a8619eb0f66900fdb10db7a32e51e92 3KB
0583860cb86202b42e9f9c76610d38baac10aa 815B
05c691a288af0f9ee165bd1b503e497c2bda5e 46B
0798ffc7c66fd3db5855ebd4ff85a5659f1333 1KB
092833477b7adad30a16d4b0bef98a01f96787 66B
09ad7146711164f86a480e2b51829da2ee4d2b 89B
0ba2c7593a97d3bd74b5403bdc6641573ec118 2KB
1160bd2293ec11cee58493cc3de53b14abac85 865B
131a264491dd115eb1ffd87e1f21ce1bcdf57d 132KB
1523e58130e8de2465b34030478ea41518b5ac 1KB
1553cf663062b3b7a1cff1c568454d330d726f 62B
15d09a8635314bae8467c3e9b206e1a102f6c4 711B
1635848734ee337be15b9c17f9f3e1302549e8 70B
1687a904aecbfd944484cca092238e28ddee7b 125KB
19b6d894ec046259ef99d6c719546ae367dc9e 8KB
1a2518d8c448ee84053520c84c9e83fa24dd92 171B
1ac05de88dae35095532cc1ed6dec30a9bb3fc 742B
1b51ed62dc89871d475b3be78eaa2b455d0359 1KB
1da7d81ff788f891629ab35c6d7781fddf1da6 65B
22f3a122768bb008f3ba31c25c1e58a16bec91 253B
25215c0150b87efad69b3eb556d9e9a2b05280 128KB
256f9055f80d5b3281db1616691a34f952a360 128KB
2701723334b56d44518b61be7eec2c309ffd79 974B
27a44bca0db3a7fb0f2a5e332e004ee52f261e 652B
290fe0a269c8de6eaa159f69c8f24fdfd42664 5KB
29ac7470935ce0b2e9de7fed158d9bbf7a70a3 143B
2b99db6f217caded281e537323c5c93c0e47a1 461B
2e16ca073335298abc9c82b8eba961088f81ad 57B
2ffbfbcefe1ca42c9fcd17405e7b5bb34418c2 3KB
32f4b314f64d9f72a75fde64440d9a2ce903d6 605B
34ebd5cd54750cab200f10888f49f3f8effee1 659B
35195021954ce51edb4019a424fddeb4865be2 1KB
3629e90ed9b734cf2fc481531d34a59e0aff93 2KB
367803e301e982416a8e6c235408e57a95233c 918B
3a7162d5c3e85bd8d366b889b98320128d5861 307B
3a91a39eaa5cb361238bbc3153cc5f600b5203 543B
3cd5c6b24e86aa747573041afa454e19603956 1KB
3d0958ae5da830479c6e93b87bd280e4f0f06f 2KB
3ebbf6d9c1fc126edeae4d0cbe968b9dfb4257 58B
4344dbcd93ad97dd117b4d25fe96905812fe22 9KB
44149ca2a74b469cb9f90c4c939a5881981947 455B
45c662128f2a702adfb3b4fcc8689ee18b881c 2KB
483fff42b675e178f4dbb21ca8c2ba7eb84dc8 2KB
48911dc60c18d0dc54893e2ff615cd395026a4 1KB
491c613e04f4649cf6752a442312f107101915 52B
4a5a0d57287204accd044591250cd4c5e531fe 54B
4b72334612f9f8a71804a3605d64d8897b740b 282B
4b74e9ad3b70cfb9ba5172bf4cf45d164202bd 10KB
4e32f7346d4cdf2791072b5d931d31b737e549 1KB
4ff000ff9190adfe37da58a59e3feb68dd599d 1KB
51c41f706dddf70106943a68ecd7ab4379c39a 488B
527503ccd670fcbf5cda5255c137f26effa72d 63B
533741d0856d52a805b4f978f7b58f23223632 1KB
533f521b5e5eb66b289273889a4de90b1af415 56B
54d609a321b774d5859aca6fdd6fd38d1c1fd8 658B
54e88d55d07f3d59e3ba069aefed60dd802c76 1KB
567c98cab1831a8226d0b0617c0189b65f69ef 123B
56cc0f0fe32b108312c1fb4971d9910d53a020 712B
5888a111fdc22f10624758696b5eb7d64510c9 579B
593fe1fb83f60580123fddde80075dddb810b4 1KB
59844ccda995d4c8d9e03dfca9fca7f2fb169e 7KB
5996fbabd4c479d0b997d87fded16622c01541 299B
5b6d9ee5a61f760545cb0dd5afbf38143f8cdd 68B
5b6f1c95984a75af2a70b1fd3c121ea83a7683 1KB
5c7d77ef7d7f7f4c3b38f841b5266cba53b123 320B
5d27f537e5f33b3b5e0adfa4d400bee81bf035 1KB
5e49a0012600ea55868bfc7086dbcec7485682 60B
5f3d2e60f31e7dc1774a5ad0f15896a231682d 2KB
6033413ff3efd242f215c7283c2d695c54af00 435B
60a49677e74e41f1374842401c07ddc9f80b2e 297B
60d1c102796b63ac9f1783b1cc4bb1c0c762f7 442B
610f82330033d9a3a56f79f1e41560a4ded387 914B
6186c4cd1e0be0ea0e4eaf08bb6553e68d6cf1 6KB
6276eef6be3b5f0d24f2c40c2e3af80ee35e78 527B
62e6001d993743189d20abca55bea308560c15 97KB
6302e7e69387a3e4a2191eda02fb8300ef9272 61B
645c16a2c79f1449d071a33ae24c2d25ab8b75 278B
64a0e9ea53f75d255fa2d22fe6d7e4e867d897 614B
64ff768920be041c2216600b196ed8270cff23 501B
6534fb27b68192f27f985d3879e173ec77adb8 1KB
661a5ffc3c46924b456f0eac25ea4c6e9b4047 296B
664c416567f26fa74e5695307064f0dc3764b6 2KB
678fdb92d8bfa6e9bfc0f8826a4b7d4012daab 659B
67f5bfac30f9086fe2b305e8205ae4fa6a37f0 498B
6b05263100a49518e605062f386f5d22565124 298B
6c3542ff45adcd444f7e18488f3b36093db206 1KB
6d4c93234c7478f385fded8578dc3591162300 526B
6e097ab80c2b4587e05591eb89ddcbe9f321a5 67B
6f1da3bcfcd1f1d0411ba9f81427b228668c21 605B
6f3825e719ee5aea78d320ab50c5269808ba0c 130KB
70a2072ce178ea89b87c564ec91214a2daef06 1KB
70fb3bc3eda76ecc05e41de384dd32643dc1ec 28KB
71965b5cdae96a740673cdbb36a4160d6b3700 986B
7509345d7c029de87452f58e003198fa45f15d 2KB
7590e2bceaed68663d3380a97ce44fc324a40a 659B
共 394 条
- 1
- 2
- 3
- 4
琴&
- 粉丝: 230
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论10