一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(二)示例
一、搭建RTSP服务器
要想测试RTSP客户端,没有服务端怎么行呢?然而,有时候条件有限,手头并没有独立的RTSP服务器拿来用,那么我们不妨自己撘一个。
以下有2种方便的做法可供选择:
第一种:使用vlc播放器(推荐做法)
这种方法最方便,而且任何视频格式的文件都可以拿来测试,具体做法网上有很多,以下提供一个链接以供参考。
http://blog.csdn.net/beitiandijun/article/details/9232405
这种方法只有一个地方需要注意一下:
如果你想让你的vlc RTSP服务器监听RTSP默认端口,也就是554,那么vlc必须要以root权限打开,如下图。

第二种:使用live555的test程序
从live555官网下载最新程序并且make。在testProgs目录里会有一个testOnDemandRTSPServer的程序,这个程序会根据当前目录中的各种音视频格式的文件(mpeg, h264, acc, ...),创建RTSP服务器,默认端口是8554。现在,我们把testOnDemandRTSPServer.cpp修改一下
......
// RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554, authDB);
RTSPServer* rtspServer = RTSPServer::createNew(*env, , authDB); // 修改RTSP端口为554
...... // A MPEG-4 video elementary stream: // 将MPEG-4注释掉
// {
// char const* streamName = "mpeg4ESVideoTest";
// char const* inputFileName = "test.m4e";
// ServerMediaSession* sms
// = ServerMediaSession::createNew(*env, streamName, streamName,
// descriptionString);
// sms->addSubsession(MPEG4VideoFileServerMediaSubsession
// ::createNew(*env, inputFileName, reuseFirstSource));
// rtspServer->addServerMediaSession(sms); // announceStream(rtspServer, sms, streamName, inputFileName);
// } // A H.264 video elementary stream: // 保留H264
{
char const* streamName = "ansersion"; // 设置rtsp url 为:rtsp://<IP>/ansersion
char const* inputFileName = "test.264"; // 视频源文件 test.264
ServerMediaSession* sms
= ServerMediaSession::createNew(*env, streamName, streamName,
descriptionString);
sms->addSubsession(H264VideoFileServerMediaSubsession
::createNew(*env, inputFileName, reuseFirstSource));
rtspServer->addServerMediaSession(sms); announceStream(rtspServer, sms, streamName, inputFileName);
} // A H.265 video elementary stream: // 将H265注释掉
// {
// char const* streamName = "h265ESVideoTest";
// char const* inputFileName = "test.265";
// ServerMediaSession* sms
// = ServerMediaSession::createNew(*env, streamName, streamName,
// descriptionString);
// sms->addSubsession(H265VideoFileServerMediaSubsession
// ::createNew(*env, inputFileName, reuseFirstSource));
// rtspServer->addServerMediaSession(sms); // announceStream(rtspServer, sms, streamName, inputFileName);
// } ......
可以看到,删减的过程很简单:
1. 将8554端口改成554;
2. 将h264以外的音视频格式注释掉;
3. 设置RTSP URI(rtsp://<IP>/ansersion)、指定H264视频源文件(test.264)。
不像vlc那么方便,此处的视频源文件必须是h264格式的,以下链接可以找到live555官网提供的几个h264格式的视频源文件。
http://www.live555.com/liveMedia/public/264/
二、编译myRTSPClient
$ cd myRtspClient/
$ ./genMakefiles linux
$ make
(更多的编译选项,可以查看README.md)
OK啦!这时,myRtspClient/example/里会生成3个example程序:simple_example, complete_example, common_example。
现在我们拿common_example先尝个鲜(假设rtsp服务端RTSP URI为:"rtsp://192.168.81.145/ansersion"):
$ ./common_example rtsp://192.168.81.145/ansersion
接下来我们就可以看到源源不断的数据传过来了,并且会被写入文件"test_packet_recv.h264",这个文件可以使用ffplay或者ElecardStreamTools来播放。
好啦,接下来我们先来简单介绍一下RTSP命令。

温馨提示
1、myRtspClient在虚拟接上调试时,网络配置使用桥接方式

一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(二)示例的更多相关文章
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(一)简介
关于实时流媒体传输的开源库,目前流行的主要有两个:live555和jrtplib. 其中live555将rtp.rtcp和rtsp的传输协议实现集于一身,功能齐全,是个超强的集合体.但是对于嵌入式系统 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(三)RTSP命令解析
一.RTSP命令简述 RTSP是用来控制实时流媒体“播放”.“暂停”.“停止”.“录像”等行为的传输协议.该协议规定了一系列命令以及这些命令的发送格式,RTSP客户端可以通过发送这些指定的命令,从而控 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(四)example代码解析
一.example逻辑伪码 myRTSPClient附带3个example程序:simple_example.complete_example.common_example.后两个example都是从 ...
- 一个基于JRTPLIB的轻量级RTSP客户端——myRTSPClient详解
myRTSPClient是一个轻量级的RTSP客户端C++函数库. 支持多平台,支持H264,H265,MPA等音视频传输. 免费开源,接口易用,配套教程与代码解析(本博客). 适合RTSP入门学习. ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(一)用ffmpeg解码视频
一.概述 myRTSPClient(RTSPClient)获取音视频数据之后,接下来的工作便是将音视频数据交给解码器去解码(ffmpeg),ffmpeg解码之后于是便有了呈现在终端用户(USER)面前 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(四)用户接口层之处理SDP报文
当RTSP客户端向RTSP服务端发送DESCRIBE命令时,服务端理应当回复一条SDP报文. 该SDP报文中包含RTSP服务端的基本信息.所能提供的音视频媒体类型以及相应的负载能力,以下是一段SDP示 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(五)用户接口层之提取媒体流数据
当RTSP客户端向RTSP服务端发送完PLAY命令后,RTSP服务端就会另外开启UDP端口(SDP协商定义的端口)发送RTP媒体流数据包.这些数据包之间会间隔一段时间(毫秒级)陆续被发送到RTSP客户 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(十)使用JRTPLIB传输RTP数据
myRtspClient通过简单修改JRTPLIB的官方例程作为其RTP传输层实现.因为JRTPLIB使用的是CMAKE编译工具,这就是为什么编译myRtspClient时需要预装CMAKE. 该部分 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(二)用户接口层之RtspClient类及其构造函数
RtspClient类是myRTSPClient函数库所有特性集中实现的地方. 主要为用户提供: 1. RTSP协议通信接口函数,如DoOPTIONS(): 2. RTSP账号.密码设置函数,如Set ...
随机推荐
- 从零Wordpress建站经验分享,内附耗时间及成本
5月末回国,工作进入空档期. 每天上班没有任务压身,日子过得反而更加难熬. 一直自己做一个网站,却总下不定决心,总是懒得迈出第一步. 正巧朋友需要建设一个宣传用网站. 外面的公司给他报价很高. 反正我 ...
- HDU 2203 亲和串(KMP)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2203 题目: 亲和串 Time Limit: 3000/1000 MS (Java/Others) ...
- Klass与Oop
前段时间,一直在看<Hotspot实战>,顺便编译了一份OpenJDK的源码,然后就在eclipse里面调试起来. 虽然我的入门语言是c/c++,但是被Java拉过来好几年了,现在再看源码 ...
- Java调度实现
根据自己在项目中用到的调度,简单说说:(如有不正确的地方,请留言...) Java调度:他是用来解决访问时间慢的手段. 通俗的讲就是为需要的数据(你需要展示的数据)建立一张中间表存放,提前把数据读出来 ...
- SpringMVC源码情操陶冶-ViewResolver视图解析
简单分析springmvc是如何解析view视图,并返回页面给前端 SpringMVC配置视图解析器 <bean id="viewResolver" class=" ...
- 使用Go和Let's Encrypt证书部署HTTPS
为什么要使用HTTPS?使用HTTPS的途径有哪些?如何用Go来部署HTTPS?拿出你的小本本,你要的干货都在这儿! HTTPS的好处我们已在之前的文章中提高好多.它加密浏览器和服务器之间的流量,保障 ...
- 使用Visual Studio加断点调试Unity游戏的C#代码
1.安装Unity5.2.5 2.安装Microsoft Visual Studio 2013 3.打开VS2013,点击Tools | Extensions and Updates,然后在这个界面点 ...
- 【SignalR学习系列】2. 第一个SignalR程序
新建项目 1.使用VisualStudio 2015 新建一个Web项目 2.选择空模板 3.添加一个新的SignalR Hub Class (v2)类文件,并修改类名为ChatHub 4.修改Cha ...
- Java第四次上课博文动手动脑
Java第四次上课博文动手动脑 1. 查看String.equals()方法 public class StringEquals { /** * @param args the command ...
- NOIP2011玛雅游戏
闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...