问题:手机如何实时传送摄像头的视频流到电脑端. 列出可行思路就行或解答我的疑问
手机是安卓7.0以上系统 android studio 3.2. 电脑是win7-win10系统 C# VS2015编程.
网络是局域网,IP可以固定下来.
PS:我的想法 手机实时录制视频流,采用间隔0.1秒采集一次图像,压缩成特定格式,再把特定格式压缩包发给电脑,电脑解码成图像,给halcon识别图像,识别出来的信息输入到表格里.
PS2:进度 安卓采集图像 搞定
安卓压缩图像 没搞定 没思路
安卓传输压缩包 没搞定 没思路
电脑接收压缩包 没搞定 完全没想法
电脑解码 没搞定 完全不懂
halcon识别图像(里面有3个条形码) 成字符串 搞定
字符串导入表格 搞定
PS3:疑问1 我传输的是0.1秒一次,就算是高清的图片,是不是不用压缩也不会对公司局域网形成干扰.
疑问2 传送压缩包或图片,并接收这两步完全没想法
压缩包传送,可以用流来传输(I/O)文件流。
图片一般也是文件流或者直接base64
图片压缩:
/**
* 压缩图片(质量压缩)
* @param bitmap
*/
public static File compressImage(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 100;
while (baos.toByteArray().length / 1024 > 500) { //循环判断如果压缩后图片是否大于1024kb,大于继续压缩
baos.reset();//重置baos即清空baos
options -= 10;//每次都减少10
bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
long length = baos.toByteArray().length;
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date(System.currentTimeMillis());
String filename = format.format(date);
File file = new File(Environment.getExternalStorageDirectory(), filename + ".png");
try {
FileOutputStream fos = new FileOutputStream(file);
try {
fos.write(baos.toByteArray());
fos.flush();
fos.close();
} catch (IOException e) {
// BAFLogger.e(TAG,e.getMessage());
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// BAFLogger.e(TAG,e.getMessage());
e.printStackTrace();
}
recycleBitmap(bitmap);
return file;
}