关于实时流媒体传输的开源库,目前流行的主要有两个:live555和jrtplib. 其中live555将rtp.rtcp和rtsp的传输协议实现集于一身,功能齐全,是个超强的集合体.但是对于嵌入式系统来说,live555的负载明显过大(与tcp直接传输媒体流相比). 而jrtplib则是只实现了rtp和rtcp的部分,而没有实现RTSP的部分.这既是jrtplib的短板,但同时也是jrtplib的优势. 对比一下live555和jrtplib的example程序,我们可以发现jrtplib要容易…
myRTSPClient是一个轻量级的RTSP客户端C++函数库. 支持多平台,支持H264,H265,MPA等音视频传输. 免费开源,接口易用,配套教程与代码解析(本博客). 适合RTSP入门学习. 适用轻量级RTSP客户端设备开发. 本教程共分为3部分: 1. 收流篇: 使用myRTSPClient接收音视频数据流. 收流篇:(一)简介 收流篇:(二)示例 收流篇:(三)RTSP命令解析 收流篇:(四)example代码解析 2. 解码篇: 使用myRTSPClient接收音视频数据流,然后…
myRTSPClient主要可以分成3个部分: 1. RTSPClient用户接口层: 2. RTP 音视频传输解析层: 3. RTP传输层. "RTSPClient用户接口层": 包含所有myRTSPClient的外显特性,包括与RTSP服务器交互接口和音视频数据提取接口,直接供用户使用. "RTP音视频传输解析层": 用于区分不同音视频格式(H264,H265,MPA等等)RTP数据包,分离其中的音视频数据和格式数据."RTSPClient用户接口层&…
一.差异 本地音视频数据格式和用来传输的音视频数据格式存在些许差异,由于音视频数据流到达客户端时,需要考虑数据流的数据边界.分包.组包顺序等问题,所以传输中的音视频数据往往会多一些字节. 举个例子,有时候一个媒体分包数据量很大(比如H264的一个分包常常会有2-4K),而大多数网络的MTU(最大传输单元)基本都是1500字节. 如果频繁收发这么大的数据包,会额外增添路由器的负担,甚至会导致网络阻塞,不利于网络的稳定. 于是服务器就自行对H264进行了分包以适应MTU,每个分包的开始处往往会多出一…
当RTSP客户端向RTSP服务端发送DESCRIBE命令时,服务端理应当回复一条SDP报文. 该SDP报文中包含RTSP服务端的基本信息.所能提供的音视频媒体类型以及相应的负载能力,以下是一段SDP示例: RTSP/1.0 200 OK Server: VLC/2.1.6 Date: Sun, 06 Dec 2015 11:51:38 GMT Content-Type: application/sdp Content-Base: rtsp://127.0.0.1:554/ansersion Co…
一.搭建RTSP服务器 要想测试RTSP客户端,没有服务端怎么行呢?然而,有时候条件有限,手头并没有独立的RTSP服务器拿来用,那么我们不妨自己撘一个. 以下有2种方便的做法可供选择: 第一种:使用vlc播放器(推荐做法) 这种方法最方便,而且任何视频格式的文件都可以拿来测试,具体做法网上有很多,以下提供一个链接以供参考. http://blog.csdn.net/beitiandijun/article/details/9232405 这种方法只有一个地方需要注意一下: 如果你想让你的vlc…
一.RTSP命令简述 RTSP是用来控制实时流媒体“播放”.“暂停”.“停止”.“录像”等行为的传输协议.该协议规定了一系列命令以及这些命令的发送格式,RTSP客户端可以通过发送这些指定的命令,从而控制媒体流数据的传输.rfc2326上明确指定的有以下11个命令:DESCRIBE, ANNOUNCE, GET_PARAMETER, OPTIONS, PAUSE, PLAY, RECORD, REDIRECT, SETUP, SET_PARAMETER, TEARDOWN.要完成基本的视频流传输,…
当RTSP客户端向RTSP服务端发送完PLAY命令后,RTSP服务端就会另外开启UDP端口(SDP协商定义的端口)发送RTP媒体流数据包.这些数据包之间会间隔一段时间(毫秒级)陆续被发送到RTSP客户端,此时RTSP客户端可以调用GetMediaData等接口获取媒体流数据. 一.uint8_t * RtspClient::GetMediaData(string media_type, uint8_t * buf, size_t * size, size_t max_size) 该函数的作用即获…
RtspClient类是myRTSPClient函数库所有特性集中实现的地方. 主要为用户提供: 1. RTSP协议通信接口函数,如DoOPTIONS(): 2. RTSP账号.密码设置函数,如SetUsername(): 3. 音视频码流接收函数,如GetVideoData(). 本篇主要介绍RtspClient的构造函数和析构函数. 一.RtspClient::RtspClient() RtspClient::RtspClient(): RtspURI(), RtspSockfd(-), R…
截至版本1.2.3,myRtspClient函数库共支持以下6个RTSP命令: (1)OPTIONS (2)DESCRIBE (3)SETUP (4)PLAY (5)PAUSE (6)TEARDOWN 对应的接口函数都以"Do"开头,如"DoOPTIONS".各个接口函数写法相似,大同小异,差异部分会在后续章节做说明,现以DoOPTIONS()和DoPLAY()举例. 一.ErrorType RtspClient::DoOPTIONS(string uri) Err…