![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DSS流媒体服务器
文章平均质量分 71
Suk_39799839
这个作者很懒,什么都没留下…
展开
-
DSS 代码分析【RTSP消息交互过程】
RTSP消息交互过程:c->s【向服务器请求SDP信息】【DESCRIBE】 DESCRIBE rtsp://211.94.164.220/3.3gp RTSP/1.0【交互标识】 CSeq: 1【请求内容】 Accept: application/sdp【用户标识】 User-Agent:01056SS6800111761602210原创 2017-11-20 20:43:46 · 742 阅读 · 0 评论 -
DSS 代码分析【SR包发送】
Darwin 流媒体在发送RTP时会定期的发送SR发送端报告,具体调用过程如下SR发送的函数具体实现如下:void RTPStream::SendRTCPSR(const SInt64& inTime, Bool16 inAppendBye){ // This will roll over, after which payloadByteCount will be all messed原创 2017-11-22 15:54:57 · 586 阅读 · 0 评论 -
H.264视频流的传输与载荷
转载:http://blog.csdn.net/bytxl/article/details/50393198从摄像头获取的视频数据,经过编码后(当然,也可以不编码,如果你觉得也很ok的话),可以视频录制,同时如果需要,当然也可以视频远程传输咯,而实时传输协议(Real-time Transport Protocol,RTP)是在Internet上处理多媒体数据流的一种网络协议,利用它能转载 2017-11-22 20:51:33 · 483 阅读 · 0 评论 -
DSS 代码分析【点播请求】
点播请求:RTSP连接建立客户端发起点播请求,触发服务器的建立RTSP连接事件针对RTSP协议,Darwing Streaming Server在554端口上侦听,当有连接请求到达时,通过accept调用返回一个socket,对应的后续RTSP请求都是通过这个socket来传送的。我们把RTSP相关的事件分成两类,一类是RTSP连接请求,一类是RTSP请求。先来看RTSP连原创 2017-11-20 19:52:12 · 993 阅读 · 0 评论 -
DSS 代码分析【reflector反射之推流转发分析】
客户端使用RTP over RTSP方式推流(annouce-->setup-->play)给DSS 服务器进行流转发流程如下:1. 当有RTSP请求消息到来时,相应的RTSPSession会被加入的TaskThread线程队列中等待执行,接着RTSPSession::Run()会被调用。在RTSPSession::Run()状态机跳转中kReadingReques原创 2017-11-24 20:45:49 · 739 阅读 · 0 评论 -
DSS 代码分析【RTP over tcp实现】
Darwin流媒体服务器RTP包可以通过 RTSP TCP channel进行传输。1.调用RTPStream::Write发送RTP包时,会判断是否使用TCP的方式进行传输,使用TCP传输时调用InterleavedWriteif (fTransportType == qtssRTPTransportTypeTCP) // write out in interleave forma原创 2017-11-24 12:01:44 · 625 阅读 · 0 评论 -
DSS 代码分析【RTSP announce推流报文分析】
Darwin流媒体服务器支持客户端推流到服务器端,服务器端再将推流转发到请求该流的客户端列表里。一,客户端推流过程ANNOUNCE->SETUP->PLAY->RTP/RTCP->TEARDOWN交互报文请参照,转载: http://blog.csdn.net/xiejiashu/article/details/51166196#C->S:#time: ms=47535025转载 2017-11-24 20:55:22 · 2376 阅读 · 0 评论 -
Darwin流媒体服务器代码分析
Darwin Streaming Server(即DSS)是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开源的基于标准的流媒体服务器,可以运行在Windows NT和Windows 2000,以及几个UNIX实现上,包括Mac OS X,Linux,FreeBSD和Solar原创 2017-12-04 20:49:03 · 635 阅读 · 0 评论 -
DSS 代码分析【BufferWindow实现】
Darwin 流媒体服务器可以根据客户端BufferWindow的大小,动态控制发包的速度;客户端需要设定BufferWindow,并通过RTCP包定期将当前可用BufferWindow大小告诉服务器。服务器端实现流程如下:1.服务器端有个RTCPTask的任务会在TaskThread的线程里一直执行,接收客户端发送过来的RTCP包,并调用ProcessIncomingRTCPPacket原创 2017-11-22 15:37:43 · 413 阅读 · 0 评论 -
DSS 代码分析【Reliable UDP之拥塞控制】
Darwin流媒体服务器中拥塞控制是在RTPBandwidthTracker类中定义并实现的。1.在服务器启调用 RTPSession::Play给客户端播送音视频数据时,会调用RTPBandwidthTracker::SetWindowSize给拥塞窗口fCongestionWindow设定初值,fCongestionWindow是会动态变化的。void RTPBandwidthTrac原创 2017-11-22 11:57:39 · 480 阅读 · 0 评论 -
DSS 代码分析【TimeoutTask】
从代码中看,TimeoutTaskThread是IdleTask的派生类,分析后发现从TimeoutTaskThread与IdleTask没有任何关系,完全可以从Task派生。因此TimeoutTaskThread就是一个普通的Task,TimeoutTaskThread通过其Run方法监控一组超时任务,具体的比如RTSP协议或者RTP协议超时。在系统启动的时候TimeoutTas原创 2017-11-20 19:47:10 · 557 阅读 · 0 评论 -
DSS 代码分析【TaskThread与Task】
TaskThread::Entry调用TaskThread::WaitForTask()方法获得下一个需要处理的Task。TaskThread::WaitForTask()首先从TaskThread::fHeap中获得Task,如果TaskThread::fHeap中没有满足条件的Task,则从TaskThread::fTaskQueue中获得Task。TaskThread::Entr原创 2017-11-20 19:44:49 · 421 阅读 · 0 评论 -
DSS 代码分析【EventThread与EventContext】
u系统启动的时候调用QTSServer::StartTasks()把RTSP服务端口加入到侦听队列中。此时便开始接收客户端的RTSP连接请求了。u在EventThread::Entry中调用select_waitevent函数等待事件的发生,当有事件发生的时候,就通过调用ProcessEvent方法对事件进行相应的处理。注意ProcessEvent是一个虚函数,共有两个实现。Event原创 2017-11-20 19:42:08 · 486 阅读 · 0 评论 -
DSS 代码分析【服务器架构】
DSS流媒体服务器是由一个父进程构成的,这个父进程分叉出一个子进程,该子进程就是核心服务器。父进程会等待子进程的退出。如果子进程错误退出,则父进程就会分叉出一个新的子进程。核心服务器的作用是充当网络客户和服务器模块的接口,其中网络客户使用RTP和RTSP协议来发送请求和接收响应,而服务器模块则负责处理请求和向客户端发送数据包。DarwinSt原创 2017-11-20 19:35:53 · 1429 阅读 · 0 评论 -
DSS 代码分析【启动、初始化流程】
DSS加载module及和module交互的流程,如下:(1)、DSS在fork子进程后调用StartServer启动服务 调用OS、OSThread、Socket、SocketUtils、QTSSDictionaryMap、 QTSServerInterface、QTSServer等类的Initialize函数进行初始化。原创 2017-11-20 19:19:33 · 983 阅读 · 0 评论 -
DSS 代码分析【学习资料分享】
一个采集手机视频数据,通过RTSP协议进行发布的Android开源项目https://github.com/fyhertz/spydroid-ipcamera一个全面介绍Darwin 流媒体服务器的文章http://www.wisestudy.cn/opentech/darwin-quickTime.html原创 2017-11-20 21:02:55 · 1650 阅读 · 0 评论 -
DSS 代码分析【Reliable UDP之数据重传】
Darwin 流媒体服务器支持使用Reliable UDP的方式发送RTP,Reliable UDP使用数据重传和拥挤控制算法,与TCP协议采取的算法类似。在使用Reliable UDP发送RTP数据时调用RTPStream::ReliableRTPWrite,具体实现如下:QTSS_Error RTPStream::ReliableRTPWrite(void* inBuffer, UIn原创 2017-11-21 21:04:51 · 645 阅读 · 0 评论 -
DSS 代码分析【Reliable UDP之超时时间计算】
Darwin流媒体服务中使用Karn算法来评估RTP传输超时时间,具体实现在RTPBandwidthTracker::AddToRTTEstimate函数中,具体代码如下:void RTPBandwidthTracker::AddToRTTEstimate(SInt32 rttSampleMSecs){ // qtss_printf("%d ", rttSampleMSecs); //原创 2017-11-22 10:56:57 · 526 阅读 · 0 评论 -
EasyDarwin 中使用epoll网络模型替换原来的select模型
由于select最大只支持1024个文件描述符,原因#define __FD_SETSIZE 1024,随着使用的fd增加,处理性能上也会下降。下面是easydarwin中epoll的封装#include "epollEvent.h"#include #include #include #include "OSMutex.h"using namespace std;#if d原创 2017-11-22 21:12:49 · 693 阅读 · 4 评论