dss
文章平均质量分 87
sunxiaopengsun
这个作者很懒,什么都没留下…
展开
-
【Darwin学习笔记】之QTSSReflectorModule的Describe消息处理
对于QTSSReflectorModule里面的Describe消息只处理sdp类型的资源请求,其他类型的比如mov、mp4等资源会跳转到QTSSFileModule里面,其中mp4文件在Darwin源码中点播需要先hint下。如果想在增加多种视频格式那就要对FileModule进行扩展,在我们的项目中就优化了FileModule,实现了对mp4、avi等各种格式的文件的点播支持。后面的章节我们详原创 2017-02-27 16:24:35 · 349 阅读 · 0 评论 -
利用task实现周期性任务
通过run函数返回值〉0 来实现周期性任务,返回值以毫秒为单位,将插入到taskthread中的OSHeap fHeap中。class RTCPTask:public Task{public: RTCPTask(void); ~RTCPTask(void); SInt64 Run();};#include "RTCPTask.h原创 2017-04-10 11:39:26 · 714 阅读 · 0 评论 -
用live555将内网摄像机视频推送到外网服务器
最近很多人问,如何将内网的摄像机流媒体数据发布到公网,如果用公网与局域网间的端口映射方式太过麻烦,一个摄像机要做一组映射,而且不是每一个局域网都是有固定ip地址,即使外网主机配置好了每一个摄像机的映射地址,也有可能会因为宽带公网ip地址变动而导致配置无效。再换一个应用场景,当我们的所有IP摄像机都部署在一个没有有线网络的环境里面,所有的流媒体数据都要通过3G/4G网络发布出去。那么就必转载 2017-03-31 17:36:25 · 1276 阅读 · 0 评论 -
Rtsp发送ANNOUNCE到Darwin时,RTSP/1.0 401 Unauthorized
windows下使用(2)即可如题,解决办法:修改DSS访问权限(1)在Movies目录建立一个文本文件"qtaccess",内容如下(测试失败): require any-user require any-user (2)修改源代码(测试成功)QTSSModule原创 2017-04-01 16:34:55 · 766 阅读 · 0 评论 -
easydarwin 公网地址
http://demo.easydarwin.org/easypusher.html原创 2017-03-27 17:47:52 · 882 阅读 · 0 评论 -
EasyDarwin流媒体服务器RTSP拉模式流媒体转发模块设计
拉模式转发拉模式转发,顾名思义就是服务器主动从源端(IPCamera、NVR、或者其他流媒体服务器)通过RTSP/RTP协议将流媒体音视频数据拉取到流媒体转发服务器,再通过内部分发调度机制,分发给请求转发的客户端的过程; 拉模式转发的用途非常广泛:内网直播、服务器级联、NVR等各个方面,结合服务端存储,还可以做成边转发直播、边录像的功能;EasyDarwin拉模式转发转载 2017-04-11 15:21:02 · 872 阅读 · 1 评论 -
EasyRMS 详细介绍
EasyRMS是EasyDarwin开源流媒体平台的录像与回放服务,能够直接对接安防摄像机、EasyDarwin流媒体服务器、其他标准RTSP服务,基于HLS协议,录像存储为ts流,支持本地存储与阿里云对象存储(OSS云存储),接口调用非常简单,架构灵活,而且非常易于扩展,开发者可以用EasyRMS进行扩展,开发成自己需要的云存储服务,EasyDarwin团队也将会持续迭代EasyRMS项目。转载 2017-04-11 16:45:04 · 1171 阅读 · 0 评论 -
Darwin 总结心得
TASK任务 任务Task在调用signal的时候,其实是把一个队列元素(包含了该Task的指针)放到了线程池的某个线程(TaskThread)的队列结构体中。线程有一个 死循环 ,不断地从队列中取元素,取到的每个元素都会调用对应task的run方法。所以只要在一个task调用signal,则对应的run函数立即就会执行。原创 2017-03-16 15:39:25 · 355 阅读 · 0 评论 -
EasyRTSPClient(基于live555封装的支持重连的RTSPClient)
#include using namespace std;#include "EasyTypes.h"#include "EasyRTSPClientAPI.h"class CRtspClientCtrl{public: CRtspClientCtrl(void); ~CRtspClientCtrl(void); void Start();private: Easy转载 2017-04-12 10:09:01 · 1603 阅读 · 0 评论 -
Darwin在转发流过程中对推送端断开的处理问题
最近在做项目的过程中遇到一个问题,在用Darwin Streaming Server中的QTSSReflectorModule模块做为流转发和分发服务,用live555的DarwinInjector类做为模拟设备进行流推送时,如果按照正常RTSP推送流程:Announce、Setup、Play…、Teardown,Darwin能较好地完成流的转发,但是假如设备在不正常工作,例如网络异常断开原创 2017-03-31 09:59:26 · 485 阅读 · 0 评论 -
基于DSS的先侦听后推送式流媒体转发
前面文章中说到的,DSS转发可以划分为先拉后推和先侦听后推送两种模式,今天我们解析的是DSS进行的先侦听后推送的流程,具体流程可以大致描述为:源端或者中继端(我们称之为推送端)先通过主动的连接,告知推送端信息(ID,IP等等),服务器维护与源端的会话Session,建立一定的保活与超时机制,并通过此路Session相互交换控制或者上送信息,其中就包含流媒体推送的命令。可按照具体的需求,服务器可通过原创 2017-03-31 09:57:48 · 842 阅读 · 0 评论 -
用Darwin和live555实现的直播框架
我们在开发视频直播或者监控类项目的时候,如场馆监控、学校监控、车载监控等等,往往首先希望的是形成一个项目的雏形,然后再在这个框架的基础上进行不断的完善和扩展工作,那么我们今天要给大家介绍的就是,如何形成一个这样的框架:采集本地音视频数据(Win) -->视频分发服务器-->客户端随意接入大致流程:我们首先通过DShow采集Windows(XP、Win7经过测试)主机的视频设备(Ca转载 2017-03-30 18:51:26 · 1191 阅读 · 0 评论 -
【Darwin学习笔记】之QTSSReflectorModule的Setup消息处理
Setup消息进入到DoSetup函数单独处理,处理流程如下:【转载请注明出处】:http://blog.csdn.net/longlong5301. 根据关键字qtssRTSPReqTransportMode判断是否为推模式,具体isPush值由Setup请求中的mode值有关,mode="receive" || mode="record"表示isPush为true。对应的解原创 2017-02-27 16:25:42 · 508 阅读 · 0 评论 -
darwin 源码分析
摘要 所谓的流式媒体简单的讲就是指人们通过网络实时的收看多媒体信息:如音频流、视频流等。与流式媒体对应的传统工作方式是下载+播放模式,即用户首先下载多媒体文件,然后再在本地播放,这种方法的一个主要缺点是启动延迟较大,例如一个30分钟长的MPEG-I文件(相当于VCD质量),即使使用1.5Mbps的速率下载,也需要半个小时才能完成,这样一个漫长的等待时间实在是无法忍受。在窄带网络环境中,几乎所有基原创 2017-03-07 21:51:10 · 1162 阅读 · 0 评论 -
Darwin Stream server(DSS服务器)的Relay(中继/转发)设置
先说一下需求:有4台主机ABCD。A机上跑live555,将摄像头的实时视频编码为H264,用RTSP协议(URL:rtsp://IpAddr-B/CamLive.sdp)将视频流推送至DSS服务器B。B将收到的流转发给DSS服务器C。客户端D运行VLC,用地址rtsp://IpAddr-C/CamLive.sdp访问视频流。在上述直播转发的实验过程过程中,顺带实现点播转发。在DS原创 2017-03-07 21:59:48 · 557 阅读 · 0 评论 -
用VLC读取摄像头产生RTSP流,DSS主动取流转发(一)
摄像机地址是192.1.101.51,VLC运行在192.1.101.77上,DSS服务器架设在192.1.101.30上。Step1:VLC从摄像机取流,产生RTSP流vlc -vvv rtsp://192.1.101.51 --sout #rtp{dst=192.1.101.77,sdp=rtsp://192.1.101.77/live_vlc.sdp}原创 2017-03-07 22:01:40 · 1034 阅读 · 0 评论 -
用VLC读取摄像头产生RTSP流,DSS侦听并转发(二)
之前介绍过《用VLC读取摄像头产生RTSP流,DSS主动取流转发(一)》本文介绍另一种方法。摄像机地址是192.1.101.51,VLC运行在192.1.101.77上,DSS服务器架设在192.1.101.30上,二级DSS服务器(可选)架设在192.1.101.78上。Step1:VLC从摄像机取流,产生RTSP流vlc -vvv rtsp://192.原创 2017-03-07 22:02:51 · 697 阅读 · 0 评论 -
EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)
前言早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台《基于Darwin实现的分布式流媒体直播服务器系统》,当时的考虑如今看来有诸多的细节点没有考虑到:1、CMS是单点部署,无法扩展设备注册节点服务器;2、EasyDarwin流媒体服务器虽然可以分布式部署,但负载信息都是以Hash map的形式存在CMS的内存中的,EasyDarwin与CMS保持着长连接信令交互,这种形转载 2017-03-21 18:09:24 · 725 阅读 · 0 评论 -
QTSS数据类型
QTSS数据类型QTSS_AttributeID 唯一标识一个属性QTSS_Object 用于定义QTSS对象QTSS_ObjectType 标识一个QTSS对象类型QTSS_Role 用于存储模块角色QTSS_ServiceID 标识一个服务QTSS_StreamRef 标识一个流QTSS_TimeVal 用于存储时间值QTSS_AttributeIDQTSS_Attribu原创 2017-03-28 22:07:13 · 539 阅读 · 0 评论 -
在EasyDarwin进行实时视频转发的两种模式
一、首先引用Darwin开发文档里面的一段来介绍一下流转发的拉模式和推模式:Darwin支持两种自动播送的场景:先拉后推。为了发起自动播送,RTSP客户会发送标准的RTSP请求来向服务器请求一个流,然后服务器将该流中继到一个或者多个流媒体服务器。这种场景在"先拉后推"部分中加以描述。先侦听后推送。在这个场景中,自动播送在流媒体服务器接收到ANNOUNCE请求时被发起。这个场原创 2017-03-12 19:42:29 · 769 阅读 · 0 评论 -
rtsp 客户端怎样保活
1、 Q: 各位老大,小弟有个问题,就是RTSP客户端与服务器之间是如何保活的? 就是当client与server建立好session后,是如何保证该session正在使用,不被删掉了噶? A1: RTSP服务器与客户端之间的保活,有几种不同的做法。 1. 首先,RTSP服务器对于每个客户端,都应该有一个超时定时器,一旦客户端超时,就将对应的会话删除。如果会话原创 2017-03-22 13:44:21 · 1206 阅读 · 0 评论 -
流媒体技术笔记(DarwinStreamingServer相关)
简介Darwin Streaming Server简称DSS。DSS是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开放源代码的,基于标准的流媒体服务器,可以运行在Windows NT和Windows 2000,以及几个UNIX实现上,包括Mac OS X,Linu原创 2017-03-26 16:50:37 · 4456 阅读 · 0 评论 -
Darwin Streaming Server 核心代码分析
基本概念首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本。Darwin Streaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对Darwin Streaming Server核心代码的理解。Reactor模式是典型的事件触发模式,当有事件发生时则完成相原创 2017-03-17 14:32:43 · 324 阅读 · 0 评论 -
编写Darwin的Module来支持新的流媒体文件格式
Darwin是Apple公司的开源视频服务器,支持通过编写Module来进行扩展,从而支持新的流媒体封装格式。本文给出如何编写支持新的流媒体封装格式的Module。Darwin的Module必须实现两个函数,其中一个在服务器加载Module的时候被调用,这个函数的名字必须是ModuleName_Main,其中ModuleName就是模块的名字,如果采用动态模块,编译后的模块文件名也必须是这原创 2017-03-17 14:37:26 · 384 阅读 · 0 评论 -
在EasyDarwin进行实时视频转发的两种模式
一、首先引用Darwin开发文档里面的一段来介绍一下流转发的拉模式和推模式:Darwin支持两种自动播送的场景:先拉后推。为了发起自动播送,RTSP客户会发送标准的RTSP请求来向服务器请求一个流,然后服务器将该流中继到一个或者多个流媒体服务器。这种场景在"先拉后推"部分中加以描述。先侦听后推送。在这个场景中,自动播送在流媒体服务器接收到ANNOUNCE请求时被发起。这个场原创 2017-06-19 10:24:41 · 495 阅读 · 0 评论 -
Darwin Stream server(DSS服务器)的Relay(中继/转发)设置
先说一下需求:有4台主机ABCD。A机上跑live555,将摄像头的实时视频编码为H264,用RTSP协议(URL:rtsp://IpAddr-B/CamLive.sdp)将视频流推送至DSS服务器B。B将收到的流转发给DSS服务器C。客户端D运行VLC,用地址rtsp://IpAddr-C/CamLive.sdp访问视频流。在上述直播转发的实验过程过程中,顺带实现点播转发。在DS原创 2017-06-19 10:42:06 · 1115 阅读 · 0 评论 -
IdleTask 详解
在IdleTask::Initialize内部创建线程IdleTaskThread并启动线程。在IdleTaskThread内部有OSHeap fIdleHeap变量,负责存放IdleTask。在线程内部:IdleTaskThread::Entry()不断的从队列中取出task元素,然后调用elem->Signal(Task::kIdleEvent)放入到线程池中。/* * * @AP原创 2017-01-31 13:40:43 · 2791 阅读 · 0 评论 -
Ubuntu 下安装 Darwin Streaming server 流媒体服务器
参考blog:[1] http://wangheng.org/install-darwin-streaming-server-6-0-3-on-Linux.html[2] http://blog.csdn.NET/heartlesstoanyone/article/details/140509911、获得软件从http://dss.macosforge.org/官网下载Da原创 2017-08-19 10:28:43 · 922 阅读 · 0 评论 -
Darwin Streaming Server 核心代码分析
基本概念首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本。Darwin Streaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对Darwin Streaming Server核心代码的理解。Reactor模式是典型的事件触发模式,当有事件发生时则完成相转载 2017-12-01 13:56:39 · 305 阅读 · 0 评论 -
Dictionary数据类型在Darwin视频服务器中的使用
让我们先来看看Wikipedia中叫做Associative array的词条,是如下解释的:An associative array (also associative container , map , mapping , dictionary , finite map , and in query-processing an index or index file ) is an原创 2017-02-06 15:49:09 · 573 阅读 · 0 评论 -
darwin拉模式设计详解
1.live555客户端source sink创建流程rtp rtcp socket是在收到sdp信息(describe)后,根据sdp信息中的m信息来创建;source也是在收到sdp信息(describe)后,根据sdp中的媒体信息,来创建具体的source类型.在收到setup信息后,创建sink,对应source的sink2.darwin如何获取sdp信息通原创 2017-05-02 15:46:57 · 591 阅读 · 0 评论 -
基于easydarwin实现拉流转发功能
无论是darwin还是经过优化后的easydarwin流媒体服务器,都只支持客户端推流后转发。而我要实现的是,在此基础上,能够拉取rtsp流将其转发。1.为什么要实现这样的功能?现有一个摄像头,支持输出rtsp流。而客户的需求是想获取这个rtsp流,并且有上百个客户端同时获取:比如有的客户端想观看直播,有的想录制,而且要求延迟在几百ms以内。此类的需求,无论是darwin或者是easydarwin...原创 2018-02-10 13:31:26 · 6194 阅读 · 0 评论 -
所有网络流转换通用SDK EasyStream
EasyStream介绍 EasyStream SDK使用 EasyStream系列1之rtsp转rtmp EasyStream系列2之rtmp转rtsp EasyStream系列3之rtsp转rtsp EasyStream系列4之rtmp转rtmp EasyStream系列5之本地文件转rtsp EasyStream系列6之本地文件转rtmp Ea原创 2017-07-15 20:19:48 · 1850 阅读 · 0 评论 -
linux环境下编译Darwin流媒体服务器源码
获取包:6.0.3版本wget http://dss.macosforge.org/downloads/DarwinStreamingSrvr6.0.3-Source.tarlinux的补丁wget http://www.abrahamsson.com/dss-6.0.3.patch 安装之前,确信安装了gcc glibc g++等包安装步骤:解压:原创 2017-03-15 18:29:08 · 1101 阅读 · 0 评论 -
EasyDarwin开源流媒体服务器性能瓶颈分析及优化方案设计
EasyDarwin现有架构介绍EasyDarwin的现有架构对网络事件的处理是这样的,每一个Socket连接在EasyDarwin内部的对应存在形式就是一个Session,不论是RTSP服务对应的RTSPSession,还是HTTP服务对应的HTTPSession,都是一个继承自Task类的具体应用层对象;EasyDarwin有一个专门的网络事件处理的线程:EventThread转载 2017-05-10 14:58:17 · 739 阅读 · 0 评论 -
反射模块理解
1.缓冲区时间(reflector_buffer_size_sec):存储一定时间的数据包2.sBucketSize 每一组水桶的个数,默认16:代表直播客户端的输出被一组一组地管理成二维形式,表示每一组的大小3.fNumBuckets 多少组水桶 默认16组4.每一组的缓冲区偏移时间 单位 (sBucketDelayInMsec,默认73ms):第一组0ms,第二组:73*1ms 第原创 2017-05-10 14:43:32 · 656 阅读 · 0 评论 -
让EasyDarwin只支持RTP over TCP传输
我们经常需要EasyDarwin服务器支持公网流媒体传输,但很多时候,播放器默认都是通过RTP over UDP的形式在RTSP SETUP中请求,往往都以在内网接收不到UDP数据失败结束,那么我们如何使EasyDarwin将客户端的RTP over UDP自动切换成RTP over TCP形式呢,如下方法亲测可用:在EasyDarwin的RTSPSession::SetupRequest原创 2017-04-14 18:14:56 · 751 阅读 · 1 评论 -
OSRefTable使用
如何将一个对象关联到OSRefTable中?OSRefTable中维护了OSRefHashTable变量。 创建一个对象,这个对象内部要包含一个key即可。key的类型为StrPtrLen,同时要有一个OSRef变量,并在该变量初始化时将StrPtrLen初始化到OSRef即可。 这样通过OSRef既能查找到key,又能引用到该对象的this,同时还能获取引用计数。“` class A {原创 2017-05-11 10:44:59 · 532 阅读 · 0 评论 -
反射模块QTSSReflectorModule
反射总结一、常用类或模块及重要子函数描述反射模块QTSSReflectorModule这个模块包含反射用的各个角色,以支持反射的建立、设置、播放和中断等操作。这个模块不是类,只是一个概念,它的支撑体是一个文件。DoSetup响应RTSP的Setup请求,添加一个RTPSessionOutputHaveStreamBuffers用来判断Refl原创 2017-04-05 18:14:15 · 1123 阅读 · 0 评论 -
Darwin做直播时对ReflectorSession引用数的控制
在之前的博客中,我们提到了如何用Darwin&live555实现直播过程,那么更进一步,当直播结束时,我们需要关闭所有正在收看的客户端,并且delete转发会话ReflectorSession,这样才能够在下一次再有同样名称的流推送进来时,创建新的转发Session。我们下面所做的修改都是基于Darwin 6.0.3进行,具体下载可到https://github.com/xiejiashu转载 2017-05-05 10:40:01 · 462 阅读 · 0 评论