- 浏览: 199484 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
guoshijie1990:
写的不错
Android Https通信 -
xiaochi_84:
你好,我想问一下。为什么我在java工程里测试没有问题。但是到 ...
Android导出xls文件 -
Visual_chenpeng:
Android Https通信 -
jasonpeak:
求jasonpeak 写道我的为什么按返回键还是不关闭呢?求破 ...
Android关于ProgressDialog按返回键关闭 -
jasonpeak:
我的为什么按返回键还是不关闭呢?
Android关于ProgressDialog按返回键关闭
Android的监控一般都是需要用到Jni的,然后进行NDK编译,现在的工业探头走的都是srtp协议,所以接下来就走一下这个协议,首先我们需要创建一个线程用来负责走tcp协议,让探头给我们发送视频数据void *conTrolThread(void *lpParam) {
char szResponse[1024]; char szSendBuf[1024]; int nRet = 0; int nTimeOut = 5000; // setsockopt(rtsp_Socket, SOL_SOCKET, SO_RCVTIMEO, (char*) &nTimeOut, // sizeof(nTimeOut)); rtsp_Socket = socket(AF_INET, SOCK_STREAM, 0);//创建socket if (rtsp_Socket < 0) {//告诉Java创建Sock失败 return 0; } struct sockaddr_in addrSrv; addrSrv.sin_addr.s_addr = inet_addr(m_IP); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(m_Port); if (SOCKET_ERROR == connect(rtsp_Socket, (struct sockaddr*) &addrSrv, sizeof(struct sockaddr))) {//告诉Java创建Sock失败 LOGD("失败\n"); close(rtsp_Socket); rtsp_Socket = -1; return 0; } char lstrOptions[1024] = "OPTIONS rtsp://%s:%d/H264 RTSP/1.0\r\n" "CSeq: 1\r\n" "\r\n"; sprintf(szSendBuf, lstrOptions, m_IP, m_Port); send(rtsp_Socket, szSendBuf, 1024, 0); memset(szResponse, 0, sizeof(szResponse)); nRet = recv(rtsp_Socket, &szResponse[0], 1024, 0); char lstrDescribe[1024] = "DESCRIBE rtsp://%s:%d/H264 RTSP/1.0\r\n" "CSeq: 2\r\n" "Content-Length: 0\r\n" "\r\n"; memset(szSendBuf, 0, sizeof(szSendBuf)); sprintf(szSendBuf, lstrDescribe, m_IP, m_Port); send(rtsp_Socket, szSendBuf, 1024, 0); memset(szResponse, 0, sizeof(szResponse)); nRet = recv(rtsp_Socket, &szResponse[0], 1024, 0); char lstrSetup[1024] = "SETUP rtsp://%s:%d/H264 RTSP/1.0\r\n" "CSeq: 3\r\n" "Transport: RTP/AVP;unicast;client_port=6666-6667\r\n" "\r\n"; memset(szSendBuf, 0, sizeof(szSendBuf)); sprintf(szSendBuf, lstrSetup, m_IP, m_Port); send(rtsp_Socket, szSendBuf, 1024, 0); memset(szResponse, 0, sizeof(szResponse)); nRet = recv(rtsp_Socket, &szResponse[0], 1024, 0); char Session[100]; int i = 0, j = 0; for (; i < strlen(szResponse) - 9; i++) { if ('S' == szResponse[i] && 'e' == szResponse[i + 1] && 's' == szResponse[i + 2] && 's' == szResponse[i + 3] && 'i' == szResponse[i + 4] && 'o' == szResponse[i + 5] && 'n' == szResponse[i + 6] && ':' == szResponse[i + 7] && ' ' == szResponse[i + 8]) { while (szResponse[i + 9 + j] != '\r' && szResponse[i + 10 + j] != '\n') { Session[j] = szResponse[i + 9 + j]; j++; } break; } } char lstrPlay[1024] = "PLAY rtsp://%s:%d/H264 RTSP/1.0\r\n" "CSeq: 4\r\n" "Content-Length: 0\r\n" "Session: %s\r\n" "Range: npt=0.000-\r\n" "\r\n"; memset(szSendBuf, 0, sizeof(szSendBuf)); sprintf(szSendBuf, lstrPlay, m_IP, m_Port, Session); send(rtsp_Socket, szSendBuf, 1024, 0); send(rtsp_Socket, lstrDescribe, 1024, 0); memset(szResponse, 0, sizeof(szResponse)); nRet = recv(rtsp_Socket, &szResponse[0], 1024, 0); LOGD("\n"); }
接下来创建一个接收线程用来负责数据的接收
void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen) { (jvm_save)->AttachCurrentThread(&env_save, NULL); jarrayVideo = (env_save)->NewByteArray(352 * 288 * 2); int hr; unpack = new RtpUnPack(hr); int n; int outSize = 0; socklen_t len = clilen; unsigned char mesg[20480]; int isFindIFrame = 0; long timebase = 0; InitDecoder(352, 288); while (canReceive) { /* waiting for receive data */ memset(mesg, 0, sizeof(mesg)); n = recvfrom(sockfd, mesg, 2048, 0, pcliaddr, &len); outSize = 0; //接受到视频数据开始拼桢 BYTE *pFrame = unpack->Parse_RTP_Packet(mesg, n, &outSize); if (timebase == 0 || timebase <= unpack->m_RTP_Header.ts) { timebase = unpack->m_RTP_Header.ts; } else { continue; } if (pFrame != NULL) { if (isFindIFrame == 0) { if (outSize > 1456) { isFindIFrame = 1; } else { continue; } } int len = outSize; if (DecoderNal(pFrame, len, videoVideoData) > 0) { disPlayVideo(0, (char *) videoVideoData, c->width, c->height, 0); } } } UninitDecoder(); (env_save)->ReleaseByteArrayElements(jarrayVideo, (jbyte*) videoVideoData, 0); (jvm_save)->DetachCurrentThread(); } void *recvThread(void *lpParam) { int sockfd; struct sockaddr_in servaddr, cliaddr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */ /* init servaddr */ bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(6666); /* bind address and port to socket */ if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) == -1) { perror("bind error"); exit(1); } do_echo(sockfd, (struct sockaddr *) &cliaddr, sizeof(cliaddr)); LOGD("接收线程关闭\n"); }
发表评论
-
Android获取设备信息
2012-11-22 00:10 1391转http://blog.csdn.net/gumanr ... -
Android列表索引实现
2012-07-15 10:47 6688最近做一个项目用到了列表索引,所以在网上找了一下,发现一个博客 ... -
Android开发环境搭建(Windows)
2012-07-03 13:37 792什么都不说来,直接下载附件好了,这个图文的不好发布 -
Linux下Android环境搭建
2012-07-03 13:34 1232--以Ubuntu为例 Linux下Android环境 ... -
Android ListView 滑动背景为黑色的解决办法
2012-06-28 22:08 1070转至:http://blog.163.com/zh ... -
Android蓝牙开发
2012-06-26 15:38 1526今天查了一些资料,然后发现一篇文章挺好,关于蓝牙的,原文网址: ... -
Android自定义对话框
2012-06-22 11:36 2503这时我封装的一个对话框工具类 package com. ... -
Android语音采集
2012-06-18 10:55 15587Android端的语音采集主要是调用AudioRecord,首 ... -
Android语音识别
2012-06-18 09:28 2271Android由于有了Google的支持,那么他的语音识别做起 ... -
Android视频播放
2012-05-24 19:55 1901视频播放优好多种,一种是播放系统可以播放的视频文件,一种是播放 ... -
重写android返回键
2012-05-24 19:23 21911在Activity里面加入下面代码: @Overrid ... -
Android图像处理工具类
2012-04-09 09:37 2519还是最近整理代码、、发现了一个师兄写的图片工具类,感觉还是蛮有 ... -
Android导出xls文件
2012-04-08 15:45 6609整理硬盘的时候找到了这些代码,看了一下,发现还有点用处,所以就 ... -
android的文字跑马灯效果
2012-04-03 21:04 7306今天问了解决文本内容过长的显示问题,而用了一个android自 ... -
Android超级简单的TabView实现
2012-04-03 20:56 7178可能很多人都有想要实现一个导航栏,但是不知道改怎么弄,因为an ... -
ImageView的属性android:scaleType
2012-04-03 20:04 2053ImageView的属性android:scaleType ... -
关于Android程序的全屏显示
2012-04-03 19:53 1010对于Android开发来说,全屏和无标题是我们常用的几行代码, ... -
Android文件下载
2012-03-19 16:45 1367嘿嘿,也不知道什么时候写的代码,清理硬盘的时候发现了,而且还能 ... -
Android视图的截图
2012-03-19 16:38 6897在pc上的截图软件很多,但是android上的比较少,所以就自 ... -
Android短信批量删除效果
2012-03-19 16:38 3608前段时间在做一个项目的后期维护时,对方提出了把短信做成可以批量 ...
相关推荐
标题中的“android监控pc应用_android端”指的是一个Android应用程序,其功能是使用户能够远程监控PC(个人计算机)的屏幕。这种类型的应用通常基于网络通信技术,如TCP/IP协议,使得Android设备可以作为远程控制...
【Android监控技术详解】 在移动设备的广泛应用中,Android系统占据了相当大的市场份额,这使得它成为了个人信息处理的重要平台。然而,随着技术的发展,Android设备的监控功能也引起了人们的关注,尤其是对于家长...
标题中的“gpsdemo_GPS_android_android监控_android定位_监控.zip”表明这是一个关于Android平台上的GPS定位与监控系统的示例项目。这个项目可能包含了实现GPS定位、数据监控以及Android应用开发的相关代码和资源。...
标题 "sp_java_handsomemmf_socket_android监控_android_" 暗示了这是一个关于使用Java、Socket编程技术在Android平台上实现手机实时视频监控的项目。描述指出,源码包括了客户端代码,这意味着开发者可以了解并学习...
【海康威视Android监控应用详解】 在现代安防领域,海康威视作为一个知名的监控设备制造商,提供了丰富的产品线和解决方案。本文将详细介绍如何在Android设备上使用海康威视的监控系统,以及如何配置和访问监控视频...
首先,**系统日志收集**是Android监控的基础,通过`Logcat`工具可以获取设备运行时的日志信息,包括应用程序、系统服务、硬件模块等各种事件。开发者可以使用`adb logcat`命令或集成在IDE(如Android Studio)中的...
【Android监控】 这里的“监控”可能指的是两个方面:一是对用户位置的实时跟踪,二是对应用程序自身运行状态的监控。对于前者,开发者可以通过周期性地获取位置更新来实现,例如设置LocationListener监听位置变化...
"源码的重要性.txt"文件可能包含了实现这些功能的源代码示例,深入研究这些源码可以帮助我们更好地理解和实践Android监控技术。而"监控别人的行踪"这个文件名暗示了实际应用场景,可能是关于如何在合法范围内实现...
标题中的“android监控pc应用_服务端”指的是一个Android应用程序,其主要功能是实现对PC(个人计算机)的远程监控,而这里的“服务端”部分则意味着这个应用扮演了服务器的角色,接收并处理来自Android客户端的请求...
标题“Android监控S7PLCIO.rar”指出的是一个基于Android平台的应用程序,该应用设计用于监测局域网内的西门子S7系列PLC(可编程逻辑控制器)的输入/输出(IO)状态。这涉及到工业自动化领域的远程监控技术,特别是...
本示例“android监控音量键并自定义动画”着重讲解了如何监听音量键事件以及创建自定义动画效果,这对于音乐播放器、视频应用等多媒体应用尤其重要。 首先,我们要理解如何在Android中监听音量键事件。这通常通过...
在描述中提到的“Android监控助手全套”可能是指一个配套的Android应用程序,用于帮助商家实时监控和管理支付状态,确保交易的顺利进行。这个助手可能包含的功能有:实时推送交易通知、查看交易详情、统计收入报表、...
在Android开发过程中,系统资源的实时监控是至关重要的,它能帮助开发者理解应用程序的性能表现,定位并优化可能存在的问题。这款"Android系统资源实时监控工具"是一个轻量级的解决方案,专为开发者设计,提供了丰富...
在Android平台上实现手机远程监控,通常涉及到多个技术领域,包括网络通信、图像处理、设备权限管理等。这个项目"Android手机远程监控源码"可能是提供了一整套解决方案,让我们一起探讨其中可能涉及的关键知识点。 ...
在本文中,我们将深入探讨基于Android的远程视频监控系统的核心知识点。这个系统源码的提供意味着我们可以了解到如何在Android平台上实现远程视频流的接收、处理和显示,这对于开发者来说是宝贵的资源。 首先,我们...
在Android开发过程中,性能参数监控是一项至关重要的任务,它能够帮助开发者发现并优化应用程序的性能问题,提升用户体验。本文将围绕“android性能参数监控工具”这一主题,详细讲解相关知识点。 首先,我们要理解...
【Android视频监控源码9_CamMonitor】是一个专门为Android平台设计的视频监控应用程序的源代码。这个项目旨在帮助开发者理解如何在Android设备上实现实时的视频流监控功能,适用于智能家居、安全监控等领域。通过...
Http 主要监控网络的速度,时延 Ping 测量发包、丢包、发送时延等数据 Rssi 扫描周边的AP信息,并展示出来 Ftp 实现Ftp客户端的上传和下载,如需使用此功能,需要自己在代码中填写服务器地址、端口号、用户名和密码...