- 浏览: 197132 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1340转http://blog.csdn.net/gumanr ... -
Android列表索引实现
2012-07-15 10:47 6637最近做一个项目用到了列表索引,所以在网上找了一下,发现一个博客 ... -
Android开发环境搭建(Windows)
2012-07-03 13:37 762什么都不说来,直接下载附件好了,这个图文的不好发布 -
Linux下Android环境搭建
2012-07-03 13:34 1187--以Ubuntu为例 Linux下Android环境 ... -
Android ListView 滑动背景为黑色的解决办法
2012-06-28 22:08 1015转至:http://blog.163.com/zh ... -
Android蓝牙开发
2012-06-26 15:38 1468今天查了一些资料,然后发现一篇文章挺好,关于蓝牙的,原文网址: ... -
Android自定义对话框
2012-06-22 11:36 2455这时我封装的一个对话框工具类 package com. ... -
Android语音采集
2012-06-18 10:55 15471Android端的语音采集主要是调用AudioRecord,首 ... -
Android语音识别
2012-06-18 09:28 2230Android由于有了Google的支持,那么他的语音识别做起 ... -
Android视频播放
2012-05-24 19:55 1857视频播放优好多种,一种是播放系统可以播放的视频文件,一种是播放 ... -
重写android返回键
2012-05-24 19:23 21871在Activity里面加入下面代码: @Overrid ... -
Android图像处理工具类
2012-04-09 09:37 2478还是最近整理代码、、发现了一个师兄写的图片工具类,感觉还是蛮有 ... -
Android导出xls文件
2012-04-08 15:45 6539整理硬盘的时候找到了这些代码,看了一下,发现还有点用处,所以就 ... -
android的文字跑马灯效果
2012-04-03 21:04 7271今天问了解决文本内容过长的显示问题,而用了一个android自 ... -
Android超级简单的TabView实现
2012-04-03 20:56 7124可能很多人都有想要实现一个导航栏,但是不知道改怎么弄,因为an ... -
ImageView的属性android:scaleType
2012-04-03 20:04 2001ImageView的属性android:scaleType ... -
关于Android程序的全屏显示
2012-04-03 19:53 978对于Android开发来说,全屏和无标题是我们常用的几行代码, ... -
Android文件下载
2012-03-19 16:45 1321嘿嘿,也不知道什么时候写的代码,清理硬盘的时候发现了,而且还能 ... -
Android视图的截图
2012-03-19 16:38 6860在pc上的截图软件很多,但是android上的比较少,所以就自 ... -
Android短信批量删除效果
2012-03-19 16:38 3535前段时间在做一个项目的后期维护时,对方提出了把短信做成可以批量 ...
相关推荐
android远程监控PC屏幕 android端程序 博客地址:http://blog.csdn.net/krelve/article/details/42192637
Android监控别人的行踪.zip
gpsdemo_GPS_android_android监控_android定位_监控.zip
android 监控android 监控
gpsdemo_GPS_android_android监控_android定位_监控_源码.zip
Android监控电量变化的代码例子。用于演示监控电量变化、锁屏事件、解除锁屏等功能。
微信扫码个人免签支付系统php源码和Android监控助手全套
Android手机远程监控源码.zip
Http 主要监控网络的速度,时延 Ping 测量发包、丢包、发送时延等数据 Rssi 扫描周边的AP信息,并展示出来 Ftp 实现Ftp客户端的上传和下载,如需使用此功能,需要自己在代码中填写服务器地址、端口号、用户名和密码...
手机实时视频监控源码是基于Socket的Android手机视频实时传输附带客户端代码。
该demo实现了在android中监控音量实体键,屏蔽系统的音量seekbar,自定义一个控件来代替原来的seekbar,并且带有淡入淡出的动画效果,在音乐播放器或视频类软件中非常实用。
Android视频监控源码9_CamMonitor
android远程视频监控源码,完整版,亲测可用。资源完善
Android软件敏感行为的监控及预测研究,李健鹏,辛阳,由于Android应用市场缺乏有效的监管机制,其中存在大量应用可能威胁用户的信息安全。本文针对Android应用中的侵犯用户隐私的敏感行为�
软件实现使用android手机监视电脑屏幕(特别适合随时用手机查看小孩的上网情况)。 电脑和手机必须在同一个局域网内,正常情况是连接到同一个路由器,手机通过wifi和电脑通过同一个路由器上网。 1、在需要监视的...
android短信监控,档短信来了,可以监控到内容,并播放指定铃声
android远程监控PC屏幕 服务端程序 博客地址:http://blog.csdn.net/krelve/article/details/42192637
可用的海康威视监控 , 加上账户密码 端口 就能使用 duan
文件清单: getdatav1.bat getdatav2.bat android日志分析.xls 无线ADB连接android手机和电脑.docx