自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(56)
  • 问答 (2)
  • 收藏
  • 关注

原创 手撕RTSP协议系列(13)——RTCP协议

RTCP简介之前的文章,介绍了RTSP和RTP协议,RTSP用于建立连接及发送请求等,RTP用于实际的媒体数据传输。整个RTSP的流程中,还有一种不可或缺的协议, 那就是RTCP。RTCP的全称是RTP Control Protocol,从英文名称可以看出,其是针对RTP的控制协议!RTCP主要用于提供数据分发质量反馈信息,本文详细介绍一下RTCP协议!数据包格式首先,让我们来看一下RTCP的数据包格式,如下图:对照示意图,可以看到如下字段,下面做详细解释:V...

2020-10-28 16:43:03 1576

原创 手撕RTSP协议系列(12)——RTP包格式

前面我们花了较多的篇幅来介绍了RTSP协议的一些细节,但是rtsp传输,本质上涉及三种协议,RTSP、RTP以及RTCP。RTSP主要负责连接建立,销毁及一些其他的控制。而实际涉及媒体数据传输使用的是RTP协议,本节我们来介绍一下RTP协议。RTP概览RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)!RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分...

2020-10-28 16:40:02 2262 1

原创 手撕RTSP协议系列(11)——RTSP_SET_PARAMETER

上一篇介绍了RTSP的GET_PARAMETER消息,看到这个消息类型,我们很容易习惯性的想到应该还要有一个RTSP_SET_PARAMETER消息,如我我们所愿,RTSP确实有这样一条消息,本篇我们来看一看!SET PARAMETER作用SET_PARAMETER方法用于给URI指定的流地址设置参数。当客户端想要确定为什么某一个特定的请求失败时,请求应该只包含一个参数。如果请求中包含多个参数值,则服务器只有在所有的参数被成功设置的情况下,才会生效。服务器允许某个参数...

2020-10-28 16:36:26 1322

原创 手撕RTSP协议系列(10)——GET_PARAMETER

上一篇我们介绍了RTSP的TEARDOWN指令,用于结束一个RTSP的会话!本篇我们来介绍RTSP GET_PARAMETER!GET Parameter作用GetParameret用作向服务器获取参数,一般用于获取时间范围。当发送的请求中没有相关请求参数时,则用作保持RTSP连接!GET Parameter格式GET PARAMETER指令的格式如下:RTSP URI表示请求的rtsp地址,RTSP version表示版本号;CSeq表示消息序列号;...

2020-10-28 16:34:50 2097

原创 手撕RTSP协议系列(9)——TEARDOWN

上一篇我们讲了RTSP PAUSE消息,本篇我们来看下RTSP TEARDOWN消息!TEARDOWN作用TEARDOWN是拆卸的意思,对于RTSP而言,就是结束流传输,同时释放与之相关的资源,TEARDWON之后,整个RTSP连接也就结束了!好了,接下来我们来仔细看一下:TEARDOWN格式首先还是看一下TEARDOWN请求的消息格式:如图中,TEARDOWN消息中,指定了URI,不用多说了;RTSP版本号也是我们的老朋友了;CSeq表示序列号;...

2020-10-28 16:32:55 3193 3

原创 手撕RTSP协议系列(8)——PAUSE

上一篇我们讲解了RTSP PLAY消息,PLAY请求成功之后,RTSP server就会一直向客户端发送RTP数据包!开始“播放”之后,我们相应的就会有暂停,停止等操作!本篇我们就先来看下RTSP的PAUSE!PAUSE作用暂停请求会使得流传输暂时中断(相当于暂停),如果请求的URL指向一个流地址,则仅针对该流的回放和录制会被中断!PAUSE请求格式PAUSE请求的格式如下:格式比较简单,一般情况下主要就包含图示中字段!RTSP URI表示请求的流地址,...

2020-10-28 16:30:45 1063

原创 手撕RTSP协议系列(7)——PLAY

上一篇我们熟悉了RTSP_SETUP消息,SETUP可以说是PLAY的准备流程,只有SETUP请求被成功回复之后,客户端才可以发起PLAY请求。本篇我们就来看一下PLAY消息。PLAY的作用PLAY消息是客户端发送的播放请求,发送播放请求的时候可以指定播放区间!发起播放请求后,如果连接正常,则服务端开始播放,即开始向客户端按照之前在TRASPORT中约定好的方式发送音视频数据包!播放流程便这样开始了!PLAY的格式我们先来看一下PLAY消息中常包含的一些字段...

