加载中
漫谈C++为什么不支持模板虚函数

模板类拥有虚函数是被允许的,但是C++并不允许模板虚函数,根据自己对C++的理解,发表一点关于这方面的理解。

2016/07/23 13:34
110
基于事件驱动状态机的协程框架设计

游戏开发里一个很重要的概念---协程,这里用C++实现一个协程框架,谈一点对协程的认识,有不正确之处还请大家批评指出。

2016/07/11 23:50
373
Traits技术初探

概述: traits是一种特性萃取技术,它在Generic Programming中被广泛运用,常常被用于使不同的类型可以用于相同的操作,或者针对不同类型提供不同的实现.traits在实现过程中往往需要用到以下三种...

2016/03/21 17:49
30
Segment fault及LINUX core dump详解

C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界。 (2)修改了只读内存。 (3)scanf("%d",n),n不是指针。 …… 1. 前言:...

2016/03/21 17:15
233
MakeFile学习(一)

概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像...

2016/02/25 19:34
79
Live555源代码解读(12)

十三、RTPInterface详解 大家应该已理解了GroupSocket这个类。理论上讲那些需要操作udp socket 的类应保存GroupSocket的实例。但事实并不是这样,可以看一下RTPSink,RTPSource,RTCPInstanc...

2016/02/25 19:33
40
Live555源代码解读(11)

十二 、h264 rtp包的时间戳 这次我们一起来分析一下live555中是怎样为rtp包打时间戳的.就以h264为例吧. [cpp] view plaincopy void H264VideoRTPSink::doSpecialFrameHandling(unsigned /*...

2016/02/25 19:32
70
Live555源代码解读(10)

十一 、h264 RTP传输详解(3) 书接上回:H264FUAFragmenter又对数据做了什么呢? [cpp] view plaincopy void H264FUAFragmenter::doGetNextFrame() { if (fNumValidDataBytes == 1) { // We h...

2016/02/25 19:32
22
Live555源代码解读(9)

十 、h264 RTP传输详解(2) 上一章并没有把打开文件分析文件的代码找到,因为发现它隐藏得比较深,而且H264的Source又有多个,形成了连环计。所以此章中就将文件处理与H264的Source们并在一起...

2016/02/25 19:31
36
Live555源代码解读(8)

九 、h264 RTP传输详解(1) 前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息。我们就从这里入手吧。 当RTSPServer收到对某个媒体的DESCRIBE请求时,它...

2016/02/25 19:30
37
Live555源代码解读(7)

八 、RTSPClient分析 有RTSPServer,当然就要有RTSPClient。 如果按照Server端的架构,想一下Client端各部分的组成可能是这样: 因为要连接RTSP server,所以RTSPClient要有TCP socket。当获...

2016/02/25 19:27
72
Live555源代码解读(6)

七、RTP打包与发送 rtp传送开始于函数:MediaSink::startPlaying()。想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当于directshow的拉模式)。 看一下这个...

2016/02/25 19:23
63
Live555源代码解读(5-4)

live555 中有两个 streamstate,一个是类 StreamState ,一个是此处的结构 struct streamState。类 SteamState 就是 streamToken,而 struct streamState 中保存了 MediaSubsession (即track...

2016/02/25 19:18
42
Live555源代码解读(5-3)

void RTSPServer::RTSPClientSession::handleCmd_SETUP( char const* cseq, char const* urlPreSuffix, char const* urlSuffix, char const* fullRequestStr) { // Normally, "urlPreSuffix"...

2016/02/25 19:16
81
Live555源代码解读(5-2)

为何不把 StreamToken 保存在 MediaSubsession 中呢?看起来在 struct streamState 中是一个 MediaSubsession 对应一个 streamToken 呀? 因为MediaSubsession 代表一个 track 的静态数据,它...

2016/02/24 21:18
47
Live555源代码解读(5-1)

六、建立RTP会话 首先更正一个概念:ServerMediaSession原先说代表一个流,其实是不准确的。它代表的是server端的一个媒体的名字,而说ServerMediaSubsession代表一个Track是准确的。以后流指...

2016/02/24 21:16
24
Live555源代码解读(4)下

[cpp] view plaincopy static ServerMediaSession* createNewSMS(UsageEnvironment& env,char const* fileName, FILE* /*fid*/) { // Use the file name extension to determine the type of...

2016/02/24 21:12
38
Live555源代码解读(4)上

五、RTSP服务运作 基础基本搞明白了,那么RTSP,RTP等这些协议又是如何利用这些基础机制运作的呢?首先来看RTSP.RTSP首先需建立TCP侦听socket。可见于此函数: [cpp] view plaincopy Dynamic...

2016/02/24 21:11
42
Live555源代码解读(3)

四、计划任务(TaskScheduler) 我们且把三种任务命名为:socket handler,event handler,delay task。这三种任务的特点是,前两个加入执行队列后会一直存在,而delay task在执行完一次后会立...

2016/02/24 21:10
41
Live555源代码解读(2)

三、消息循环 看服端的主体:live555MediaServer.cpp中的main()函数,可见其创建一个RTSPServer类实例后,即进入一个函数env->taskScheduler().doEventLoop()中,看名字很明显是一个消息循坏...

2016/02/24 21:09
56

没有更多内容

加载失败,请刷新页面

返回顶部
顶部