live555学习
文章平均质量分 78
cosmoslife
多媒体编程、网络编程、系统编程、网络安全编程
展开
-
RTP库Live555使用入门
Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。目前,Live555已经被用于多款播放器的流媒体播放功转载 2012-07-22 21:47:24 · 1710 阅读 · 0 评论 -
LIVE555play流程 .
5.1放假了,昨日研究了LIVE555的play部分的源码,不敢独享,贡献出来分享。调用栈BasicTaskScheduler0::doEventLoop(){ // Repeatedly loop, handling readble socketsand timed events: while (1) { SingleStep(); }}转载 2012-05-14 17:14:59 · 664 阅读 · 0 评论 -
live555 RTSP服务器建立及消息处理流程 .
DynamicRTSPServer::creatnew(): 1.调用继承自RTPSever::setUpOurSocket: 1.调用 GroupsockHelper 的 setupStreamSocket创建一个socket连接,并绑定, 2.设置socket的发送缓存大小, 3.调用listen开始监听端口,设置同时最大能处理连接数LI转载 2012-05-14 17:14:30 · 847 阅读 · 0 评论 -
简析LIVE555中的延时队列 .
最近在看LIVE555的源码,感觉其中的延时队列写的不错,于是就总结一下。 首先描述一下LIVE555中的延时队列的设计理念。首先,如下图,A,B,C分别为时间轴上的三个事件点,而head表示当前时间点。。假如我们要描述一个事件发生的时间,可以有两种方法:一种方法直接描述事件发生的绝对时间;另一种方法则是可以描述和另一事件发生的相对时间。而LIVE555中采用的就是后者。在L转载 2012-05-14 17:09:32 · 750 阅读 · 0 评论 -
H.264 RTP payload 格式 .
H.264 视频 RTP 负载格式1. 网络抽象层单元类型 (NALU)NALU 头由一个字节组成, 它的语法如下: +---------------+ |0|1|2|3|4|5|6|7| +-+-+-+-+-+-+-+-+ |F|NRI| Type | +---------------+F: 1 个比特.转载 2012-05-15 14:04:54 · 545 阅读 · 0 评论 -
live555库的rtsp服务器源码分析总结,流程详解RTSPServer .
1. RTSP连接的建立过程 RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话。 首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立Socket(ourSocket)在TCP的554 端口进行监听,然后把连接处理函数句柄(RTSPS转载 2012-05-14 17:14:05 · 972 阅读 · 0 评论 -
live555 --RTSP SET_UP PLAY 执行流程分析 .
1 handleCmd_SETUP() 在客户端连接成功后,调用RTSPServer::incomingConnectionHandler,在其中创建RTSPClientSession * _pClientSession 进而在其后调用RTSPClientSession ::handleCmd_SETUP()方法 在此方法中执行subsession->getStreamParam转载 2012-05-14 17:13:29 · 794 阅读 · 0 评论 -
mpeg4网络传输 以及Livemedia 结构分析 .
Live555类结构 live555几乎所有得处理单元都继承自Medium类;该类定义了基本接口,lookupByName,close和返回当前的环境类UsageEnvironment,nextTask,此外还有一些判断类型函数。属性又名字,环境指向下一个TaskToken的指针。 MPEG4 ServerMediaSession对象的创建函数在文件DynamicRTSPServer.c转载 2012-05-14 17:12:55 · 657 阅读 · 0 评论 -
RTP如何打包H264数据 .
拿到H264的裸流数据是,一般码流结构是SPS,PPS,I帧,P帧......SPS,PPS,I帧,P帧...........。用RTP打包H264数据时,SPS和PPS可以不发,直接发I帧和P帧数据即可。还要看I帧和P帧有多大,如果小于MTU就直接加RTP包发送就可以,如果大于MTU就得分片了。具体的分片方法可以参考RFC3984中。 我用的FU-A,分片方式。 第一个 FU-A 包转载 2012-05-14 17:11:16 · 672 阅读 · 0 评论 -
live555学习笔记17-H264VideoStreamParser详解 .
十七:H264VideoStreamParser详解很多人要做实时H264 RTP传输,那么如何充分利用live555来做呢?大家可以看到现有的H264VideoFileServerMediaSubsession中,sink使用了H264VideoRTPSink,source使用了H264VideoStreamFramer,然而这个连接是很复杂的,在这两个节点间要插入了很多其它的节点,其实转载 2012-05-16 17:07:58 · 1166 阅读 · 0 评论 -
对h.264压缩视频码流中i帧的提取(firstime)
这个问题要说清楚还是有点复杂:首先判断 NALU 类型是否是 5,如果是,那么以后连续出现的 NALU 类型为 5 的 NALU 就属于 IDR 帧(一种特殊的 I 帧);如果 NALU 不是 5,则要进一步判断 slice_type 是否是 7,如果是,那么连续出现的 slice_type = 7 的 slice 就属于 I 帧;如果 slice_type = 2,那么就要判断与当前 slice转载 2012-05-17 14:09:27 · 1117 阅读 · 0 评论 -
vs2008 下编译jrtplib-3.9.0成功
jrtplib-3.9.0的编译,终于搞通了。网上搜集了很多资料,自己也调试了很久。 首先,jrtplib-3.9.0是什么不用多说吧,它是一个很牛的老外用C++写的一个开源的RTP协议库,用它可以进行数据的实时传输。RTP是实时传输协议的简称,由最新的RFC3550文档进行规范。1、从http://research.edm.uhasselt.be/~jori/page/in转载 2012-05-17 16:45:23 · 1019 阅读 · 0 评论 -
Directsound开发指南(4)
4DirectSound开发高级技巧 4.1Dsound驱动模型(DirectSound Driver Models)在VXD驱动模型下,所有的DirectSound的混音工作都是由Dsound.vxd来完成的,一个虚拟的设备驱动程序。Dsound.vxd也提供操作声卡从Cpu接收数据的缓冲区的方法,这其实和DirectSound的主缓冲区是类似的。DirectSoun转载 2012-05-25 11:38:32 · 1324 阅读 · 0 评论 -
live555
Real Time Streaming Protocol或 者RTSP(实时流媒体协议),是由Real network 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一种可扩展的框架,使能够提供能控制的,按需传输实时数 据,比如音频和视频文件。源数据可以包括现场数据的反馈和存贮的文件。rtsp对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,转载 2012-06-11 20:36:41 · 1116 阅读 · 0 评论 -
一些有用的对话信息,并在自己的工程中得到了验正是可行的
jessiepan(木头)等 级:#80楼 得分:0回复于:2009-10-28 13:47:56我是楼主,自己再来顶一下..最近在调试Streaming Client端的程序,使用live555接收streaming server传输过来的h.264 rtp视频流,然后解码,播放.现在live555的rtp数据接收基本上是可以了,不过在解码这块转载 2012-06-10 07:54:08 · 790 阅读 · 0 评论 -
H264实时编码及NALU,RTP传输
原文引用地址:http://wmnmtm.blog.163.com/blog/static/382457142011920102618122/?fromdm&fromSearch&isFromSearchEngine=yes H264实时编码及NALU,RTP传输 对h.264压缩视频码流中i帧的提取(firstime)转载 2012-05-17 14:03:29 · 4500 阅读 · 0 评论 -
live555中是如何获取SPS和PPS的
关于这个问题,困扰了很长时间,主要是为了获取这2个东东,设计到的类太多了,首先的理清设计到了哪些类,其次得把这些类的依属关系给理清,下面就让咱们一步一步的来分析:SPS和PPS的获取是在服务器接受到了Descripute命令后进行的,在看下面的内容之前请大家先看上篇文章:http://www.shouyanwang.org/thread-704-1-1.htmlRtspServer转载 2012-05-18 15:26:04 · 3038 阅读 · 0 评论 -
用Live555 中的openRTSP 保存H264(精华)
用Live555 中的openRTSP 保存H264文件很简单 但是发现器保存的h264文件并不能直接被vcl 播放 同一个rtsp源 用vcl保存的h264文件就可以直接被播放 经过研究 发现是 openRTSP没有把SDP 中已经包括的SPS &PPS数据保存到文件中 将 vcl保存的h264文件的前2个00 00 00 01 数据 也就是 SPS &PPS 复转载 2012-05-18 18:24:57 · 1663 阅读 · 0 评论 -
live555源码分析---- DESCRIBE命令处理
live555 DESCRIBE命令处理比较复杂,详细的处理过程如下:void RTSPServer::RTSPClientSession ::handleCmd_DESCRIBE(char const* cseq, char const* urlPreSuffix, char const* urlSuffix,转载 2012-05-18 15:25:39 · 968 阅读 · 0 评论 -
live555 接收rtsp视频流详细源码流程详细解析
程序从rtsp_player_task这个线程开始进入进入到live555的客户端。1:char *argv[5]={"openRTSP", "-b", "80000", "-t", ""};这是输入参数。b代表FileSink的大小具体值为80000. T代表用tcp run_live_rtsp(int argc, char **argv) 这个函数来处理这些参数。2:在run_li转载 2012-05-17 10:17:37 · 2736 阅读 · 0 评论 -
live555 接收客户端连接及rtsp交互---网络连接处理及RTSP连接模块 .
[cpp] view plaincopyprint?1 套接字创建,绑定,监听 主函数main()启动以后,会调用 (DynamicRTSPServer::createNew—> RTSPServer::setUpOurSocket setupStreamSocket) 在setupStreamSocket中实现TCP中S端套接字的创建,绑定,监听,设置非阻塞模式操作,其监转载 2012-05-14 17:10:33 · 1117 阅读 · 0 评论 -
live555的两个循环
我的理解是live有两个循环!一个是select()所在的主循环,它即监听连接,也接收请求。另一个是发送数据的循环,如你上面所说的在MultiFramedRTPSink类中,通过buildAndSendPacket、packFrame、afterGettingFrame、afterGettingFrame1、sendPacketIfNecessary和sendNext构成了一个循环圈,数据转载 2012-05-14 17:10:01 · 656 阅读 · 0 评论 -
live555学习笔记7-RTP打包与发送
七 RTP打包与发送rtp传送开始于函数:MediaSink::startPlaying()。想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当于directshow的拉模式)。看一下这个函数:[cpp] view plaincopyprint?Boolean MediaSink::start转载 2012-05-03 15:54:59 · 3771 阅读 · 0 评论 -
live555学习笔记6-建立RTP会话
六 建立RTP会话首先更正一个概念:ServerMediaSession原先说代表一个流,其实是不准确的。它代表的是server端的一个媒体的名字,而说ServerMediaSubsession代表一个Track是准确的。以后流指的是那些有数据流动的组合。RTP的建立:RTP的建立过程无非是这样:client告诉server自己的rtp/rtcp端口号,server转载 2012-05-03 15:54:23 · 1282 阅读 · 0 评论 -
live555学习笔记5-RTSP服务运作
五 RTSP服务运作基础基本搞明白了,那么RTSP,RTP等这些协议又是如何利用这些基础机制运作的呢?首先来看RTSP.RTSP首先需建立TCP侦听socket。可见于此函数:[cpp] view plaincopyprint?DynamicRTSPServer* DynamicRTSPServer::createNew(UsageEnvir转载 2012-05-03 15:53:14 · 1083 阅读 · 2 评论 -
live555学习笔记4-计划任务(TaskScheduler)深入探讨
四 计划任务(TaskScheduler)深入探讨我们且把三种任务命名为:socket handler,event handler,delay task。这三种任务的特点是,前两个加入执行队列后会一直存在,而delay task在执行完一次后会立即弃掉。socket handler保存在队列BasicTaskScheduler0::HandlerSet* fHandlers中;转载 2012-05-03 15:52:32 · 926 阅读 · 0 评论 -
live555学习笔记3-消息循环
三 消息循环看服端的主体:live555MediaServer.cpp中的main()函数,可见其创建一个RTSPServer类实例后,即进入一个函数env->taskScheduler().doEventLoop()中,看名字很明显是一个消息循坏,执行到里面后不停地转圈,生名不息,转圈不止。那么在这个人生的圈圈中如何实现RTSP服务和RTP传输呢?别想那么远了,还是先看这个圈圈中实现了什么功转载 2012-05-03 15:51:53 · 718 阅读 · 0 评论 -
live555学习笔记2-基础类
二 基础类讲几个重要的基础类:BasicUsageEnvironment和UsageEnvironment中的类都是用于整个系统的基础功能类.比如UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误,就需要保存UsageEnvironment的指针.而TaskScheduler则提供了任务调度功能.整个程序的运行发动机就是它,它转载 2012-05-03 15:51:16 · 804 阅读 · 0 评论 -
live555学习笔记1-引子
一直想研究live555,没有时间,终于因为项目的原因可以深入无间地研究一下了.所以在此著文以记之.一 如何编译live555利用mingw环境很容易:在live555文件夹下,genMakefiles mingwmake即可.可以用genWindowsMakefiles.cmd生成VC可用的makefile,但是对比较新的vc版本支持不好,需要自己改很多东转载 2012-05-03 15:49:49 · 751 阅读 · 0 评论 -
live555学习笔记13-RTPInterface详解
十三:RTPInterface详解好几天没写blog了。看源码真累啊,还要把理解的写到纸上,还要组织混乱的思想,令人头痛,所以这需要激情。不过,今天激情又来了。大家应该已理解了GroupSocket这个类。理论上讲那些需要操作udp socket 的类应保存GroupSocket的实例。但事实并不是这样,可以看一下RTPSink,RTPSource,RTCPInstance转载 2012-05-03 16:00:44 · 697 阅读 · 0 评论 -
live555学习笔记8-RTSPClient分析
八 RTSPClient分析有RTSPServer,当然就要有RTSPClient。如果按照Server端的架构,想一下Client端各部分的组成可能是这样:因为要连接RTSP server,所以RTSPClient要有TCP socket。当获取到server端的DESCRIBE后,应建立一个对应于ServerMediaSession的ClientMediaSession。对应每个T转载 2012-05-03 15:56:13 · 1080 阅读 · 0 评论 -
live555学习笔记9-h264 RTP传输详解(1)
九 h264 RTP传输详解(1)前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息。我们就从这里入手吧。当RTSPServer收到对某个媒体的DESCRIBE请求时,它会找到对应的ServerMediaSession,调用ServerMediaSession::generateSDPDescription()。generateSD转载 2012-05-03 15:56:45 · 1088 阅读 · 0 评论 -
live555学习笔记11-h264 RTP传输详解(3)
十一 h264 RTP传输详解(3)书接上回:H264FUAFragmenter又对数据做了什么呢?[cpp] view plaincopyprint?void H264FUAFragmenter::doGetNextFrame() { if (fNumValidDataBytes == 1) { // We have n转载 2012-05-03 15:59:41 · 1221 阅读 · 0 评论 -
FFMpeg直接解码live555收到的网络数据包时错误解决方法
错误描述:[h264 @ 003e4df0] non-existing PPS 0 referenced[h264 @ 003e4df0] decode_slice_header error[h264 @ 003e4df0] non-existing PPS 0 referenced[h264 @ 003e4df0] decode_slice_header error 说明原创 2012-05-11 14:35:45 · 9922 阅读 · 4 评论 -
LIVE555 Streaming Media 组播,单播设置流程
1.软件live555-latest下载地址:http://www.live555.com/liveMedia/public/2.编译环境 win+cygwin在cygwin中运行./genMakefiles cygwin->make -f Makefile3.live555组/单播在testProgs文件目录下的testRelay.exe中实现的;转载 2012-05-30 16:43:33 · 3372 阅读 · 0 评论 -
vlc支持udp/rtp组播播放
1.软件版本 1.0.32.设置流程首先媒体-->流-->文件 添加-->流-->下一步-->目标选rtp或者udp-->添加设置组播或者单播地址和端口-->设置转码选项--> 流然后打开同一网段的主机中的vlc选择设置的地址,跨网段在测试不同网段不能接受组播,可能和网关设置有关,待测试转载 2012-05-30 16:42:59 · 5533 阅读 · 0 评论 -
H264码流打包分析(精华)
H264码流打包分析 SODB 数据比特串-->最原始的编码数据RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐。EBSP 扩展字节序列载荷-- >在RBSP基础上填加了仿校验字节(0X03)它的原因是: 在NALU加到Annexb上时,需要填加每组NALU之前的开始码转载 2012-05-31 11:12:51 · 3295 阅读 · 0 评论 -
live555学习笔记16-几个重要对象的生命期
十六 几个重要对象的生命期live555中很多类,类与类之间的关系复杂,从属关系不明显,层次上看起来也有些乱.所以源代码读起来比较困难,对于一些对象生命的来龙去脉也很难厘清.但这并不能说明live555的架构不好,最适合的才是最好的,对于流媒体的处理来说,live555架构已是相当精巧,当然,这是在你深入了解它的基础上才会有的体会.live555作为服务器,大家都很关心转载 2012-05-03 16:03:44 · 965 阅读 · 0 评论 -
live555学习笔记15-RTCPInstance类小结
十五:RTCPInstance类小结RTCPInstance是对rtcp通信的封装.RTCP主要是功能是统计包的收发为流量控制提供依据.RTCPInstance统计数据的取得仅依赖于RTPSink的一些函数(因为RTPSink发送RTP包),所以RTCPInstance与其它类(GroupSock,RTPInterface等基础类除外)基本关系不大,封装的比较完整.RTCP转载 2012-05-03 16:03:20 · 975 阅读 · 0 评论 -
Live555学习笔记14-live555多线程论
十四:live555多线程论江湖传闻:live555如果不改为多线程,在多核心机器上效率会降低.虽然我没做过测试,但比较相信此传闻的真实性 .所以在我试论述一下live555如何对多核进行支持,其实就是改为多线程,嘿嘿.先看此文:http://www.live555.com/liveMedia/faq.html#threads跟据它的说法,liv转载 2012-05-03 16:02:05 · 778 阅读 · 0 评论