2020-10-28 16:25:54 2228

原创 手撕RTSP协议系列(6)——SETUP

上一讲我们讲了RTSP的DESCRIBE指令,本篇接着来看下一条:SETUP。SETUP 作用SETUP请求的作用是指明媒体流该以什么方式传输;每个流PLAY之前必须执行SETUP操作;发送SETUP请求时,客户端会指定两个端口,一个端口用于接收RTP数据;另一个端口接收RTCP数据,偶数端口用来接收RTP数据,相邻的奇数端口用于接收RTCP数据!SETUP格式我们来看SETUP请求的数据格式:SETUP表明消息类型;URI表示请求的RTSP服务器的地址;RTS...

2020-10-16 17:02:07 3166

原创 手撕RTSP协议系列(5)——DESCRIBE

上一篇我们介绍了RTSP的OPTION指令,客户端发起OPTION请求后,得到了RTSP服务器支持的指令。在此之后,客户端会继续向服务器发送DESCRIBE消息,来获取会话描述信息(sdp)。本篇我们来详细介绍一下DESCRIBE指令。DESCRIBE的作用向服务器请求会话描述信息(SDP)。DESCRIBE的格式1.请求格式:描述:首先用DESCRIBE描述请求类型;然后在URI中请求的服务器端地址;RTSP_VER表示RTSP的版本号,在加入\r\n消息头结...

2020-10-16 16:59:18 4222 2

原创 手撕RTSP协议系列(4)——OPTION

上一篇,我们介绍了sdp相关信息,接下来开始我们介绍RTSP相关的选项,本篇我们首先来看一下OTPION选项。OPTION(request)我们在RTSP消息格式中讲过,rtsp分为request和response两大类消息,OPTION是一个request消息,其格式如下图:我们来详细说下各个字段:OPTIONS:标识请求命令的类型;RTSP URI:请求的服务端的URI,以rtsp://开头的地址,一般为rtsp://ip:554(rtsp默认端口号);RTSP...

2020-10-16 16:56:53 1749

原创 手撕RTSP协议系列(3)——sdp格式详解

上一篇我们介绍了RTSP数据包的格式,在整个rtsp的交互过程,sdp也是很重要不可获取的一环,本篇我们来详细介绍一下sdp的格式!一 简介sdp,英文全称Session Description Protocol,会话描述协议,对应RFC2327。我们在此介绍,是因为RTSP协议中使用sdp进行媒体信息的描述,不过,sdp的应用不止于此,语音通话SIP协议,监控安防GB28181国标, 当下比较火热的webRtc都用到了sdp,可谓应用广泛!sdp的目的就是在媒体会话中,传递媒体流信息.

2020-10-16 16:54:53 2415

原创 手撕RTSP协议系列(2)——Rtsp消息格式

上一篇我们简单介绍了rtsp协议,本篇我们来看一下rtsp的消息结构!RTSP消息分为两大类,一类是请求消息(request),一类是回应消息(ressponse)!1请求消息(request)请求消息的格式如下:说明:请求消息由方法+URI+RTSP版本开头,之后跟一条或多条消息!URI:表示接收方的地址,如rtsp://192.168.1.201:554CR:表示回车LF:表示换行RTSP使用消息类型和消息体来表示不同类型的消息。最后一条消息...

2020-10-16 16:47:45 1093

原创 手撕RTSP协议系列(1)——Rtsp基本流程

手撕RTSP协议系列(1)——Rtsp基本流程哈喽,久违的小伙伴们!之前开了一个专辑手撕了rtmp协议!对于流媒体协议,rtsp协议也是很常见的,接下来我们继续手撕,手撕rtsp协议!本篇我们首先来简单了解一下rtsp协议并对其连接过程做一个概览!1rtsp协议简介rtsp,英文全称 Real Time Streaming Protocol,RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议!协议主要规定定了一对多应用程序如何有效地通过IP网络传送多...

2020-10-16 16:43:13 2635 1

原创 腾讯云直播服务评测

