10 2011 档案

摘要:七 RTP打包与发送rtp传送开始于函数:MediaSink::startPlaying()。想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当于directshow的拉模式)。看一下这个函数:Boolean MediaSink::startPlaying(MediaSource& source, afterPlayingFunc* afterFunc, void* afterClientData) { //参数afterFunc是在播放结束时才被调用。 // Make sure we're not already bein 阅读全文
posted @ 2011-10-31 15:44 移动应用开发 阅读(310) 评论(0) 推荐(0) 编辑
摘要:前言 学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的Standup Timer项目。本文将把研究的内容笔记整理,建立一个索引列表。PowerManager.WakeLock PowerManager.WakerLock是我分析Standup Timer源代码时发现的一个小知识点,Standup Timer 用WakeLock保证程序运行时保持手机屏幕的恒亮(程序虽小但也做得相当的细心,考虑的很周到)。P.. 阅读全文
posted @ 2011-10-30 22:29 移动应用开发 阅读(359) 评论(0) 推荐(0) 编辑
摘要:引言CakePHP 有些慢已经不是什么公开的秘密了。但不为众人所知的是这是一个大大的阴谋。而我会因揭露这个阴谋惹上不少麻烦。不过我愿意冒险一搏。我手头有大量的记录和 文档线索表明CakePHP开发团队的成员手头持有戴尔,IBM,思科以及其他服务器厂商的公司股票。想必你已经听说过这类的措辞像“硬件白菜价,而程序 员太金贵了。"Cake的开发团队从中嗅到了商机,他们便制作出了这款易于上手和开发,但是却跑得很慢的框架来。他们希望你在硬件方面多砸点钱来。这点子太有才了吧,对不?好了,闲扯就此结束。作为一个CakePHP的开发者,每当你学会使用本文中的一个技巧,套在你脖子上的这枷锁就少了一层。 阅读全文
posted @ 2011-10-30 22:06 移动应用开发 阅读(218) 评论(0) 推荐(0) 编辑
摘要:六 建立RTP会话首先更正一个概念:ServerMediaSession原先说代表一个流,其实是不准确的。它代表的是server端的一个媒体的名字,而说ServerMediaSubsession代表一个Track是准确的。以后流指的是那些有数据流动的组合。RTP的建立:RTP的建立过程无非是这样:client告诉server自己的rtp/rtcp端口号,server建立自己的rtp/rtcp socket,然后在收到PLAY请求时向客户端发数据。看起来非常简单。在收到SETUP请求时才建立连接,让我们看一下处理这个命令的函数:void RTSPServer::RTSPClientSession 阅读全文
posted @ 2011-10-28 15:19 移动应用开发 阅读(413) 评论(0) 推荐(0) 编辑
摘要:五 RTSP服务运作基础基本搞明白了,那么RTSP,RTP等这些协议又是如何利用这些基础机制运作的呢?首先来看RTSP.RTSP首先需建立TCP侦听socket。可见于此函数:DynamicRTSPServer* DynamicRTSPServer::createNew(UsageEnvironment& env, Port ourPort, UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds) { int ourSocket = setUpOurSocket(env, ourPort); 阅读全文
posted @ 2011-10-27 16:21 移动应用开发 阅读(297) 评论(0) 推荐(0) 编辑
摘要:四 计划任务(TaskScheduler)深入探讨我们且把三种任务命名为:socket handler,event handler,delay task。这三种任务的特点是,前两个加入执行队列后会一直存在,而delay task在执行完一次后会立即弃掉。socket handler保存在队列BasicTaskScheduler0::HandlerSet* fHandlers中;event handler保存在数组BasicTaskScheduler0::TaskFunc * fTriggeredEventHandlers[MAX_NUM_EVENT_TRIGGERS]中;delay task保 阅读全文
posted @ 2011-10-27 14:26 移动应用开发 阅读(252) 评论(0) 推荐(0) 编辑
摘要:三 消息循环看服端的主体:live555MediaServer.cpp中的main()函数,可见其创建一个RTSPServer类实例后,即进入一个函数env->taskScheduler().doEventLoop()中,看名字很明显是一个消息循坏,执行到里面后不停地转圈,生名不息,转圈不止。那么在这个人生的圈圈中如何实现RTSP服务和RTP传输呢?别想那么远了,还是先看这个圈圈中实现了什么功能吧。void BasicTaskScheduler0::doEventLoop(char* watchVariable) { // Repeatedly loop, handling readbl 阅读全文
posted @ 2011-10-26 17:23 移动应用开发 阅读(195) 评论(0) 推荐(0) 编辑
摘要:二 基础类讲几个重要的基础类:BasicUsageEnvironment和UsageEnvironment中的类都是用于整个系统的基础功能类.比如UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误,就需要保存UsageEnvironment的指针.而TaskScheduler则提供了任务调度功能.整个程序的运行发动机就是它,它调度任务,执行任务(任务就是一个函数).TaskScheduler由于在全局中只有一个,所以保存在了UsageEnvironment中.而所有的类又都保存了UsageEnvironment的指针,所以谁想把自 阅读全文
posted @ 2011-10-26 15:41 移动应用开发 阅读(170) 评论(0) 推荐(0) 编辑
摘要:一直想研究live555,没有时间,终于因为项目的原因可以深入无间地研究一下了.所以在此著文以记之.一 如何编译live555利用mingw环境很容易:在live555文件夹下,genMakefiles mingwmake即可.可以用genWindowsMakefiles.cmd生成VC可用的makefile,但是对比较新的vc版本支持不好,需要自己改很多东西.用VC编译有一种更好的办法:手动为每个库都生成一个lib项目,为mediaServer生成exe项目,设置好各库之间的依赖关系,就可以用VC编译了.由于live555代码中没有单独支持gcc的东西,所以编译是相当的容易.这样就可以用VC 阅读全文
posted @ 2011-10-26 10:07 移动应用开发 阅读(144) 评论(0) 推荐(0) 编辑
摘要:编译时遇到下面这个问题。一直搞不懂是什么意思Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>f:F:\>cd workspace2\IM\bin\intimeMessageF:\workspace2\IM\bin\intimeMessage>java TCPServerException in thread "main" java.lang.NoClassDefFoundError: TCPServer (wro 阅读全文
posted @ 2011-10-10 21:54 移动应用开发 阅读(218) 评论(0) 推荐(0) 编辑