您的位置:首页 > 运维架构

关于获取监控摄像头数据。车联网

2018-01-18 15:26 441 查看
最近再做一个车联网管理系统demo。
在车辆上安装gps和摄像头采集数据,然后通过tcp传输16进制数据到手机端,手机端显示定位速度和视频功能。
开发过程中碰到几个难点记录下来,以便以后查看。
1.tcp传输16进制问题。
首先建立tcp链接
try {
/* 建立socket */
socket = new Socket(IPAdr, PORT);
/* 输出流 */
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
/* 输入流 */
InputStream inputStream = socket.getInputStream();
Thread.sleep(50, 0);
DataInputStream din = new DataInputStream(inputStream);
byte[] buf = new byte[12];
int i;
while ((i = din.read(buf, 0, 12)) != -1) {
Message msg = handler.obtainMessage();
msg.obj = bytesToHexString(buf);
msg.what = 10;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
isConnected = false;
}然后获取16进制数据
public static String bytesToHexString(byte[] bytes) {
String result = "";
for (int i = 0; i < bytes.length; i++) {

String hexString = Integer.toHexString(bytes[i] & 0xFF);
if (hexString.length() == 1) {
hexString = '0' + hexString;
}
result += hexString.toUpperCase();
}
return result;
}
再根据与c++的对接,定好数据格式,按照当前情况解析,比如c++定好了是2个字符代表一位,解析的时候
List<String> stringList = new ArrayList<>();
for (int i = 0; i < (result.length() / 8); i++) {
stringList.add(result.substring(i * 8, (i + 1) * 8));
}
就可以得到数据集合。2.传输的时候有经纬度,而且是高精度的,直接使用double可能会自动4舍5入,影响定位准确性。
解决办法:直接转string,再判断得到的数据长度,在规定的位置添加小数点。(谁有更好的办法欢迎留言)
3.关于视频直接采用

EasyDSS

直接去拉流播放就行。播放rtmp流媒体使用的是upplayer,在github上搜索就能找到,使用也非常简单
public void refresh(View view) {
//        path = mPathEt.getText().toString();
upVideoView.setVideoPath(path);
upVideoView.start();
}
刚开始写博客,语言总结不犀利,我会改进的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息