​2020年注定是魔幻的一年,疫情让我们更热爱生命,也让我们更珍视工作。今年的五一假期比往年多了两天,但在这个特殊的年份的特殊的劳动节中,工作和这个假期更配哦!小编在这个假期就玩了玩直播,解释一下,是腾讯云平台提供的关于一系列的视频应用场景的一些服务,很荣幸能够提前体验一把,顺便简单的做一些评测,主要从产品易用性和性能体验这两个角度做了些测试,在此记录一下。同时也感谢腾讯直播云平台的哥哥姐姐们提供宝贵机会!接下来,我们书归正传,开始我们的评测之路。1.推拉流地址易用性测试对于直播场景...

2020-05-28 09:25:34 1489

原创 手撕Rtmp协议细节(11)——videoData

上一篇我们看了rtmp audio的数据结构,这一篇我们来一起看一看rtmp video的数据结构。老规矩,先上一个video数据的抓包文件,有个直观的感受。通过抓包文件,我们可以看到,熟悉的Rtmp Header + Rtmp Body的组织结构,Body中打包的是经过压缩的视频数据。Body中打包视频数据的方式也与音频类似。首先用一个字节表示视频数据的header,之后是压缩后的视频数据(压缩后的数据是使用FLV的标准进行封装的)。我们来看一下videoData中的header部分...

2020-05-28 09:21:34 1842

原创 手撕Rtmp协议细节(10)——audio

​前面我们历经千难万险和重重障碍,接下来,我们音视频通信的二位主角终于要粉墨登场了,那就是音频君和视频君,这一篇我们来一睹音频君的风采。老样子,抓包文件先摆上来:说明:rtmp协议wireshark中过滤音频数据包的条件为:rtmpt.header.typeid == 0x08通过抓包文件,我们看到音频数据也是按照RTMP Header + Rtmp Body的组织结构来进行封装的。Header部分之前的文章解析过,我们主要来看Body部分。因为rtmp是Adobe公司开发的协...

2020-05-28 09:19:00 985 1

原创 手撕Rtmp协议细节(9)——play拉流

​1综述在客户端发起createStream命令之后,客户端收到服务端反馈的_result消息,接下来客户端就可以向服务端发起请求播放的指令,这个指令就是play。首先我们看一下官方给出的关于play的消息流示意图。首先我们来简单介绍一下关于play的流程,客户端向服务端发送play指令之后,服务端收到之后向客户端发送SetChunkSize消息,实际场景中大都在服务器回复客户端connect消息的时候一起发送setChunkSize消息;服务端向客户端发送Stre...

2020-05-20 19:11:41 1480

原创 手撕Rtmp协议细节(8)——publish推流

​publish对于推流端,经过releaseStream,createStream消息之后,得到了_result消息之后,接下来客户端就可以发起publish消息。推流端使用publish消息向rtmp服务器端发布一个命名的流,发布之后,任意客户端都可以以该名称请求视频、音频和数据。我们首先来看一下publish消息的组织结构: commandName:使用string类型,表示消息类型(“publish”); transactionID:使用number类型表示事物ID;...

2020-05-19 19:44:36 2251

原创 手撕rtmp协议细节(7)——createStream

​创建完RTMP连接之后就可以创建或者访问RTMP流,对于推流端,客户端要向服务器发送一个releaseStream命令消息,之后是createStream命令消息,对于拉流端,则要发送play消息请求视频资源。我们先来看看推流端的消息流程,当发送完createStream消息之后,解析服务器返回的消息会得到一个stream ID, 这个ID也就是以后和服务器通信的 message stream ID, 一般返回的是1,不固定。createStream我们来先看看createStream...

2020-05-19 19:43:22 1242 1

原创 手撕Rtmp协议细节(6)——connect后续三剑客

在讲解connect消息的时候,我们说过服务器收到connect消息之后,会向客户端发送Window Acknowledgement Size消息和Set Peer Bandwidth消息,这一篇就来介绍一下这两条消息。1.概览首先从抓包文件看一下:示例中服务器ip地址是192.17.1.200,客户端ip地址是192.17.1.92,客户端向服务器发送connect消息之后,服务器向客户端发送了Window Acknowledgement Size和Set Peer Bandw...

