- 博客(89)
- 资源 (155)
- 问答 (1)
- 收藏
- 关注
转载 用live555将内网摄像机视频推送到外网服务器
最近很多人问,如何将内网的摄像机流媒体数据发布到公网,如果用公网与局域网间的端口映射方式太过麻烦,一个摄像机要做一组映射,而且不是每一个局域网都是有固定ip地址,即使外网主机配置好了每一个摄像机的映射地址,也有可能会因为宽带公网ip地址变动而导致配置无效。再换一个应用场景,当我们的所有IP摄像机都部署在一个没有有线网络的环境里面,所有的流媒体数据都要通过3G/4G网络发布出去。那么就必
2017-03-31 17:36:25 1257
原创 Darwin在转发流过程中对推送端断开的处理问题
最近在做项目的过程中遇到一个问题,在用Darwin Streaming Server中的QTSSReflectorModule模块做为流转发和分发服务,用live555的DarwinInjector类做为模拟设备进行流推送时,如果按照正常RTSP推送流程:Announce、Setup、Play…、Teardown,Darwin能较好地完成流的转发,但是假如设备在不正常工作,例如网络异常断开
2017-03-31 09:59:26 476
原创 基于DSS的先侦听后推送式流媒体转发
前面文章中说到的,DSS转发可以划分为先拉后推和先侦听后推送两种模式,今天我们解析的是DSS进行的先侦听后推送的流程,具体流程可以大致描述为:源端或者中继端(我们称之为推送端)先通过主动的连接,告知推送端信息(ID,IP等等),服务器维护与源端的会话Session,建立一定的保活与超时机制,并通过此路Session相互交换控制或者上送信息,其中就包含流媒体推送的命令。可按照具体的需求,服务器可通过
2017-03-31 09:57:48 835
转载 用Darwin和live555实现的直播框架
我们在开发视频直播或者监控类项目的时候,如场馆监控、学校监控、车载监控等等,往往首先希望的是形成一个项目的雏形,然后再在这个框架的基础上进行不断的完善和扩展工作,那么我们今天要给大家介绍的就是,如何形成一个这样的框架:采集本地音视频数据(Win) -->视频分发服务器-->客户端随意接入大致流程:我们首先通过DShow采集Windows(XP、Win7经过测试)主机的视频设备(Ca
2017-03-30 18:51:26 1185
转载 rtp over tcp
Normally, RTSP provide streaming over UDP. By nature, UDP is a better choice as it provides robust streaming capability for media. However, it is unlikely to use UDP for streaming over the Internet.
2017-03-30 11:36:51 318
原创 流媒体传输控制协议详解之RTSP
流媒体传输协议介绍一、RTSP协议介绍什么是rtsp?RTSP协议以客户服务器方式工作,,如:暂停/继续、后退、前进等。它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制, 因此 RTSP 又称为“因特网录像机遥控协议”。 RTSP(Real-Time Stream Protocol)是一种基于文本的应用层协议,在
2017-03-30 11:09:16 4949
原创 流媒体传输控制协议详解之sdp
SDP协议一、SDP协议介绍 SDP 完全是一种会话描述格式(对应的RFC2327 , RFC4566, )― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP协议是也是基于文本的协议,这样就能保证协议的可扩展性
2017-03-30 11:07:58 1271
原创 流媒体传输控制协议详解之RTP
RTP协议 实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的,后在RFC3550中进行更新。 国际电信联盟ITU-T也发布了自己的RTP文档,作为H.225.0,但是后来当IETF发布了关于它的稳定的标准RFC后就被取消了。它作为因特
2017-03-30 11:06:34 827
原创 QTSSDictionary理解
所有派生于QTSSDictionary的类实例化的对象,都是一个qtss_object.由若干属性组成的,每个属性有一个或者多个值。QTSS_AttributeID标识每一个属性。通过setval 可以为属性添加单个值;而setvale则为属性添加多个值。每个属性有自己名字,ID号,数据类型,读写权限,回调函数。而这些则维护在QTSSDictionaryMap中。在QT
2017-03-29 15:01:45 951
原创 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 528
原创 流媒体技术笔记(DarwinStreamingServer相关)
简介Darwin Streaming Server简称DSS。DSS是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开放源代码的,基于标准的流媒体服务器,可以运行在Windows NT和Windows 2000,以及几个UNIX实现上,包括Mac OS X,Linu
2017-03-26 16:50:37 4440
原创 函数inet_addr和inet_ntoa,本机字节顺序与网络字节顺序的转函数的总结
inet_addr : 将"数字+句点"的格式的IP地址转换到unsigned long中,返回值已经是按照网络字节顺序了相反inet_ntoa :把类型为struct in_addr的数据转化为"数字+句点"的形式的字符串typedef u_int32_t in_addr_t;struct in_addr{ in_addr_t s_addr;};本机字节
2017-03-22 18:38:40 2632
原创 rtsp 客户端怎样保活
1、 Q: 各位老大,小弟有个问题,就是RTSP客户端与服务器之间是如何保活的? 就是当client与server建立好session后,是如何保证该session正在使用,不被删掉了噶? A1: RTSP服务器与客户端之间的保活,有几种不同的做法。 1. 首先,RTSP服务器对于每个客户端,都应该有一个超时定时器,一旦客户端超时,就将对应的会话删除。如果会话
2017-03-22 13:44:21 1192
原创 vs2010---“无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件。”
今天写程序遇到这个问题,一调试就出错,经过搜索查找,最终解决问题,整理如下:首先打开菜单 项目->项目属性页 1。选择 配置属性->链接器->调试->生成调试信息 改为 是 2。选择 配置属性->C/C++ ->常规->调试信息格式 改为 用于“编辑并继续”的程序数据库(/ZI) 3。选择 配置属性->C/C++ ->优化->优化 改为 禁用(/Od) 对于我来说,上述
2017-03-22 10:27:55 2070
转载 EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)
前言早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台《基于Darwin实现的分布式流媒体直播服务器系统》,当时的考虑如今看来有诸多的细节点没有考虑到:1、CMS是单点部署,无法扩展设备注册节点服务器;2、EasyDarwin流媒体服务器虽然可以分布式部署,但负载信息都是以Hash map的形式存在CMS的内存中的,EasyDarwin与CMS保持着长连接信令交互,这种形
2017-03-21 18:09:24 714
原创 自己动手写RTP服务器——传输所有格式的视频
上一篇文章我们介绍了如何用一个简单的UDP socket搭建一个RTP服务器。我把这份80行的代码呈现到客户面前的时候,就有人不满意了。还有人在参考的时候会问:“楼主你的TS格式的文件是哪里来的?应该去哪里下载?”“这也太简单了吧,不就是用UDP把TS文件发过去么?就这么几十行代码也算个大作业?”“平时看的视频格式哪有TS的呀,不是avi就是mp4、rmvb什么的,根本不实用啊!”
2017-03-19 13:10:35 425
原创 自己动手写RTP服务器——用RTP协议传输TS流
上一篇文章我们介绍了关于RTP协议的知识,那么我们现在就自己写一个简单的传输TS流媒体的RTP服务器吧。预备知识关于TS流的格式:TS流封装的具体格式请参考文档ISO/IEC 13818-1。这里我们只需要了解一些简单的信息就好。首先TS流是有许多的TS Packet组成的,每个TS Packet的长度固定为188 bytes,每个packet都是以sync_byte:0x47开头
2017-03-19 13:09:56 489
原创 自己动手写RTP服务器——关于RTP协议
本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及一些关于多媒体编解码的知识。 关于RTP协议的必备知识要动手实现一个协议,当然首先需要阅读该协议的文档。RTP协议的文档,有rfc1889、rfc1890、rfc3550,其中rfc3550是现在的版本,另外两个是过期版。这个协议可以在ietf的官网找到:http://tools.iet
2017-03-19 13:07:00 533
原创 TCP和UDP的最完整的区别
TCP UDPTCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不保证 UDP应用场景: 1.面向数据报方式 2.网络数据大多为短消息 3
2017-03-18 09:13:00 421
原创 darwin 架构
基本概念首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本。Darwin Streaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对Darwin Streaming Server核心代码的理解。Reactor模式是典型的事件触发模式,当有事件发
2017-03-17 17:57:57 875
原创 Darwin中RTSP协议的实现
基本概念RTSP协议的实现服务器收到RTSP请求后会创建一个RTSPRequest对象,RTSPRequest对象是由若干属性构成的,这些属性描述了一个RTSP请求的方方面面。刚刚创建的RTSPRequest对象只有qtssRTSPReqFullRequest一个属性被赋值,qtssRTSPReqFullRequest的值是一个完整的RTSP请求,就像下面的样子:
2017-03-17 16:34:07 392
原创 RTSP、HTTP、HTTPS、SDP四种协议详解
我们将主要讲解RTSP,HTTP,HTTPS, SDP四种协议。 一:RTSP协议简介 实时流协议RTSP是一个应用层协议,用于控制具有实时特性的数据(例如多媒体流)的传送。 RTSP协议一般与RTP/RTCP和RSVP等底层协议一起协同工作,提供基于Internet的整套的流服务。它可以选择发送通道(例如:UDP、组播UDP和TCP)和基于RTP的发送机制。它可以应用
2017-03-17 15:52:06 1352
原创 编写Darwin的Module来支持新的流媒体文件格式
Darwin是Apple公司的开源视频服务器,支持通过编写Module来进行扩展,从而支持新的流媒体封装格式。本文给出如何编写支持新的流媒体封装格式的Module。Darwin的Module必须实现两个函数,其中一个在服务器加载Module的时候被调用,这个函数的名字必须是ModuleName_Main,其中ModuleName就是模块的名字,如果采用动态模块,编译后的模块文件名也必须是这
2017-03-17 14:37:26 378
原创 Darwin Streaming Server 核心代码分析
基本概念首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本。Darwin Streaming Server从设计模式上看,采用了Reactor的并发服务器设计模式,如果对Reactor有一定的了解会有助于对Darwin Streaming Server核心代码的理解。Reactor模式是典型的事件触发模式,当有事件发生时则完成相
2017-03-17 14:32:43 317
原创 socket中bind函数绑定的IP是什么
所谓bind,就是指绑定本地接受端口。指定ip,是为了分辨多ip主机。bind是服务端调用的函数,绑定的是服务端的IP,假设服务端有多个网卡,即会有多个IP,这个时候我们可以选择用bind绑定其中一个IP,那么服务端只接收该IP上某端口的数据。如果bind绑定的是INADDR_ANY,即表示所有发送到服务器的这个端口,不管是哪个网卡/哪个IP地址接收到的数据,都由这个服务端进程进行处理。
2017-03-16 17:43:47 8075 1
原创 Darwin 总结心得
TASK任务 任务Task在调用signal的时候,其实是把一个队列元素(包含了该Task的指针)放到了线程池的某个线程(TaskThread)的队列结构体中。线程有一个 死循环 ,不断地从队列中取元素,取到的每个元素都会调用对应task的run方法。所以只要在一个task调用signal,则对应的run函数立即就会执行。
2017-03-16 15:39:25 347
原创 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 1089
原创 跟我一起写 Makefile(十四)
使用make更新函数库文件———————————函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。一、函数库文件的成员一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成: archive(member)这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了"ar"
2017-03-15 12:07:35 208
原创 跟我一起写 Makefile(十三)
五、定义模式规则你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。在依赖目标中同样可以使用"%",只是依赖目标中的"%"的取值,取决于其目标。有一点需要注意的是,"%"的展开发生在变量和函数的展开之后,变量和函数的展开发生在make载入Makefile时,而模式规则中的"%"则发生
2017-03-15 12:06:16 237
原创 跟我一起写 Makefile(十二)
隐含规则————在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件)。本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则。“隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运行,那怕我们的
2017-03-15 12:05:41 521
原创 跟我一起写 Makefile(十一)
make 的运行——————一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。本章节就是讲述如何使用make命令的。一、make的退出码make命令执行后有三个退出码:
2017-03-15 12:04:45 191
原创 跟我一起写 Makefile(十)
四、foreach 函数 foreach函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语句,或是C-Shell(/bin/csh)中的foreach语句而构建的。它的语法是: $(foreach ,,) 这个函数的意思是,把参数中的
2017-03-15 12:03:42 213
原创 跟我一起写 Makefile(九)
使用函数————在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $( )或是 ${ }这里,就是函数
2017-03-15 12:02:32 224
原创 跟我一起写 Makefile(八)
六、多行变量 还有一种设置变量值的方法是使用define关键字。使用define关键字设置变量的值可以有换行,这有利于定义一系列的命令(前面我们讲过“命令包”的技术就是利用这个关键字)。define指示符后面跟的是变量的名字,而重起一行定义变量的值,定义是以endef关键字结束。其工作方式和“=”操作符一样。变量的值可以包含函数、命令、文字,或是其它变量。因为命令需要以[Tab]键
2017-03-15 12:01:41 331
原创 跟我一起写 Makefile(七)
使用变量————在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方。其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。变量的命名字可以包含字符、数字,下划线(可以
2017-03-15 12:01:10 211
原创 跟我一起写 Makefile(六)
书写命令————每条规则中的命令和操作系统Shell的命令行是一致的。make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令。我们在UNIX下可能会使用不同的Shell,但是make的命令默认是被“/bin
2017-03-15 12:00:29 318
原创 跟我一起写 Makefile(五)
六、多目标Makefile的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似。于是我们就能把其合并起来。当然,多个目标的生成规则的执行命令是同一个,这可能会可我们带来麻烦,不过好在我们的可以使用一个自动化变量“$@”(关于自动化变量,将在后面讲述),这个变量表示着目前规则中所有的目标的集合,这样说可能很抽象,还是看一个例子吧。
2017-03-15 11:59:23 204
原创 跟我一起写 Makefile(四)
书写规则————规则包含两个部分,一个是依赖关系,一个是生成目标的方法。在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。如果第一条规则中的目标有很多个,那么,
2017-03-15 11:58:46 224
原创 跟我一起写 Makefile(三)
Makefile 总述———————一、Makefile里有什么?Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。2、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我
2017-03-15 11:58:09 436
zlmediakit-windows zlmediakit-windows zlmediakit-windows
2024-06-18
libuvc 相关代码 k230
2023-12-22
live555 vs2022
2023-11-22
多分辨率264,265文件多分辨率264,265文件多分辨率264,265文件多分辨率264,265文件多分辨率264,265
2023-07-05
macbook 2017 bootcamp win10 安装
2023-01-29
绘制流程图工具 绘制流程图工具
2022-11-06
音频文件数组转成c语言的数组
2022-09-08
数字音频接口(I2S,PCM,TDM,PDM)数字音频接口(I2S,PCM,TDM,PDM)数字音频接口(I2S,PCM,TDM
2022-06-24
音频测试文件,各种格式集合 wav pcm mp3
2022-04-28
cmake笔记 cmake 笔记 cmake笔记 cmake
2022-02-01
qt 多窗口yuv零拷贝渲染.rar
2021-11-26
drm-example.zip
2021-11-12
Jz2440_驱动二期笔记.zip
2021-11-02
u-boot-jz2440源码
2021-10-31
ffmpeg-windows4.3.1源码静动态库.zip
2021-01-05
webrtc ulpfec无法全部还原丢失包问题
2020-09-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人