随笔分类 -  流媒体

ffmpeg的新东东:AVFilter
摘要:利用ffmpeg做图像的pixel format转换你还在用libswscale吗?嘿嘿,过时啦!ffmpeg中有了新东西:libavfilter.使用它,可以完全代替libswscale,并且可以自动完成一些复杂的转换操作呢.libavfilter啊,用了都说好!但就是太复杂...如果你仅仅是做图像的pixel format处理,用libswscale是相当简单,可以看看最新的ffplay.c中的代码,被#if CONFIG_AVFILTER #endif包围的代码量非常大,而且让人一上来看得一头雾水,但为了赶潮流,我们还是得学习它啊...先弄清楚avfilter中的几个相关的概念(注意:如 阅读全文

posted @ 2012-01-30 14:20 android开发实例 阅读(2518) 评论(0) 推荐(0) 编辑

live555传输Speex音频详解二:Speex 使用SDP及其它事项
摘要:1. Speex使用SDP当使用SDP来描述使用Speex格式的会话时,映射是下面这样的:o 媒体类型 ("audio") 在"m="行中指定媒体的名字。o 媒体子类型 ("speex") 在SDP "a=rtpmap"行中指定编码名字。所需的"rate"参数也在"a=rtpmap" 行中,表明时钟频率。o 参数 "ptime" 和 "maxptime" 分别在SDP 的"a=ptime"行和"a=maxp 阅读全文

posted @ 2012-01-18 16:25 android开发实例 阅读(1188) 评论(0) 推荐(0) 编辑

live555传输Speex音频详解一:Speex over RTP
摘要:1. RTP Speex 头部RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。Payload Type (PT): 本格式的负责类型号。Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在有声数据的第一个包上。 Speex支持声音检测,可以在无声时不产生帧数据。所以包可能是非连续传输的。Extension (X) bit: 见RTP的规定。Timestamp: 一个32位的整数,表示一个包中第一帧的采样时间。2. Speex的RTP负载格式Speex的RTP负载如图1所示。本格式没有附加的头部,所以只什用标准的RTP头部 头部之后是一个或多个负载数据 阅读全文

posted @ 2012-01-18 13:23 android开发实例 阅读(1585) 评论(0) 推荐(0) 编辑

live555学习笔记16-几个重要对象的生命期
摘要:十六 几个重要对象的生命期live555中很多类,类与类之间的关系复杂,从属关系不明显,层次上看起来也有些乱.所以源代码读起来比较困难,对于一些对象生命的来龙去脉也很难厘清.但这并不能说明live555的架构不好,最适合的才是最好的,对于流媒体的处理来说,live555架构已是相当精巧,当然,这是在你深入了解它的基础上才会有的体会.live555作为服务器,大家都很关心对内存的利用效率,是否过多的吃内存?是否造成太多的内存碎片?我个人认为不必太担心这方面的事,live555对于内存的使用效率还是比较高的,当然要求太高的可能要自己实现内存池之类的东西.然而,我在使用它的过程中,还是发现了一点小小 阅读全文

posted @ 2011-12-19 09:13 android开发实例 阅读(1147) 评论(0) 推荐(0) 编辑

live555学习笔记13-RTPInterface详解
摘要:十三:RTPInterface详解好几天没写blog了。看源码真累啊,还要把理解的写到纸上,还要组织混乱的思想,令人头痛,所以这需要激情。不过,今天激情又来了。大家应该已理解了GroupSocket这个类。理论上讲那些需要操作udp socket 的类应保存GroupSocket的实例。但事实并不是这样,可以看一下RTPSink,RTPSource,RTCPInstance等,它们都没有保存GroupSocket型的变量。那它们通过哪个类进行socket操作呢?是RTPInterface!!这些类接收的GroupSocket指针最后都传给了 RTPInterface 。为什么用RTPInter 阅读全文

posted @ 2011-11-18 13:18 android开发实例 阅读(3331) 评论(0) 推荐(0) 编辑

live555学习笔记12-h264 rtp包的时间戳
摘要:十二 h264 rtp包的时间戳这次我们一起来分析一下live555中是怎样为rtp包打时间戳的.就以h264为例吧.void H264VideoRTPSink::doSpecialFrameHandling(unsigned /*fragmentationOffset*/, unsigned char* /*frameStart*/, unsigned /*numBytesInFrame*/, struct timeval framePresentationTime, unsigned /*numRemainingBytes*/) { // Set the RTP 'M' . 阅读全文

posted @ 2011-11-08 17:08 android开发实例 阅读(2098) 评论(0) 推荐(0) 编辑

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 new one: fInputSource->getNextFrame(&fInputBuffer[1], fInputBufferSize - 1, afterGettingFrame, this, Frame... 阅读全文

posted @ 2011-11-08 11:24 android开发实例 阅读(1311) 评论(0) 推荐(0) 编辑

live555学习笔记10-h264 RTP传输详解(2)
摘要:十 h264 RTP传输详解(2)上一章并没有把打开文件分析文件的代码找到,因为发现它隐藏得比较深,而且H264的Source又有多个,形成了连环计。所以此章中就将文件处理与H264的Source们并在一起分析吧。从哪里开始呢?从source开始吧!为什么要从它开始呢?我就想从这里开始,行了吧?FramedSource* H264VideoFileServerMediaSubsession::createNewStreamSource( unsigned /*clientSessionId*/, unsigned& estBitrate) { estBitrate = 500; //. 阅读全文

posted @ 2011-11-04 15:52 android开发实例 阅读(1835) 评论(0) 推荐(0) 编辑

live555学习笔记9-h264 RTP传输详解(1)
摘要:九 h264 RTP传输详解(1)前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息。我们就从这里入手吧。当RTSPServer收到对某个媒体的DESCRIBE请求时,它会找到对应的ServerMediaSession,调用ServerMediaSession::generateSDPDescription()。generateSDPDescription()中会遍历调用ServerMediaSession中所有的调用ServerMediaSubsession,通过subsession->sdpLines()取得每个Subsession的sdp, 阅读全文

posted @ 2011-11-03 11:21 android开发实例 阅读(2977) 评论(0) 推荐(0) 编辑

live555学习笔记8-RTSPClient分析
摘要:八 RTSPClient分析有RTSPServer,当然就要有RTSPClient。如果按照Server端的架构,想一下Client端各部分的组成可能是这样:因为要连接RTSP server,所以RTSPClient要有TCP socket。当获取到server端的DESCRIBE后,应建立一个对应于ServerMediaSession的ClientMediaSession。对应每个Track,ClientMediaSession中应建立ClientMediaSubsession。当建立RTP Session时,应分别为所拥有的Track发送SETUP请求连接,在获取回应后,分别为所有的tra 阅读全文

posted @ 2011-11-02 10:39 android开发实例 阅读(2867) 评论(0) 推荐(0) 编辑

导航