![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
流媒体
牛搞
深研C++;
深研架构,设计模式;
深研高性能并发服务器;
展开
-
live555传输Speex音频详解一:Speex over RTP
1. RTP Speex 头部RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。Payload Type (PT): 本格式的负责类型号。Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在有声数据的第一个包上。 Speex支持声音检测,可以在无声时不产生帧数据。所以包可能是非连续传输的。Extension (X) bit:原创 2012-01-18 13:23:54 · 7366 阅读 · 0 评论 -
live555学习笔记8-RTSPClient分析
八 RTSPClient分析有RTSPServer,当然就要有RTSPClient。如果按照Server端的架构,想一下Client端各部分的组成可能是这样:因为要连接RTSP server,所以RTSPClient要有TCP socket。当获取到server端的DESCRIBE后,应建立一个对应于ServerMediaSession的ClientMediaSession。对应每个T原创 2011-11-02 10:39:37 · 27798 阅读 · 10 评论 -
live555学习笔记9-h264 RTP传输详解(1)
九 h264 RTP传输详解(1)前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息。我们就从这里入手吧。当RTSPServer收到对某个媒体的DESCRIBE请求时,它会找到对应的ServerMediaSession,调用ServerMediaSession::generateSDPDescription()。generateSD原创 2011-11-03 11:21:52 · 20855 阅读 · 3 评论 -
live555学习笔记12-h264 rtp包的时间戳
十二 h264 rtp包的时间戳这次我们一起来分析一下live555中是怎样为rtp包打时间戳的.就以h264为例吧.void H264VideoRTPSink::doSpecialFrameHandling(unsigned /*fragmentationOffset*/, unsigned char* /*frameStart*/, unsigned /*numByte原创 2011-11-08 17:08:30 · 21007 阅读 · 1 评论 -
live555学习笔记15-RTCPInstance类小结
十五:RTCPInstance类小结RTCPInstance是对rtcp通信的封装.RTCP主要是功能是统计包的收发为流量控制提供依据.RTCPInstance统计数据的取得仅依赖于RTPSink的一些函数(因为RTPSink发送RTP包),所以RTCPInstance与其它类(GroupSock,RTPInterface等基础类除外)基本关系不大,封装的比较完整.RTCP原创 2011-12-07 18:59:07 · 10541 阅读 · 0 评论 -
live555学习笔记16-几个重要对象的生命期
十六 几个重要对象的生命期live555中很多类,类与类之间的关系复杂,从属关系不明显,层次上看起来也有些乱.所以源代码读起来比较困难,对于一些对象生命的来龙去脉也很难厘清.但这并不能说明live555的架构不好,最适合的才是最好的,对于流媒体的处理来说,live555架构已是相当精巧,当然,这是在你深入了解它的基础上才会有的体会.live555作为服务器,大家都很关心原创 2011-12-19 09:13:15 · 9835 阅读 · 2 评论 -
live555学习笔记17-H264VideoStreamParser详解
十七:H264VideoStreamParser详解很多人要做实时H264 RTP传输,那么如何充分利用live555来做呢?大家可以看到现有的H264VideoFileServerMediaSubsession中,sink使用了H264VideoRTPSink,source使用了H264VideoStreamFramer,然而这个连接是很复杂的,在这两个节点间要插入了很多其它的节点,其实原创 2012-01-20 13:48:52 · 22885 阅读 · 12 评论 -
Live555学习笔记14-live555多线程论
十四:live555多线程论江湖传闻:live555如果不改为多线程,在多核心机器上效率会降低.虽然我没做过测试,但比较相信此传闻的真实性 .所以在我试论述一下live555如何对多核进行支持,其实就是改为多线程,嘿嘿.先看此文:http://www.live555.com/liveMedia/faq.html#threads跟据它的说法,liv原创 2011-12-02 11:54:56 · 18331 阅读 · 13 评论 -
使用eclipse编译和管理live555源码
这是一个eclipse使用入门教程.live555使用makefile管理项目,当需要自己添加源码文件时,很麻烦,需要自己修改各文件间的依赖关系.其实我们可以很容易地将live555移植成eclipse自己的c++工程.这样可以让eclipse自动管理文件之间的关系.编译环境是在windows下的Mingw.安装mingw同时会安装MSYS,MSYS是一个命令行程序.要用mingw编译程序,需在M原创 2012-03-28 15:24:59 · 8029 阅读 · 3 评论 -
RTSP 播放器 demo
应群中一个兄弟的请求,义务帮他做的rtsp播放器宣传一下。可在此网址http://download.csdn.net/detail/nkmnkm/4432919下载其demo。--------手册--------------------------------RTSP 播放器说明书 播放器说明书 播放器说明书 播放器说明书 播放器说明书1. 播放器简介播放器主要用来对遵循 RTSP 标准协议的码流原创 2012-07-17 07:03:44 · 23355 阅读 · 8 评论 -
VLC 架构初步分析
VLC player的大架构不难理解,难理解的是它的对象meta系统的作用,类的继承机制,类的层次关系,以及消息传递路线。 Meta系统VLC实现了对象的Meta系统,我初步认为其作用为:• 轻松实现属性永久化,与配置文件原生态结合。• 动态属性• 很多流程或者说消息驱动机制由属性的可观查机制实现。类(结构)的继承• 大部分类都是从vlc_object_t继承的。原创 2013-06-19 07:35:52 · 8644 阅读 · 2 评论 -
Windows Phone后台音乐详解一
应用于: Windows Phone 8 | Windows PhoneOS 7.1 你可以为winphone编写在后台播放音乐的app。这表示即使当用户点击返回或开始按钮离开你的应用界面时,你的应用依然可以继续播放音乐。本文讨论后台音乐应用的组成以及它们如何一起工作。本文包含以下几节。· 后台音频架构· 后台音乐的最佳实践后台音频架构 后台音频应用利用了后翻译 2013-08-29 08:01:30 · 3767 阅读 · 0 评论 -
live555学习笔记5-RTSP服务运作
五 RTSP服务运作基础基本搞明白了,那么RTSP,RTP等这些协议又是如何利用这些基础机制运作的呢?首先来看RTSP.RTSP首先需建立TCP侦听socket。可见于此函数:DynamicRTSPServer* DynamicRTSPServer::createNew(UsageEnvironment& env, Port ourPort,UserAuthent原创 2011-10-27 16:21:15 · 26297 阅读 · 5 评论 -
live555学习笔记4-计划任务(TaskScheduler)深入探讨
四 计划任务(TaskScheduler)深入探讨我们且把三种任务命名为:socket handler,event handler,delay task。这三种任务的特点是,前两个加入执行队列后会一直存在,而delay task在执行完一次后会立即弃掉。socket handler保存在队列BasicTaskScheduler0::HandlerSet* fHandlers中;原创 2011-10-27 14:26:25 · 23571 阅读 · 6 评论 -
live555传输Speex音频详解二:Speex 使用SDP及其它事项
1. Speex使用SDP当使用SDP来描述使用Speex格式的会话时,映射是下面这样的:o 媒体类型 ("audio") 在"m="行中指定媒体的名字。o 媒体子类型 ("speex") 在SDP "a=rtpmap"行中指定编码名字。所需的"rate"参数也在"a=rtpmap" 行中,表明时钟频率。o 参数 "ptime" 和 "maxptime" 分原创 2012-01-18 16:25:26 · 7296 阅读 · 0 评论 -
ffmpeg的新东东:AVFilter
利用ffmpeg做图像的pixel format转换你还在用libswscale吗?嘿嘿,过时啦!ffmpeg中有了新东西:libavfilter.使用它,可以完全代替libswscale,并且可以自动完成一些复杂的转换操作呢.libavfilter啊,用了都说好!但就是太复杂...如果你仅仅是做图像的pixel format处理,用libswscale是相当简单,可以看看最新的ffpla原创 2012-01-30 14:20:48 · 17217 阅读 · 5 评论 -
如何编译ffmpeg以支持dshow设备
fmpeg已经能支持dshow设备了!但编译时会遇到一些麻烦.在此把我的编译历程总结一下,以使后来者的心灵免遭蹂躏.先说一下我的编译环境:mingw+msys,ffmpeg用最新版.在configure ffmpeg工程时,如果不特别指定,默认fdshow设备是被支持的,但编译后却没有.可以查看configure的日志文件,会发现找不到一些依赖的头文件.所以原创 2012-02-28 17:04:13 · 7438 阅读 · 2 评论 -
live555学习笔记1-引子
一直想研究live555,没有时间,终于因为项目的原因可以深入无间地研究一下了.所以在此著文以记之.一 如何编译live555利用mingw环境很容易:在live555文件夹下,genMakefiles mingwmake即可.可以用genWindowsMakefiles.cmd生成VC可用的makefile,但是对比较新的vc版本支持不好,需要自己改很多东原创 2011-10-26 10:07:34 · 37283 阅读 · 2 评论 -
live555学习笔记6-建立RTP会话
六 建立RTP会话首先更正一个概念:ServerMediaSession原先说代表一个流,其实是不准确的。它代表的是server端的一个媒体的名字,而说ServerMediaSubsession代表一个Track是准确的。以后流指的是那些有数据流动的组合。RTP的建立:RTP的建立过程无非是这样:client告诉server自己的rtp/rtcp端口号,server原创 2011-10-28 15:19:21 · 24456 阅读 · 2 评论 -
live555学习笔记7-RTP打包与发送
七 RTP打包与发送rtp传送开始于函数:MediaSink::startPlaying()。想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当于directshow的拉模式)。看一下这个函数:Boolean MediaSink::startPlaying(MediaSource& source, afterPl原创 2011-10-31 15:44:01 · 27077 阅读 · 12 评论 -
live555学习笔记10-h264 RTP传输详解(2)
十 h264 RTP传输详解(2)上一章并没有把打开文件分析文件的代码找到,因为发现它隐藏得比较深,而且H264的Source又有多个,形成了连环计。所以此章中就将文件处理与H264的Source们并在一起分析吧。从哪里开始呢?从source开始吧!为什么要从它开始呢?我就想从这里开始,行了吧?FramedSource* H264VideoFileServerMediaSubs原创 2011-11-04 15:52:54 · 17703 阅读 · 5 评论 -
live555学习笔记11-h264 RTP传输详解(3)
十一 h264 RTP传输详解(3)书接上回:H264FUAFragmenter又对数据做了什么呢?void H264FUAFragmenter::doGetNextFrame(){ if (fNumValidDataBytes == 1) { // We have no NAL unit data currently in the buffer. Read a n原创 2011-11-08 11:24:13 · 14366 阅读 · 1 评论 -
live555学习笔记13-RTPInterface详解
十三:RTPInterface详解好几天没写blog了。看源码真累啊,还要把理解的写到纸上,还要组织混乱的思想,令人头痛,所以这需要激情。不过,今天激情又来了。大家应该已理解了GroupSocket这个类。理论上讲那些需要操作udp socket 的类应保存GroupSocket的实例。但事实并不是这样,可以看一下RTPSink,RTPSource,RTCPInstance原创 2011-11-18 13:18:22 · 12820 阅读 · 3 评论 -
live555学习笔记2-基础类
二 基础类讲几个重要的基础类:BasicUsageEnvironment和UsageEnvironment中的类都是用于整个系统的基础功能类.比如UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误,就需要保存UsageEnvironment的指针.而TaskScheduler则提供了任务调度功能.整个程序的运行发动机就是它,它原创 2011-10-26 15:41:56 · 31281 阅读 · 10 评论 -
live555学习笔记3-消息循环
三 消息循环看服端的主体:live555MediaServer.cpp中的main()函数,可见其创建一个RTSPServer类实例后,即进入一个函数env->taskScheduler().doEventLoop()中,看名字很明显是一个消息循坏,执行到里面后不停地转圈,生名不息,转圈不止。那么在这个人生的圈圈中如何实现RTSP服务和RTP传输呢?别想那么远了,还是先看这个圈圈中实现了什么功原创 2011-10-26 17:23:46 · 29209 阅读 · 8 评论 -
新版live555代理服务器
好久没搞流媒体了,最近又回归了,已经把live555代理服务器更新到最新的live555代码(V0.82)。改进了一大坨问题,还去掉了一个类,代码更精简了。改进了命令行参数格式,只要这样:rtsp://proxy-server-addr:port/proxy?rtsp://source-rtsp-server-addr:port/123.264就行了。“?”后面就是标准的RTSP地址格式,可以放入原创 2014-12-16 15:42:58 · 9093 阅读 · 0 评论