2020-05-19 19:42:04 990

原创 手撕Rtmp协议细节(5)——result消息

​rtmp客户端发送connect消息之后,rtmp server会给客户端发送_result消息,通过该消息通知客户端连接状态(success/fail)。这一篇我们就详细来讲讲_result消息。1.概览老规矩,我们先来看一个_result消息的抓包。可以看到,一个_result消息由4部分组成,类型标识,transaction ID,properties,response related information,这四部分均以AMF格式进行编码,我们一一来看:...

2020-05-19 19:40:42 727 1

原创 手撕Rtmp协议细节(4)——connect消息

​我们继续来说rtmp协议哈。当rtmp客户端和rtmp服务端握手完成之后,客户端就会向服务端发送connect消息。connect消息的格式按照RTMP Header+RTMP Body的格式组织。其中RTMP Header的Type ID为0x14,表示以AMF0编码的command消息。对于RTMP Body,connect的组织格式如下:connect消息由四部分组成,首先是command name,用字符串类表示命令的类型,即"connect";在其之后紧跟着的是事务id,该值永...

2020-05-19 19:39:09 1438

原创 手撕Rtmp协议细节(3)——Rtmp Body

上一篇讲了RTMP数据包中关于Header的数据组织格式,不过一个完整的RTMP数据包除了Header之外,紧跟着的是RTMP Body,这一篇就继续来说一下RTMP Body的数据组织结构了。说到RTMP Body的数据包组织格式,就不得不提到AMF。AMF英文全称Action Message Format,是Adobe定义的一套用来进行数据打包的格式,主要的版本有AFM0和AMF3,不过发展至今,实际场景中AMF0一直用的比较多,AMF3相对少见,本篇就以AMF0为例来讲解了。...

2020-05-19 19:36:21 1107

原创 手撕rtmp协议细节(2)——rtmp Header

​Rtmp协议握手完成之后,就可以进行数据交互了,但交换的数据格式需要一个组织的标准,发送端按照该标准进行数据的组装,接收方按照该标准进行数据的拆解,这样才能完成通信。rtmp的协议的数据包,总的来讲分为两大部分,一部分是Rtmp Header,另一部分为Rtmp Body,这一篇我们来主要讲解一下Rtmp Header的组织形式。RTMP header的长度不固定,可能的长度为12字节,8字节,4字节,1字节。具体长度为多少个字节,由RTMP header数据包的第一个字节的高2位决...

2020-05-19 19:34:36 1342

原创 手撕Rtmp协议细节(1)——握手

​之前文章,我们介绍过基于rtmp的直播环境的搭建,接下来,我们一起来学习一下Rtmp协议的细节,由于协议本身比较琐碎,小编会将rtmp协议拆解为一个个的小的模块,通过本公号推送rtmp协议的系列文章,欢迎诸位关注,本篇首先来看看rtmp协议握手的部分。RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议是应用层协议,基于TCP。RTMP是一种设计用来进行实时通信的网络协议,主要用来在Flash平台和支持RTMP协议的流媒体/交互服务器之...

2020-05-19 19:32:22 1061

原创 看他怎么“折腾”(四)

来看另外一些比较优雅的访问Mat数据空间的方式,今天为你带来的是at。at同样也是一个模版函数,但与ptr不同的是,at返回的是一个“引用”,即一个别名,而且一般来讲不占用内存空间(具体与编译器先关)。同样呢,当发生错误时,at也可以抛出异常,可以try {} catch {}将其抓获。所以呢,at函数就有了这样一些优点: 是接口最简单的一种遍历方式;其访问数据的效率较高。今天的“栗子”长这样fo...

2018-04-08 09:48:01 195

原创 看他怎么”折腾“(三)

两讲介绍了如何遍历Mat的连续数据空间和不连续的数据空间,这两种方式相对都比较直接和粗暴,直接访问data字段。接下来介绍一些相对委婉和优雅的方式,今天来看看ptr模版函数的方式。ptr模版函数是Opencv Mat类提供的一种访问数据的方式,基本使用方式大概如下:mat.ptr<Vec3b>(row)mat.ptr<Vec3b>(row, col)OpenCV的Mat类提...

2018-04-02 09:14:51 185

原创 看“他”怎么折腾(二)

