一、搭建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)——收流篇:(二)示例的更多相关文章

  1. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(一)简介

    关于实时流媒体传输的开源库,目前流行的主要有两个:live555和jrtplib. 其中live555将rtp.rtcp和rtsp的传输协议实现集于一身,功能齐全,是个超强的集合体.但是对于嵌入式系统 ...

  2. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(三)RTSP命令解析

    一.RTSP命令简述 RTSP是用来控制实时流媒体“播放”.“暂停”.“停止”.“录像”等行为的传输协议.该协议规定了一系列命令以及这些命令的发送格式,RTSP客户端可以通过发送这些指定的命令,从而控 ...

  3. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(四)example代码解析

    一.example逻辑伪码 myRTSPClient附带3个example程序:simple_example.complete_example.common_example.后两个example都是从 ...

  4. 一个基于JRTPLIB的轻量级RTSP客户端——myRTSPClient详解

    myRTSPClient是一个轻量级的RTSP客户端C++函数库. 支持多平台,支持H264,H265,MPA等音视频传输. 免费开源,接口易用,配套教程与代码解析(本博客). 适合RTSP入门学习. ...

  5. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——解码篇:(一)用ffmpeg解码视频

    一.概述 myRTSPClient(RTSPClient)获取音视频数据之后,接下来的工作便是将音视频数据交给解码器去解码(ffmpeg),ffmpeg解码之后于是便有了呈现在终端用户(USER)面前 ...

  6. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(四)用户接口层之处理SDP报文

    当RTSP客户端向RTSP服务端发送DESCRIBE命令时,服务端理应当回复一条SDP报文. 该SDP报文中包含RTSP服务端的基本信息.所能提供的音视频媒体类型以及相应的负载能力,以下是一段SDP示 ...

  7. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(五)用户接口层之提取媒体流数据

    当RTSP客户端向RTSP服务端发送完PLAY命令后,RTSP服务端就会另外开启UDP端口(SDP协商定义的端口)发送RTP媒体流数据包.这些数据包之间会间隔一段时间(毫秒级)陆续被发送到RTSP客户 ...

  8. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(十)使用JRTPLIB传输RTP数据

    myRtspClient通过简单修改JRTPLIB的官方例程作为其RTP传输层实现.因为JRTPLIB使用的是CMAKE编译工具,这就是为什么编译myRtspClient时需要预装CMAKE. 该部分 ...

  9. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(二)用户接口层之RtspClient类及其构造函数

    RtspClient类是myRTSPClient函数库所有特性集中实现的地方. 主要为用户提供: 1. RTSP协议通信接口函数,如DoOPTIONS(): 2. RTSP账号.密码设置函数,如Set ...

随机推荐

  1. Struts2国际化信息机制

    国际化信息机制  (三种 Action范围. Package范围. 全局) 1. 全局国际化配置信息文件 全局国际化文件,对所有Action 生效,任何程序都可以访问到,需要在struts.xml 配 ...

  2. JavaWeb 后端 <四> 之 Cookie HttpSession 学习笔记

    一.会话管理概述 1.什么是会话? 好比一次通话.打开浏览器,点击多次链接(发出多次请求和收到多次的响应),关闭浏览器,这个过程就是一次会话. 有功能 可以  文件 新建会话 2.解决的问题是什么? ...

  3. 面向对象15.3String类-常见功能-获取-2

    public class String_APImethod {/* * 1.4获取字符串中的一部分字符串,也叫字符串 * String substring(int beginIndex, int en ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)

    1.非注解的处理器映射器和适配器 1.1非注解的处理器映射器 前面我们配置的org.springframework.web.servlet.handler.BeanNameUrlHandlerMapp ...

  5. FreeRTOS——错误排查

    1. printf-stdarg.c 在调用标准库函数时,栈空间的用量可能急剧上升,特别是IO与字符串处理函数,比如 sprintf(). 在FreeRTOS下载包中有一个名为printf-stdar ...

  6. jmeter压力测试报告 - DEMO

    XXX压力测试报告 时间:2015-08-04                                             测试人员:xxx 目录 XXX压力测试报告... 1 一  测试 ...

  7. NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型

    LSA(Latent semantic analysis,隐性语义分析).pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Late ...

  8. 如何写出面试官欣赏的Java单例

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 今天我们不谈单例模式的用途,只说一说如果在面试的时候面试官让你敲一段代码 ...

  9. super 与 this 同时使用问题

    大家都知道this 和 super 调用构造函数时都必须放在第一句,今天同学问我的一个问题有点意思. 那么:我怎么在子类中 显式的用 super 初始化父类同时用 this 初始化子类? ------ ...

  10. dpkg和perl的依赖环境出现错误故障解决(磁盘原因)

    内核: uname -a Linux localhost.localdomain 3.4.29-t4 #12 Wed Mar 13 16:50:15 EST 2013 armv7l armv7l ar ...