这是本项目的第一篇日志。。。主要介绍背景和设计情况吧,也算做个备忘。废话比较多,对于时间不多的看客在此郑重提醒,这里只是LZ自己做个回顾,完全是自娱自乐。如果有能帮助您的地方不胜荣幸,如果觉得浪费您时间了在这里说句对不起了
这大学读的也是跌跌撞撞的,住院、挂科基本全程尾随,还迫不得已重修了一年大三,也挺对不起父母亲人老师的。主要还是自己某种奇怪的坚持在做遂吧,自从接触java开发就一头钻了进取,对学校其他课程再不感兴趣。我也是真心热爱java开发这门技术。
闲话到这里,YVisual是本人本科毕业设计的项目,目前主要目标是完成一个可以在android和服务器之间视频通讯的一个软件(当然,初步目标是将视频发送到服务器并保存。。服务器端保存是指导老师强烈要求的。。我隐隐听到了硬盘君的哀嚎)
初步设想Android端完成H.264编码发送至服务器保存,后续有android客户端之间进行视频通话、HTML5和android之间视频通话的设想。本来想写个java桌面应用的,但是JMF无论如何都没办法支持x64系统只能作罢,有空学了JNI再完善吧。
说说项目进度吧
目前完成了android的界面初步开发(平台为android4.0,由于Fragment对TabActivity的取代只好对低版本说声对不起了),双向RSA编码和解码。
服务器端是一个J2EE Web项目,采用MySQL数据库对用户账户信息、视频文件信息做一个存储。ORM采用了MyBatis3框架(相对于沉重的Hibernate来说还是更喜欢这种灵活小巧的方式)。新建一个service事务层管理前端Struts2和myBatis之间的通信,也加入了初学的Spring框架。这部分暂时只做了登陆和注册的流程。前端页面完全没做。在web端口以外额外打开了两个端口(tcp+udp)作为客户端通信接口。现在暂时使用一个junit类开启端口做测试用。
udp端口作为消息传输信道(原来设计是两个udp连接一个负责消息一个负责视频数据传输,采用不同的协议),后来考虑到视频数据连续性需要有保证所以把数据传输通道换成了TCP连接,就出现了udp+tcp连接这样怪异的设计。。
udp消息通道采用json数据格式,alibaba的fastjson很好用,消息传输采用RSA加密,使用心跳脉冲维持在线状态。
tcp只在需要的时候创建连接,本着做一个新项目就要学一点新东西的原则,tcp服务器端采用了nio设计,对于这个领域还非常生疏,不得不新写了一个测试项目学习。至于协议则是采用了字节流的设计
当然,考虑到后面可能要做p2p实现最后可能还是会把tcp通道改成udp。不过还需要一个更复杂的协议来保证数据传输的准确性
碰到的问题:
1,RSA在安卓端和PC端不能匹配。Android从服务器取得RSA公钥后无法解密来自服务器的消息,Android使用公钥加密的数据在服务器端无法解密,经过查询资料得知两者使用的不是同一个RSA标准。在引入bouncycastle包后解决。
2,H.264格式还没完全吃透,暂时还没到那一步,到时候再来头痛吧
3,RTP协议,恩,只是备忘。。。
4,netty,恩,同学推荐的NIO框架,不过使用框架前还是先把基础搞明白比较好
剩下的后面再谈吧
分享到:
相关推荐
当设置一个setTimeout时,浏览器会创建一个包含回调函数、起始时间和延迟时间的任务对象,并将其添加到这个延迟队列中。这样,即使主线程正在执行其他任务,定时器任务也不会被打断。 消息循环系统会定期检查延迟...
开题报告是毕业设计的起始阶段,它涵盖了项目的目标、意义、技术选型、预期成果和实施计划。在ASP美食网站的开题报告中,可以预期看到以下几个关键点: 1. **需求分析**:明确网站的功能需求,如用户管理、菜品展示...
综上所述,开发“日期多选,连续日期、间断日期快速选择”功能涉及到前端UI设计、JavaScript编程、日历控件的实现以及用户交互逻辑。通过使用像Kalendae这样的库,开发者可以便捷地集成这些高级特性,提升应用程序的...
在面试中,面试官可能会要求候选人手写遍历DOM树的代码,这不仅考察了候选人对DOM结构的理解,也考察了其编码习惯和问题解决能力。 首先,我们来回顾一下什么是Node和Element。 - **Node**: 在DOM中,Node是一个...
【文献综述】是对某一领域现有研究成果的全面回顾和分析,"文献综述.doc"可能涵盖了网上办公系统的相关研究、技术趋势和挑战,为设计提供理论依据。 【开题报告】是毕业设计的起始阶段,"开题报告.doc"阐述了选题的...
8. **总结和展望**:项目结束后,对整个开发过程进行回顾,总结经验教训,并对未来可能的改进和扩展提出展望。 这个简易银行管理系统项目,不仅锻炼了学生的软件开发技能,也让他们了解了实际项目开发的完整流程,...
如果图片的右边界超过窗口边界,则将其下移至下一行的起始位置。 4. **移动到窗口上显示文字**:为图片添加文字说明是很常见的需求。这里可能是指当图片进入视口(即用户可以看到的部分)时,显示相关的文字描述。...
通过分析,我们可以推测出这部分可能包含了项目的起始动机、目标用户群体(如教师、学生或学校管理层)以及系统预期解决的问题概述等内容。 #### 1.2 系统的开发背景 这一小节重点讨论了开发该系统的背景原因。...
1. **初始化变量**:定义辅助变量`x`, `y`, `z`, `t`,其中`x`和`y`分别用于标记数组中前m个元素和后n个元素的起始位置;`z`用于临时存储交换过程中的元素值;`t`用于记录`y`的初始位置。 2. **交换逻辑**:使用`...
#### JDBC与分页:历史回顾与现状 在JSP分页技术的探讨中,我们不得不提及JDBC(Java Database Connectivity),它是Java平台中用于连接数据库的标准API。JDBC的发展历程对分页技术有着深远的影响: - **JDBC 1.0...
当计时停止时,将当前时间戳添加到数组中,并可能包括其他相关信息,如计时器的起始时间、持续时间等。这些数据可以在需要时展示给用户,帮助他们回顾过去的测试或功能完成情况。 3. **结束时间与剩余时间模式**: ...
以下是对手册内容的详细解析: 1. CSS基础选择器 CSS基础选择器包括标签选择器、类选择器、id选择器和通配符选择器。 - 标签选择器:通过HTML标签名称直接选择,适用于所有同名标签。 - 类选择器:通过类名(class...
1. **行程记录**:用户可以输入每次通勤的起始地点、结束地点、出行方式(如公交、自行车、步行或自驾)以及所花费的时间。这些数据会被存储在数据库中,方便日后查询和分析。 2. **数据分析**:应用可能提供统计...
Vue.js 是一款流行的前端JavaScript框架,它...希望这篇文章能帮助你更好地理解和应用Vue.js的过渡机制。如果你在实践中遇到任何问题或有进一步的疑问,欢迎继续提问,我们会尽心尽力为你解答。感谢你对我们的支持!
在Laravel框架中,我们经常会使用laravel-admin这个扩展包来创建后台管理系统,其中包括了丰富的表格筛选功能。当面对大量数据的数据库查询时,如果缺乏默认的筛选条件,查询效率会非常低下。因此,为表格筛选设置...
然而,这个基础的`focus()`方法只会将光标放置在输入框的起始位置,即最左侧。如果我们希望光标位于最右侧,就需要采取额外的步骤。 要将光标置于输入框的最右侧,我们可以按照以下三个步骤进行操作: 1. 调用`...
- **Rational TestManager & Comparators**:用于测试结果的回顾与分析。 - **Rational SiteCheck**:管理互联网和内网网页的测试。 - **与其他Rational产品集成**:如TestFactory、ClearQuest、TestManager、...
### 基于jQuery实现数字滚动效果 #### 一、引言 在现代网页设计中,数字...希望这篇文章能帮助大家在实际项目中运用这项技术,为用户提供更好的交互体验。同时,也欢迎大家下载文末提供的完整源代码进行学习和参考。
根据给出的内容,这份文档出自世界经济论坛,是关于数字企业的转型过程,强调企业从数字化实验阶段转向数字化转型阶段的必要性和挑战。该文档与贝恩公司合作编写,涵盖了数字化战略、行业方向、公司愿景、案例研究、...