上一节,我们介绍了Mat遍历连续空间的方式,当然存数数据的空间也有可能是不连续的,本节就来简单介绍一下不连续空间的遍历方式。再写代码二维数组同样,先来一段代码:int es = mat.elemSize();for (int row = 0; row < mat.rows; row++){     for (int col = 0; col < mat.cols; col++)    ...

2018-03-30 09:30:53 136

原创 看“他”怎么折腾(一)

“这孩子”,你知道我说的是OpenCV的Mat类,不知道在娘胎里怎么折腾呢,想不想一览究竟呢,接下来就为你细细道来。1OpenCV中Mat类是一个是一个用来存放视图像数据的结构,其中的数据可能是连续存储的,也可能是不连续存储的。Mat类提供了一个接口来判断其存储的数据是否是连续的方法:isContinuous()。如果是连续的返回true,不连续返回false。Mat类的数据放在其一个叫做data...

2018-03-29 09:09:16 173

原创 “我们的孩子长出胎心胎芽”

我们这个“孩子”主要基于Opencv去做,所以,首先呢,介绍一下Opencv中最关键也最基础的一个类,Mat类,这也就是一个孩子,一个生命最初始的状态喽。Mat是OpenCV最基本的数据结构, Mat及矩阵(Matrix)的缩写。我们在读取图片的时候就是将图片定义为Mat类型。Mat是一个类,提供了一大堆重载的构造函数,在opencv中mat.hpp文件中有其详细的定义以及提供的构造函数已经相关的...

2018-03-28 08:46:48 274

原创 视频编辑器之--“怀了”

#include #include using namespace cv;int main(int argc, char *argv[]){Mat image = imread("1.png", 0);namedWindow("img");imshow("img", image);waitKey(0);            return 0;}

2018-01-15 09:11:33 226

原创 视频编辑器之----“孕前准备”

这里是备孕分割线!视频编辑器需要的环境准备VS2015CMakeQtOpencv我们的视频编辑器基于Opencv开发,所以我们首先需要编译产opencv的库文件以及头文件等。在这里提供opencv在github上的下载路径: https://github.com/opencv/opencv.git。当然也可以通过opencv去官网下载代码,小编比较傻,在官网没找到,所以大家自行探索吧。整个开发过程...

2018-01-12 09:24:20 242

原创 视频编辑器系列课程(导语)

简单粗暴,诙谐的邀你开启一段关于视频编辑器的学习历程。同时也可关注公号学习。

2018-01-11 09:32:12 298

原创 和你的播放器说“分手”

本文简单介绍使用ffmpeg进行视频播放和视频转换的相关功能,希望对你有所帮助。首先介绍一下ffmpeg工具的下载和安装,做什么用呢,一会往下看就知道喽。1.下载地址:http://ffmpeg.zeranoe.com/builds/2. 下载版本示意: 3. 安装:下载对应自己pc对应的版本之后,

2018-01-09 10:59:39 319

原创 简单流媒体服务器

利用DarwinStreamServer搭建流媒体服务器的过程记录 准备材料: 1 DarwinStreamSever安装包,Perl解释器,MP4Box安装包,当前目录下的Tools.rar包含了DarwinStreamServer和Perl解释器的安装包。 2 一些视频文件; 3 播放器: VLC, ffplay,Quick Pl

2018-01-08 16:20:29 413

原创 花屏是个什么鬼

图形图像开发的时候,是否经常遇到一些花屏的问题呢,有没有很头疼呢。本文总结了一些常见的花屏的现象以及可能产生的原因。当然喽,这只是个人一些所见所想,如果您有更好的建议,或者您对哪里有异议,欢迎指正。第一种,这样的,不知你见过为没有遇到如此的花屏现象,一般情况下,和您编码的分辨率大小相关性比较大了,比如说,编码前的图像分辨率为1280x

2018-01-05 09:16:37 620

原创 分块的简单介绍

分块的简单介绍

2018-01-03 09:10:32 394

原创 常见YUV格式

常见YUV格式

2018-01-02 09:48:15 253

原创 常见的颜色空间转换公式

颜色空间转换公式

2017-12-29 09:01:47 1540

原创 常见RGB格式

常见RGB格式

2017-12-28 09:13:05 14913

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除